From a148946eb0b7d525e2b5d4ba9b3b666e8ff3fe98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=94=E5=BF=B5?= <1@72wo.cn> Date: Wed, 3 Sep 2025 01:45:22 +0800 Subject: [PATCH] =?UTF-8?q?refactor(logic):=20=E9=87=8D=E6=9E=84=20NodeMan?= =?UTF-8?q?agerE=20=E7=BB=93=E6=9E=84=E5=92=8C=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 AddEffect 和 RemoveEffect 方法移至 NodeManager 结构 - 新增 Exec 方法用于遍历和执行 Effect - 优化 Effect 的添加和删除逻辑 - 调整结构名称和方法调用以适应新逻辑 --- logic/service/fight/info/nodemanger.go | 88 ++++++++++++++++++-------- 1 file changed, 60 insertions(+), 28 deletions(-) diff --git a/logic/service/fight/info/nodemanger.go b/logic/service/fight/info/nodemanger.go index a4868a0c..82fc3c39 100644 --- a/logic/service/fight/info/nodemanger.go +++ b/logic/service/fight/info/nodemanger.go @@ -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 }