refactor(logic): 重构 NodeManagerE 结构和功能

- 将 AddEffect 和 RemoveEffect 方法移至 NodeManager 结构
- 新增 Exec 方法用于遍历和执行 Effect
- 优化 Effect 的添加和删除逻辑
- 调整结构名称和方法调用以适应新逻辑
This commit is contained in:
2025-09-03 01:45:22 +08:00
parent 3660e7520e
commit a148946eb0

View File

@@ -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
}