47 lines
832 B
Go
47 lines
832 B
Go
package effect
|
|
|
|
import "blazing/logic/service/fight/battle/node"
|
|
|
|
type EffectManager struct {
|
|
effects []Effect
|
|
}
|
|
|
|
func NewEffectManager() *EffectManager {
|
|
return &EffectManager{}
|
|
}
|
|
|
|
func (m *EffectManager) Register(e Effect) {
|
|
m.effects = append(m.effects, e)
|
|
}
|
|
|
|
// 执行某时点效果
|
|
func (m *EffectManager) Apply(trigger node.EnumEffectTrigger, ctx *EffectContext) {
|
|
var next func(i int)
|
|
next = func(i int) {
|
|
if i < len(m.effects) {
|
|
if m.effects[i].Trigger() == trigger {
|
|
m.effects[i].Apply(ctx, func() { next(i + 1) })
|
|
} else {
|
|
next(i + 1)
|
|
}
|
|
}
|
|
}
|
|
next(0)
|
|
|
|
// 清理过期效果
|
|
var alive []Effect
|
|
for _, e := range m.effects {
|
|
if e.Alive() {
|
|
alive = append(alive, e)
|
|
}
|
|
}
|
|
m.effects = alive
|
|
}
|
|
|
|
// 回合 tick
|
|
func (m *EffectManager) Tick() {
|
|
for _, e := range m.effects {
|
|
e.Tick()
|
|
}
|
|
}
|