yyl
2026-01-29 83ff2cfc367d3227449fa8414a25541374929ecb
Main/System/Battle/BattleObject/MinggeBattleObject.cs
@@ -8,18 +8,19 @@
/// </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);
@@ -42,11 +43,38 @@
    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;
    // ============ 动画相关方法实现(命格没有动画) ============
    
@@ -62,8 +90,39 @@
    
    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;
    }