|
|
|
|
import type { Component, Node, sp } from 'cc';
|
|
|
|
|
import type { EntityId } from 'db://assets/mx/module/battle';
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 怪物 Cocos 视图组件契约(实现方:`ui/BattleGame/Monster.ts`)
|
|
|
|
|
*
|
|
|
|
|
* 逻辑层(MX WaveSpawner)只发 UnitSpawned;
|
|
|
|
|
* CocosBattleMonsterPresenter 负责实例化 prefab 并调用此接口。
|
|
|
|
|
* battle 层不静态 import ui 模块,避免循环依赖。
|
|
|
|
|
*/
|
|
|
|
|
export interface IBattleMonsterView extends Component {
|
|
|
|
|
anim?: sp.Skeleton;
|
|
|
|
|
/** MX 实体 id(由 Presenter 赋值) */
|
|
|
|
|
entityId?: EntityId | null;
|
|
|
|
|
/** 配表怪物数据(setData 写入) */
|
|
|
|
|
Data?: ITableMonster | null;
|
|
|
|
|
/** 相对 Monster.size 的表现倍率 */
|
|
|
|
|
sizeMul?: number;
|
|
|
|
|
/** 由 MX MovementSystem 驱动位移时为 true */
|
|
|
|
|
useMxMovement?: boolean;
|
|
|
|
|
/** 机制怪落地后不可移动(由 Presenter 赋值) */
|
|
|
|
|
mechanismImmobile?: boolean;
|
|
|
|
|
/** 播放 Spine 动画(机制怪下落等) */
|
|
|
|
|
playSpineAnim?(name: string, loop?: boolean, onComplete?: () => void, timeScale?: number): void;
|
|
|
|
|
/** 空降兵落地动画 */
|
|
|
|
|
playParatroopLand?(): void;
|
|
|
|
|
setData(data: ITableMonster, hp: number): void;
|
|
|
|
|
playWalk(speed?: number): void;
|
|
|
|
|
/**
|
|
|
|
|
* 播契约死亡轨(五行=`{系}小怪2`);无契约返回 false。
|
|
|
|
|
* @param onComplete 播完
|
|
|
|
|
*/
|
|
|
|
|
playDeath?(onComplete?: () => void): boolean;
|
|
|
|
|
/** 绑定 MapManager 后计算寻路目标(须在 MapGridsReady 之后) */
|
|
|
|
|
bindPathTarget(): void;
|
|
|
|
|
/** 同步 MX 层 HP(受击/治疗后由表现层调用,刷新血条) */
|
|
|
|
|
syncMxHp?(hp: number, maxHp: number): void;
|
|
|
|
|
/**
|
|
|
|
|
* 播放加血特效(`怪物加血`)。
|
|
|
|
|
* @param statusText 可选状态飘字;默认「加血」
|
|
|
|
|
*/
|
|
|
|
|
playHealEffect?(statusText?: string): void;
|
|
|
|
|
/** 血上限提升:播 `血量上限` 并飘「血上限」,不播 `怪物加血` */
|
|
|
|
|
playHpCapEffect?(): void;
|
|
|
|
|
/** 阎王技能命中:播 `怪_流血`(已有流血则保持) */
|
|
|
|
|
playBleedHitFx?(): void;
|
|
|
|
|
/**
|
|
|
|
|
* 还魂丹原地复活:在死亡点播 `小怪复活效果`(不跟随怪物)。
|
|
|
|
|
* @param fxParent 特效父节点(怪物层,勿挂怪身上以免跟随缩放)
|
|
|
|
|
* @returns 特效动画时长(秒);失败为 0
|
|
|
|
|
*/
|
|
|
|
|
playReviveEffect?(fxParent?: Node): number;
|
|
|
|
|
/** 显示加速特效(`怪_加速`) */
|
|
|
|
|
showAccelerateFx?(): void;
|
|
|
|
|
/** 回收加速特效 */
|
|
|
|
|
clearAccelerateFx?(): void;
|
|
|
|
|
/** 创建/刷新血条(皮肤就绪后再次调用) */
|
|
|
|
|
ensureBloodBar?(): void;
|
|
|
|
|
/** 按 Spine 重算血条挂点 */
|
|
|
|
|
syncBloodPosToSkin?(): void;
|
|
|
|
|
/** 行军小怪:换皮后进入 PRIVATE_CACHE */
|
|
|
|
|
applyMarchSpineCache?(): void;
|
|
|
|
|
/** 用 Sorting2D 按脚底 Y 叠层,返回写入的 order */
|
|
|
|
|
syncYSortOrder?(): number;
|
|
|
|
|
/** 播放受击反馈(闪白 + 按来击方向后仰);hitDir 为击退方向(目标−来源) */
|
|
|
|
|
playHit?(damageType?: string, hitDirX?: number, hitDirY?: number): void;
|
|
|
|
|
/** 对象中心播放受击 Spine 特效;faceSource 为攻击来源方向(刀痕等需朝向来源) */
|
|
|
|
|
showHitEffect?(hitEffectCfg?: string, faceSourceX?: number, faceSourceY?: number): void;
|
|
|
|
|
upEff?: Node | null;
|
|
|
|
|
bloodPos?: Node | null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const BATTLE_MONSTER_CCCLASS = 'Monster';
|