Files
bl/logic/service/fight/effect/sub_effect_helper.go
xinian 875ad668aa
Some checks failed
ci/woodpecker/push/my-first-workflow Pipeline failed
feat: 实现战斗效果逻辑和接口重构
2026-03-28 21:57:22 +08:00

140 lines
3.3 KiB
Go

package effect
import (
"blazing/logic/service/fight/input"
"blazing/logic/service/fight/node"
)
type RoundEffectArg0Base struct {
node.EffectNode
}
func (e *RoundEffectArg0Base) SetArgs(t *input.Input, a ...int) {
setArgsWithDuration0(&e.EffectNode, t, a...)
}
type RoundEffectSideArg0Base struct {
node.EffectNode
}
func (e *RoundEffectSideArg0Base) SetArgs(t *input.Input, a ...int) {
setArgsWithSideEffectDuration0(&e.EffectNode, t, a...)
}
type FixedDuration1Base struct {
node.EffectNode
}
func (e *FixedDuration1Base) SetArgs(t *input.Input, a ...int) {
setArgsWithFixedDuration(&e.EffectNode, t, 1, a...)
}
type FixedDurationNeg1Base struct {
node.EffectNode
}
func (e *FixedDurationNeg1Base) SetArgs(t *input.Input, a ...int) {
setArgsWithFixedDuration(&e.EffectNode, t, -1, a...)
}
type FixedDuration2Base struct {
node.EffectNode
}
func (e *FixedDuration2Base) SetArgs(t *input.Input, a ...int) {
setArgsWithFixedDuration(&e.EffectNode, t, 2, a...)
}
type RoundEffectArg1Base struct {
node.EffectNode
}
func (e *RoundEffectArg1Base) SetArgs(t *input.Input, a ...int) {
setArgsWithDuration1(&e.EffectNode, t, a...)
}
type RoundEffectSideArg1Base struct {
node.EffectNode
}
func (e *RoundEffectSideArg1Base) SetArgs(t *input.Input, a ...int) {
setArgsWithSideEffectDuration1(&e.EffectNode, t, a...)
}
type RoundEffectSideArg0Minus1Base struct {
node.EffectNode
}
func (e *RoundEffectSideArg0Minus1Base) SetArgs(t *input.Input, a ...int) {
setArgsWithSideEffectDuration0Minus1(&e.EffectNode, t, a...)
}
type RoundEffectSideArg0Minus1CanStackBase struct {
node.EffectNode
}
func (e *RoundEffectSideArg0Minus1CanStackBase) SetArgs(t *input.Input, a ...int) {
e.SetArgsWithCanStack(t, true, a...)
setArgsWithSideEffectDuration0Minus1(&e.EffectNode, t, a...)
}
func (e *RoundEffectSideArg0Minus1CanStackBase) SetArgsWithCanStack(t *input.Input, canStack bool, a ...int) {
e.EffectNode.SetArgs(t, a...)
e.CanStack(canStack)
}
func addSubEffect(
owner *input.Input,
target *input.Input,
parent *node.EffectNode,
sub input.Effect,
duration int,
) input.Effect {
parentID := parent.ID()
parentID.SetEffectType(input.EffectType.Sub)
sub.ID(parentID)
sub.SetArgs(owner, parent.SideEffectArgs...)
_ = duration // 与旧版 GenSub 行为一致:仅透传参数,不在这里设置 Duration
return target.AddEffect(owner, sub)
}
func setArgsWithDuration0(e *node.EffectNode, t *input.Input, a ...int) {
e.SetArgs(t, a...)
if len(a) > 0 {
e.Duration(a[0])
}
}
func setArgsWithFixedDuration(e *node.EffectNode, t *input.Input, duration int, a ...int) {
e.SetArgs(t, a...)
e.Duration(duration)
}
func setArgsWithDuration1(e *node.EffectNode, t *input.Input, a ...int) {
e.SetArgs(t, a...)
if len(a) > 1 {
e.Duration(a[1])
}
}
func setArgsWithSideEffectDuration0(e *node.EffectNode, t *input.Input, a ...int) {
e.SetArgs(t, a...)
if len(e.SideEffectArgs) > 0 {
e.Duration(e.SideEffectArgs[0])
}
}
func setArgsWithSideEffectDuration1(e *node.EffectNode, t *input.Input, a ...int) {
e.SetArgs(t, a...)
if len(e.SideEffectArgs) > 1 {
e.Duration(e.SideEffectArgs[1])
}
}
func setArgsWithSideEffectDuration0Minus1(e *node.EffectNode, t *input.Input, a ...int) {
e.SetArgs(t, a...)
if len(e.SideEffectArgs) > 0 {
e.Duration(e.SideEffectArgs[0] - 1)
}
}