refactor(logic): 重构 NodeManagerE 结构和功能
- 将 AddEffect 和 RemoveEffect 方法移至 NodeManager 结构 - 新增 Exec 方法用于遍历和执行 Effect - 优化 Effect 的添加和删除逻辑 - 调整结构名称和方法调用以适应新逻辑
This commit is contained in:
@@ -75,18 +75,9 @@ type NodeManagerE struct {
|
||||
Mark *NodeManager //堆叠类效果
|
||||
}
|
||||
|
||||
// 添加效果
|
||||
func (c *NodeManagerE) AddEffect(e Effect) {
|
||||
var fff *NodeManager
|
||||
switch t := (e.Duration(0) > 1); t { //判断是否是回合类效果
|
||||
case t: //t>0就是回合类效果了 -1和0都是非回合效果和无限效果,无法被断回合
|
||||
fff = c.Turn
|
||||
default:
|
||||
fff = c.Mark
|
||||
}
|
||||
|
||||
func (c *NodeManager) AddEffect(e Effect) {
|
||||
// 如果已有同 ID 的效果,尝试叠加
|
||||
for _, eff := range fff.Effects {
|
||||
for _, eff := range c.Effects {
|
||||
if eff.ID() == e.ID() {
|
||||
if eff.Stack(0) < eff.MaxStack() { //如果小于最大叠层
|
||||
eff.Stack(eff.Stack(0)) //获取到当前叠层数然后叠加
|
||||
@@ -100,12 +91,37 @@ func (c *NodeManagerE) AddEffect(e Effect) {
|
||||
}
|
||||
}
|
||||
// 否则新加入
|
||||
fff.Effects = append(fff.Effects, e)
|
||||
c.Effects = append(c.Effects, e)
|
||||
}
|
||||
|
||||
// 删除
|
||||
func (c *NodeManagerE) RemoveEffect(e Effect) {
|
||||
func (c *NodeManager) RemoveEffect(e Effect) {
|
||||
var remain []Effect
|
||||
for _, eff := range c.Effects {
|
||||
if eff.ID() != e.ID() {
|
||||
remain = append(remain, eff)
|
||||
}
|
||||
}
|
||||
c.Effects = remain
|
||||
}
|
||||
|
||||
// ForEachEffectBool 遍历所有 Effect,执行“无参数、返回 bool”的方法
|
||||
// 参数 fn:接收单个 Effect,返回 bool(如 func(e Effect) bool { return e.OnBattleStart() })
|
||||
// 返回值:所有 Effect 的方法返回值列表
|
||||
func (c *NodeManager) Exec(fn func(Effect) bool) bool {
|
||||
|
||||
var results bool
|
||||
for _, effect := range c.Effects {
|
||||
result := fn(effect)
|
||||
if !result {
|
||||
results = result //如果是false,说明存在阻止向下执行的effect,比如免疫能力提升效果
|
||||
}
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// 添加效果
|
||||
func (c *NodeManagerE) AddEffect(e Effect) {
|
||||
var fff *NodeManager
|
||||
switch t := (e.Duration(0) > 1); t { //判断是否是回合类效果
|
||||
case t: //t>0就是回合类效果了 -1和0都是非回合效果和无限效果,无法被断回合
|
||||
@@ -113,12 +129,21 @@ func (c *NodeManagerE) RemoveEffect(e Effect) {
|
||||
default:
|
||||
fff = c.Mark
|
||||
}
|
||||
for _, eff := range fff.Effects {
|
||||
if eff.ID() != e.ID() {
|
||||
remain = append(remain, eff)
|
||||
}
|
||||
|
||||
fff.AddEffect(e)
|
||||
}
|
||||
|
||||
// 删除
|
||||
func (c *NodeManagerE) RemoveEffect(e Effect) {
|
||||
|
||||
var fff *NodeManager
|
||||
switch t := (e.Duration(0) > 1); t { //判断是否是回合类效果
|
||||
case t: //t>0就是回合类效果了 -1和0都是非回合效果和无限效果,无法被断回合
|
||||
fff = c.Turn
|
||||
default:
|
||||
fff = c.Mark
|
||||
}
|
||||
fff.Effects = remain
|
||||
fff.RemoveEffect(e)
|
||||
}
|
||||
|
||||
// ForEachEffectBool 遍历所有 Effect,执行“无参数、返回 bool”的方法
|
||||
@@ -126,17 +151,24 @@ func (c *NodeManagerE) RemoveEffect(e Effect) {
|
||||
// 返回值:所有 Effect 的方法返回值列表
|
||||
func (c *NodeManagerE) Exec(fn func(Effect) bool) bool {
|
||||
|
||||
var results bool
|
||||
// var results bool
|
||||
|
||||
execfun := func(nm *NodeManager) {
|
||||
for _, effect := range nm.Effects {
|
||||
result := fn(effect)
|
||||
if !result {
|
||||
results = result //如果是false,说明存在阻止向下执行的effect,比如免疫能力提升效果
|
||||
}
|
||||
}
|
||||
// execfun := func(nm *NodeManager) {
|
||||
// for _, effect := range nm.Effects {
|
||||
// result := fn(effect)
|
||||
// if !result {
|
||||
// results = result //如果是false,说明存在阻止向下执行的effect,比如免疫能力提升效果
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
results := true
|
||||
result := c.Mark.Exec(fn) //执行叠层
|
||||
if !result {
|
||||
results = result
|
||||
}
|
||||
result = c.Turn.Exec(fn) //执行回合类效果
|
||||
if !result {
|
||||
results = result
|
||||
}
|
||||
execfun(c.Mark)
|
||||
execfun(c.Turn)
|
||||
return results
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user