Files
bl/logic/service/fight/battle/skill/effect/manger.go
昔念 ada45feb01 refactor(fight): 重构效果系统
- 重新定义了基础事件类型和效果触发时机
- 优化了效果的结构和执行逻辑
- 添加了效果生命周期的管理
- 调整了效果注册和触发的方式
2025-08-25 05:28:08 +08:00

77 lines
1.5 KiB
Go

package effect
import (
"blazing/logic/service/fight/battle/node"
"github.com/tnnmigga/enum"
)
type EffectManager struct {
containers map[string]*EffectContainer
}
func NewEffectManager() *EffectManager {
return &EffectManager{
containers: make(map[string]*EffectContainer),
}
}
// 添加效果
func (m *EffectManager) AddEffect(owner string, e *Effect) {
if _, ok := m.containers[owner]; !ok {
m.containers[owner] = &EffectContainer{}
}
m.containers[owner].AddEffect(e)
}
// 触发事件,按顺序链式执行效果
func (m *EffectManager) Trigger(owner string, trigger node.EnumEffectTrigger, ctx *EffectContext) {
container, ok := m.containers[owner]
if !ok {
return
}
var idx int
var next func()
next = func() {
if idx >= len(container.Effects) {
return
}
e := container.Effects[idx]
idx++
// 判断触发器匹配
if e.Trigger == trigger {
e.Handler(ctx, next)
if e.LifeType == e.LifeType {
e.Duration--
}
} else {
// 不匹配直接跳过
next()
}
}
next()
container.Cleanup()
}
type EnumBaseEvent string
var BaseEvent = enum.New[struct {
Attack EnumBaseEvent `enum:"attack"`
Damage EnumBaseEvent `enum:"damage"`
Heal EnumBaseEvent `enum:"heal"`
Buff EnumBaseEvent `enum:"buff"`
Turn EnumBaseEvent `enum:"turn"`
Death EnumBaseEvent `enum:"death"`
Skill EnumBaseEvent `enum:"skill"`
}]()
// ================= HookPhase =================
type EnumHookPhase string
var HookPhase = enum.New[struct {
Before EnumHookPhase `enum:"before"`
After EnumHookPhase `enum:"after"`
}]()