forked from dongweiPeng/SkillSystem
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSkill.cs
More file actions
134 lines (119 loc) · 3.09 KB
/
Copy pathSkill.cs
File metadata and controls
134 lines (119 loc) · 3.09 KB
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
133
134
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using SkillTask = Task.Task;
namespace Skill
{
public class Skill : ISkill
{
private Attribute m_Attribute;
private SkillComplate m_Complate;
private Entity m_Target;
private Entity m_Caster;
public Attribute Attribute
{
get
{
return m_Attribute;
}
set
{
m_Attribute = value;
}
}
public Entity Target
{
get
{
return m_Target;
}
set
{
m_Target = value;
}
}
public Entity Caster
{
get
{
return m_Caster;
}
set
{
m_Caster = value;
}
}
/// <summary>
/// 技能结束
/// </summary>
public void End()
{
if (this.m_Complate != null)
{
this.m_Complate(this);
}
}
public bool IsValid(IVerify verify)
{
if (verify != null)
{
bool valid = verify.Verify(this.Caster, this.Target, this.Attribute);
if (!valid)
{
Interrupt(new InterruptValid());
}
return false;
}
return true;
}
public bool IsValid(List<IVerify> verifyList)
{
if (verifyList != null && verifyList.Count > 0)
{
if (verifyList.Count == 1) return IsValid(verifyList[0]);
//多余一个的验证条件需要先排序
verifyList.Sort(delegate (IVerify x, IVerify y)
{
return x.Priority().CompareTo(y.Priority());
});
foreach (var verify in verifyList)
{
if (!IsValid(verify))
{
return false;
}
}
}
return true;
}
public IEnumerator Sing(Task.Task task)
{
yield return task;
}
public void Interrupt(IInterrupt interrupt)
{
if (interrupt != null)
{
interrupt.Handle(this.Caster);
}
End();
}
public int Caculate(IDamage damage)
{
//驱散处理
this.m_Caster.Disperse(this.m_Attribute.Mute);
//处理计算后的返回值
return damage.Handle(this);
}
public void Init<T, U>(T caster, U target, Attribute attribute = null, SkillComplate complate = null)
where T : Entity
where U : Entity
{
this.Target = target;
this.Caster = caster;
this.Attribute = Attribute ?? attribute;
this.m_Complate = complate;
}
}
}