/** * MX 通用塔防战斗模块(纯 TypeScript,无 Cocos 依赖) * * ## 快速上手 * * ```ts * import { * BattleHost, * BattleEventType, * EffectRegistry, * registerBuiltinBattleEffects, * } from 'db://assets/mx/module/battle'; * * // 1. 注册内置通用效果(DealDamage / Heal / ApplyBuff 等原语) * registerBuiltinBattleEffects(); * // 业务层专属效果在自己的模块里 EffectRegistry.register('MyEffect', handler) * * // 2. 配置:自实现 IConfigProvider 或用 InMemoryConfigProvider * // const config = ...; * * // 3. 打开战斗(可选 bridge 注入寻路、表现) * const host = BattleHost.open({ * levelId: 'sample_1', * config, * mode: 'solo', * bridge: { * onCombatTick(session, dt) { /* 怪物位移、同步 Node *\/ }, * onBattleEvent(session, e) { * if (e.type === BattleEventType.UnitSpawned) { /* 创建 prefab *\/ } * }, * }, * }); * * // 4. 备战 → 放置 → 开战 * host.deploy(0, 'tower_blade', { row: 8, col: 4 }); * host.startCombat(); * * // 5. 每帧驱动(游戏 loop / Cocos update) * host.tick(1 / 60); * * // 6. 监听事件 * host.on(BattleEventType.DamageDealt, (e) => console.log(String(e))); * * // 7. 结束 * host.destroy(); * ``` * * ## 扩展点 * * | 接口 | 用途 | * |------|------| * | `IConfigProvider` | 单位 / 技能 / Buff / 关卡 / 波次配表 | * | `IBattleBridge` | 引擎相关:寻路 tick、prefab、特效 | * | `EffectRegistry` / `ConditionRegistry` | 注册自定义 Effect / Condition(key 为字符串) | * | `DeploySystem.setRules` | 放置规则(备战阶段、区域限制等) | */ // Core export { BattlePhase } from './core/BattlePhase'; export { BattleFlowMode } from './core/BattleFlowMode'; export { BattleClock } from './core/BattleClock'; export { SeededRNG } from './core/SeededRNG'; export { BattleSession } from './core/BattleSession'; export { BattleFactory } from './core/BattleFactory'; export type { BattleCreateOptions } from './core/BattleFactory'; export { BattleHost } from './core/BattleHost'; export type { BattleHostOptions } from './core/BattleHost'; // Bridge export type { IBattleBridge } from './bridge/IBattleBridge'; // ECS 核心框架(从独立 ecs 模块 re-export) export type { EntityId } from 'db://assets/mx/module/ecs'; export { INVALID_ENTITY_ID } from 'db://assets/mx/module/ecs'; export { World } from 'db://assets/mx/module/ecs'; export type { ComponentStorage } from 'db://assets/mx/module/ecs'; export { EcsComponent } from 'db://assets/mx/module/ecs'; export type { ComponentCtor } from 'db://assets/mx/module/ecs'; export { View1, View2 } from 'db://assets/mx/module/ecs'; export { SystemRegistry } from 'db://assets/mx/module/ecs'; // ISystem 仅为 interface,须 type-only re-export;值导出会让 Rollup 打包报 not exported export type { ISystem, ISystemCtor } from 'db://assets/mx/module/ecs'; // ECS 战斗业务组件 export { AttrId, TransformComp, TeamComp, HealthComp, CombatComp, AbilitySetComp, GridOccupancyComp, TagComp, BuffContainerComp, UnitMetaComp, MovementComp, ProjectileComp, AttributeComp, AtkHookComp, ComboAttackComp, } from './ecs/Components'; export { isYanSoulClaimed, canDealDamageToYanClaimed, isBajiaoBlowRetreating, } from './ecs/Components'; export type { BuffInstance, AttributeModifier } from './ecs/Components'; export { HIT_TEMP_GROUP, COUNT_BUFF_GROUP } from './combat/DamagePipeline'; // 战斗服务聚合接口(effect/condition 脚本扩展点用) export type { BattleServices } from './combat/BattleServices'; // Battlefield export type { Cell } from './battlefield/Cell'; export { cellKey, cellsEqual } from './battlefield/Cell'; export { GridMap } from './battlefield/GridMap'; export { MapRegion, createSoloRegion } from './battlefield/MapRegion'; export { SpatialGrid } from './battlefield/SpatialGrid'; export { MapTopology } from './battlefield/MapTopology'; export type { MapTopologySnapshot } from './battlefield/MapTopology'; export { campAreaPolicyFromPreset, resolveCampAreaPolicy, isCampAreaScoped, } from './battlefield/CampAreaPolicy'; export type { CampAreaPolicy, CampAreaPreset, CampAreaScope } from './battlefield/CampAreaPolicy'; export { Pathfinder } from './battlefield/Pathfinder'; export { buildPatrolLoopFromWalkable } from './battlefield/PatrolLoopBuilder'; /** Pathfinder 即战场格子导航系统(寻路 / 可达性 / 路径长度估算) */ // Player / Mode export { PlayerSlot } from './player/PlayerSlot'; export type { IBattleMode } from './player/BattleMode'; export { SoloBattleMode, PvPBattleMode } from './player/BattleMode'; // Config export type { AbilityDef, UnitDef, BuffDef, WaveDef, WavePortPlan, WaveSpawnSegment, LevelDef, EffectSpec, TargetSpec, TimelineEvent, TriggerSpec, ConditionSpec, CostSpec, MapRegionConfig, UnitDefId, AbilityId, BuffId, LevelId, WaveId, } from './config/BattleConfigTypes'; export type { IConfigProvider } from './config/IConfigProvider'; export { InMemoryConfigProvider } from './config/InMemoryConfigProvider'; // Deploy export { DeploySystem } from './deploy/DeploySystem'; export type { DeployResult } from './deploy/DeployTypes'; export { createDefaultDeployRules } from './deploy/DeployValidator'; // Combat systems export { AttributeSystem } from './combat/AttributeSystem'; export { BuffSystem } from './combat/BuffSystem'; export { AbilitySystem } from './combat/AbilitySystem'; export { EffectExecutor } from './combat/EffectExecutor'; export { TargetResolver } from './combat/TargetResolver'; export { DamagePipeline } from './combat/DamagePipeline'; export { ProjectileSystem } from './combat/ProjectileSystem'; export type { ProjectileOptions } from './combat/ProjectileSystem'; export { LifecycleSystem } from './combat/LifecycleSystem'; export { MovementSystem } from './combat/MovementSystem'; export { ReachGoalBaseDamageSystem } from './combat/ReachGoalBaseDamageSystem'; export type { AbilityContext } from './combat/AbilityContext'; export { PresentationPipeline } from './combat/PresentationPipeline'; export type { DeferredTimelineSlice } from './combat/PresentationPipeline'; export { VAR_LAST_CRIT } from './combat/DamagePipeline'; // Unit export { UnitFactory } from './unit/UnitFactory'; export { WaveSpawner } from './unit/WaveSpawner'; // Registry / Extension export { EffectRegistry, ConditionRegistry } from './registry/EffectRegistry'; export type { EffectHandler, ConditionHandler } from './registry/EffectRegistry'; export { registerBuiltinBattleEffects } from './registry/registerBuiltin'; // Events export { BattleEventBus } from './events/BattleEventBus'; export { BattleEventType, BATTLE_EVENT_ALL } from './events/BattleEventType'; export type { BattleEventSubscription } from './events/BattleEventType'; export { BattleEventFactory } from './events/BattleEvents'; export type { BattleEvent, BattleEventListener } from './events/BattleEvents'; // ECS tags / teams export { EntityTag } from './ecs/EntityTag'; export { BattleTeamId } from './ecs/BattleTeamId';