/**
 * @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 } from './render/voxelRenderer';
export type { VoxelRendererOptions, VoxelCloud } from './render/voxelRenderer';
export { Rng } from './math/rng';
export { encodeModel, decodeModel, validateModel, assertModelValid } from './models/format';
export type { VoxelModel } from './models/format';
export { treeModel, boulderModel } from './models/generators';
export type { Variant } from './models/generators';
export { stampModel } from './models/stamp';
export type { StampClip } 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 } 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 { 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 { EntityWorld } from './core/ecs';
export type { Entity, EcsSystem } from './core/ecs';
export { screenMoveToWorld } from './core/controls';
export type { ControlState } from './core/controls';
export { ISO_YAW } from './render/voxelRenderer';