yyl
2026-01-15 bface07b5ea879e40f5be8d082bfa77fb873b0bd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
using UnityEngine;
using System.Collections.Generic;
 
public class SkillRecordAction : RecordAction
{
    protected SkillBase skillBase;
 
    public HB427_tagSCUseSkill hB427_TagSCUseSkill;
 
    private bool isCast = false;
 
    public SkillBase fromSkill = null;
 
    public SkillRecordAction(BattleField _battleField, BattleObject _caster, HB427_tagSCUseSkill vNetData, List<GameNetPackBasic> packList)
        : base(RecordActionType.Skill, _battleField, _caster)
    {
        // Debug.LogError("_caster == null : " + (_caster == null));
 
        skillBase = SkillFactory.CreateSkill(_caster, vNetData, packList, _battleField);
        hB427_TagSCUseSkill = vNetData;
        if (null == skillBase)
        {
            BattleUtility.ForceFinishBattlePackList(battleField, packList);
        }
        else
        {
            //  让SkillBase知道自己的RecordAction
            skillBase.SetParentRecordAction(this);
        }
    }
    public override bool IsNeedWaiting()
    {
        if (skillBase == null)
        {
            return false;
        }
        return !string.IsNullOrEmpty(skillBase.skillConfig.SkillMotionName);
    }
 
 
    public override bool IsFinished()
    {
        if (null == skillBase)
        {
            return true;
        }
        return skillBase.IsFinished();
    }
 
    //  检查自身动作是否完成(不包括子节点)
    public override bool IsActionCompleted()
    {
        if (null == skillBase)
        {
            return true;
        }
        return skillBase.IsFinishedForJudge();
    }
 
    public bool IsFinishedForJudge()
    {
        if (null == skillBase)
        {
            return true;
        }
        return skillBase.IsFinishedForJudge();
    }
 
    public override void ForceFinish()
    {
        //  设置结束flag 记得清空motionBase里的事件
        if (null != skillBase)
        {
            skillBase.ForceFinished();
        }
        base.ForceFinish();
    }
    
    public override bool CanStartExecution()
    {
        if (null == skillBase)
        {
            return false;
        }
 
        if (!skillBase.CanStartExecution())
        {
            return false;
        }
 
 
        return base.CanStartExecution();
    }
 
 
    public override void Run()
    {
        base.Run();
 
        if (null == skillBase)
        {
            return;
        }
 
        if (isCast && !skillBase.IsFinished())
        {
            skillBase.Run();
        }
 
        if (isCast)
            return;
 
        Played();
 
        if (fromSkill != null)
        {
            BattleDebug.LogError("cast skill from skill : " + fromSkill.skillConfig.SkillID);
        }
 
        // Debug.LogError("cast skill id is " + skillBase.skillConfig.SkillID);
 
        skillBase.fromSkill = fromSkill;
 
        skillBase.Cast();
 
        isCast = true;
    }
}