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
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;
 
        if (skillBase.caster.motionBase.CanCastSkill(skillBase.skillConfig))
        {
            // Debug.LogError("cast skill id is " + skillBase.skillConfig.SkillID);
 
            skillBase.fromSkill = fromSkill;
 
            skillBase.Cast();
 
            isCast = true;
        }
    }
}