chenxin
2020-11-04 80b4237334a773b29bf69f38532a90ca659b3bfe
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
129
130
131
132
using Core.Utilities;
 
/**
 * 无尽模式boss技能基类
 * @Author: chenxin
 * @Date: 2020-11-02 16:47:31
 */
namespace KTGMGemClient
{
    public abstract class EndlessBossSkill
    {
        public EndlessBossSkill(boss_skill param)
        {
            SkillData = param;
            SkillType = (EndlessBossSkillType)param.skill_class;
            SkillAI = GetSkillAI(param);
        }
 
        /// <summary>
        /// 技能类型
        /// </summary>
        public EndlessBossSkillType SkillType { get; set; }
 
        /// <summary>
        /// 技能配置表数据
        /// </summary>
        public boss_skill SkillData { get; protected set; }
 
        /// <summary>
        /// 技能AI
        /// </summary>
        public EndlessBossSkillAI SkillAI { get; protected set; }
 
        /// <summary>
        /// 冷却是否完成
        /// </summary>
        public bool IsCDCompleted { get; set; }
 
        /// <summary>
        /// 是否满足AI条件
        /// </summary>
        /// <value></value>
        public bool IsConditionOK { get; set; }
 
        /// <summary>
        /// 技能cd的计时器
        /// </summary>
        protected Timer cdTimer;
 
        /// <summary>
        /// 帧刷新
        /// </summary>
        public virtual void Update(float deltaTime)
        {
            SkillAI.Update(deltaTime);
 
            if (SkillAI.IsActived)
            {
                if (!IsCDCompleted && cdTimer.Tick(deltaTime))
                    IsCDCompleted = true;
                IsConditionOK = SkillAI.CanRelease();
            }
        }
 
        /// <summary>
        /// 后面根据类型来获得
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        private EndlessBossSkillAI GetSkillAI(boss_skill param)
        {
            return new NormalBossSkillAI(param);
        }
 
        /// <summary>
        /// 释放技能
        /// </summary>
        public virtual void ReleaseSkill()
        {
            IsCDCompleted = false;
            ResetCD();
        }
 
        /// <summary>
        /// 技能初始化
        /// </summary>
        public virtual void Init()
        {
            AddEvent();
            SkillAI.Init();
            // 技能第一次的cd直接就是好的
            cdTimer = new Timer(0);
        }
 
        /// <summary>
        /// 重置cd时间
        /// </summary>
        protected void ResetCD()
        {
            cdTimer.SetTime(SkillData.cool_down / 1000f);
            cdTimer.Reset();
        }
        
        public virtual void Reset()
        {
            cdTimer.SetTime(0);
            cdTimer.Reset();
            SkillAI.Reset();
        }
 
        /// <summary>
        /// 清理方法
        /// </summary>
        public virtual void Clear()
        {
            RemoveEvent();
            IsCDCompleted = false;
            cdTimer = null;
            SkillAI.Clear();
        }
 
        protected virtual void AddEvent()
        {
            
        }
 
        protected virtual void RemoveEvent()
        {
            
        }
    }
}