| | |
| | | /// </summary> |
| | | public class MinggeBattleObject : BattleObject |
| | | { |
| | | public TeamMingge teamMingge { get; private set; } |
| | | |
| | | public MinggeBattleObject(BattleField _battleField) : base(_battleField) |
| | | { |
| | | } |
| | | |
| | | public override void Init(TeamHero _teamHero, BattleCamp _camp) |
| | | public virtual void Init(TeamBase teamBase, TeamMingge _teamMingge, BattleCamp _camp) |
| | | { |
| | | teamHero = _teamHero; |
| | | teamMingge = _teamMingge; |
| | | Camp = _camp; |
| | | ObjID = teamMingge.ObjID; |
| | | |
| | | // 命格只需要 buff 管理器用于技能效果 |
| | | buffMgr = new BattleObjectBuffMgr(); |
| | | buffMgr.Init(this); |
| | | // 命格不需要 buff 管理器(命格释放技能但自身不会有 buff) |
| | | |
| | | layerMgr = new BattleObjectLayerMgr(); |
| | | layerMgr.Init(this); |
| | |
| | | |
| | | public override void Destroy() |
| | | { |
| | | if (buffMgr != null) |
| | | { |
| | | buffMgr.Release(); |
| | | } |
| | | // 命格没有需要清理的资源 |
| | | } |
| | | |
| | | // ============ 实现抽象访问方法 ============ |
| | | |
| | | public override BattleObjectBuffMgr GetBuffMgr() => null; // 命格不有 buff 系统 |
| | | |
| | | public override int GetPositionNum() => teamMingge.positionNum; |
| | | public override float GetModelScale() => teamMingge.modelScale; |
| | | public override string GetName() => teamMingge.name; |
| | | |
| | | protected override bool GetIsStunned() => teamMingge.isStunned; |
| | | protected override bool GetIsFrozen() => teamMingge.isFrozen; |
| | | protected override bool GetIsStoned() => teamMingge.isStoned; |
| | | protected override bool GetIsSlient() => teamMingge.isSlient; |
| | | protected override bool GetIsDisarmed() => teamMingge.isDisarmed; |
| | | protected override bool GetIsInvincible() => teamMingge.isInvinceble; |
| | | protected override bool GetIsDead() => teamMingge.isDead; |
| | | public override int GetRage() => teamMingge.rage; |
| | | |
| | | protected override void ApplyCasterHpChange(long newHp) |
| | | { |
| | | // 命格没有血量,忽略 |
| | | } |
| | | |
| | | public override long GetCurHp() => 0; |
| | | public override long GetMaxHp() => 0; |
| | | public override void SetCurHp(long value) { } |
| | | public override void SetIsDead(bool value) { } |
| | | |
| | | public override int GetNPCID() => 0; |
| | | public override long GetFightPower() => 0; |
| | | |
| | | // ============ 动画相关方法实现(命格没有动画) ============ |
| | | |
| | |
| | | |
| | | public override Spine.TrackEntry PlaySkillAnimation(SkillConfig skillConfig, SkillBase skillBase, bool isCounter, Action onComplete) |
| | | { |
| | | // 命格没有技能动画,直接完成 |
| | | // 命格没有技能动画,立即触发所有帧事件 |
| | | int loopCount = skillConfig.LoopCount + 1; //默认会有一次 |
| | | int frameCount = skillConfig.ActiveFrames.Length; |
| | | |
| | | // 1. 技能开始 |
| | | skillBase.OnSkillStart(); |
| | | |
| | | // 2. 前摇结束 |
| | | skillBase.OnStartSkillFrameEnd(); |
| | | |
| | | // 3. 循环执行中摇 |
| | | int triggerCount = 0; |
| | | for (int currentLoop = 0; currentLoop < loopCount; currentLoop++) |
| | | { |
| | | // 每个 loop 开始时调用 OnMiddleFrameStart |
| | | skillBase.OnMiddleFrameStart(currentLoop); |
| | | |
| | | // 触发该 loop 的所有 ActiveFrame |
| | | for (int i = 0; i < frameCount; i++) |
| | | { |
| | | skillBase.OnMiddleFrameEnd(currentLoop, triggerCount++); |
| | | } |
| | | } |
| | | |
| | | // 4. 后摇开始 |
| | | skillBase.OnFinalFrameStart(); |
| | | |
| | | // 5. 完成回调 |
| | | onComplete?.Invoke(); |
| | | |
| | | // 6. 后摇结束 |
| | | skillBase.OnFinalFrameEnd(); |
| | | |
| | | return null; |
| | | } |
| | | |