Newer
Older
rpg / v2 / packages / engine / src / index.ts
/**
 * @rpg/engine v2 — воксельный движок (скелет).
 *
 * Принципы (docs/plan.md, «Направление v2» и «Уроки черновика»):
 * - three.js — только низкоуровневый рендер-бэкенд; ядро движка о нём не знает.
 * - Все позиции/направления — в одном мировом пространстве; проекция/рендер —
 *   единственная точка преобразования на границе (урок v1 «летающих» объектов).
 * - Чистая математика — отдельно от вьюх, тестируется без рендера.
 * - Агентный мост и CLI-проверки — часть ядра, а не надстройка.
 *
 * Модули (появятся по мере треков v2): мир/чанки, модели (JSON + .vox),
 * рига/анимация (кривые), генераторы моделей, агентный мост.
 */

/** Версия движка v2 (синхронизируется с package.json). */
export const ENGINE_VERSION = '2.0.0-alpha.0';

export { VoxelGrid, hexToRgb } from './voxel/grid';
export type { VoxelPalette } from './voxel/grid';
export { meshVoxels, meshRegion } from './voxel/mesher';
export type { VoxelMesh, MeshOptions, VoxelAt, RegionBounds } from './voxel/mesher';
export { VoxelWorld } from './world/world';
export { meshChunk, chunkBounds } from './world/worldMesher';
export { Chunk, CHUNK_SX, CHUNK_SZ } from './world/chunk';
export { VoxelRenderer, worldTileAtlas } from './render/voxelRenderer';
export { createSpriteLayer, createQuadLayer } from './render/particles';
export { postPass } from './render/postShader';
export type { PostOptions, PostPassSpec } from './render/postShader';
export type { PostPassHandle } from './render/voxelRenderer';
export type { ParticlePoint, ParticleLayer } from './render/particles';
export type { CloudTiles, WorldTileAtlas } from './render/voxelRenderer';
export { ModelViewer, modelStats, orbitPosition } from './render/modelViewer';
export type { ModelStats, ModelViewerOptions } from './render/modelViewer';
export type { VoxelRendererOptions, VoxelCloud } from './render/voxelRenderer';
export { Rng } from './math/rng';
export { encodeModel, decodeModel, validateModel, assertModelValid, texIdAt, texBytes, resolveTiles } from './models/format';
export type { VoxelModel, VoxelTile, ModelTexture, ResolvedTile } from './models/format';
export { treeModel, boulderModel, backpackModel, torchModel } from './models/generators';
export type { Variant, GearPalette } from './models/generators';
export { stampModel } from './models/stamp';
export type { StampClip, StampOptions } from './models/stamp';
export { parseVox, exportVox } from './models/vox';
export { remapSlots } from './models/paletteMap';
export { mannequin, MANNEQUIN_BONES } from './models/mannequin';
export type { Mannequin, MannequinBone, MannequinPalette } from './models/mannequin';
export { eulerMat, mat3Mul, composeAffine, affinePoint, rotateAround, addVec, IDENTITY_AFFINE } from './animation/mat';
export type { Vec3, Mat3, Affine } from './animation/mat';
export { makeRig, bindNearest, validateRig, boneWorlds, poseVoxels } from './animation/rig';
export type { RigBone, VoxelRig, Pose, PosedVoxel } from './animation/rig';
export { samplePose, validateClip, footMinY } from './animation/clip';
export type { AnimClip, ClipKey, BoneFrame } from './animation/clip';
export { attachVoxels, attachTiles } from './animation/attach';
export type { Attachment } from './animation/attach';
export { walkClip } from './animation/locomotion';
export type { WalkParams } from './animation/locomotion';
export { makeBody, stepBody, collides, GRAVITY } from './physics/body';
export type { Body, SolidWorld } from './physics/body';
export { Character } from './physics/character';
export type { CharacterOptions, CharacterVoxel } from './physics/character';
export { GameLoop } from './core/loop';
export type { LoopCallbacks, LoopOptions } from './core/loop';
export { Cooldown } from './core/cooldown';
export { StateMachine } from './core/stateMachine';
export type { StateDef } from './core/stateMachine';
export { EntityWorld } from './core/ecs';
export type { Entity, EcsSystem } from './core/ecs';
export { screenMoveToWorld } from './core/controls';
export type { ControlState } from './core/controls';
export { SceneManager } from './core/scene';
export type { Scene, FadeOverlay, SceneTransition } from './core/scene';
export { CutsceneRunner, validateCutscenes } from './core/cutscene';
export type { CutsceneStep, CutsceneSnapshot, CutsceneCamera } from './core/cutscene';
export { ISO_YAW } from './render/voxelRenderer';
export { validateDialogue, evalConditions } from './dialogue/graph';
export type {
    DialogueGraph, DialogueNode, DialogueChoice, DialogueConditions, VarCondition,
    DialogueEffects, DialogueEffectOp, DialogueResult, DialogueState, DialogueWorld,
} from './dialogue/graph';
export { DialogueRunner } from './dialogue/runner';
export type { DialogueView } from './dialogue/runner';
export { nearestInteractable, interactablesInRadius } from './interaction/interactables';
export type { Interactable, InteractableHit } from './interaction/interactables';
export { Inventory, inventoryFromData } from './inventory/inventory';
export type { InventoryOptions, InventoryChange, InventoryChangeKind, InventoryData } from './inventory/inventory';
export { SaveManager } from './save/saveManager';
export type { SaveSlotMeta, StorageLike } from './save/saveManager';
export { horDist, horNorm, inCircle, inCone, angleBetween } from './combat/shapes';
export type { Hor } from './combat/shapes';
export { hasLineOfSight } from './combat/los';
export { PLAYER_COMBAT } from './combat/stats';
export { ENEMY_KINDS, withDefaults } from './combat/enemies';
export type { EnemyKindDef, EnemyKindId, EnemyPatrolDef } from './combat/enemies';
export { EnemyBrain, ENEMY_STATES, NOISE_HEAR_LEVEL, NOISE_WAKE_LEVEL } from './combat/brain';
export type { EnemyIntent, EnemySenses } from './combat/brain';
export { PlayerCombat } from './combat/playerCombat';
export { CombatWorld, circleHitsSolid, moveCircleHor } from './combat/world';
export type { CombatDeps, CombatHooks, EnemyComp, ProjectileComp } from './combat/world';export { AudioManager } from './audio/AudioManager';
export type { AudioBuses, BusName, MusicHandle, PlayOptions, SfxHandle } from './audio/AudioManager';
export { renderSpec, RATE } from './audio/SoundSpec';
export type { SoundSpec, SoundKind, SpecVoice } from './audio/SoundSpec';
export { renderMusic, renderMusicStereo } from './audio/Music';
export type { MusicSpec, TrackSpec, NoteEvent, InstrumentKind } from './audio/Music';
export { BufferCache } from './audio/decode';
export {
    DEFAULT_DAY_NIGHT, DEFAULT_DUSK_COLOR, DUSK_PEAK,
    dayNightAmbient, dayNightFactor, dimColor, flickerFactor, lerpAmbient, lerpColor,
} from './render/daynight';
export type { DayNightSpec } from './render/daynight';
export type { PointLightOptions, PointLightHandle } from './render/voxelRenderer';
// setDayAmbient/setNight/addPointLight — методы класса VoxelRenderer