You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

202 lines
7.1 KiB

3 weeks ago
/**
* 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';