165 lines
3.7 KiB
Go
165 lines
3.7 KiB
Go
package effect
|
|
|
|
import (
|
|
"blazing/logic/service/fight/input"
|
|
"blazing/logic/service/fight/node"
|
|
|
|
"github.com/gogf/gf/v2/util/grand"
|
|
)
|
|
|
|
type RoundEffectArg0Base struct {
|
|
node.EffectNode
|
|
}
|
|
|
|
func (e *RoundEffectArg0Base) SetArgs(t *input.Input, a ...int) {
|
|
setArgsWithDuration0(&e.EffectNode, t, a...)
|
|
}
|
|
|
|
type RandomDurationArg01Base struct {
|
|
node.EffectNode
|
|
}
|
|
|
|
func (e *RandomDurationArg01Base) SetArgs(t *input.Input, a ...int) {
|
|
e.EffectNode.SetArgs(t, a...)
|
|
if len(a) > 1 {
|
|
e.Duration(grand.N(a[0], a[1]))
|
|
}
|
|
}
|
|
|
|
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 FixedDurationNeg1Arg0CountBase struct {
|
|
node.EffectNode
|
|
remaining int
|
|
}
|
|
|
|
func (e *FixedDurationNeg1Arg0CountBase) SetArgs(t *input.Input, a ...int) {
|
|
setArgsWithFixedDuration(&e.EffectNode, t, -1, a...)
|
|
if len(a) > 0 {
|
|
e.remaining = a[0]
|
|
}
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|