feat: 实现乱舞效果并完善战斗输入上下文
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful

This commit is contained in:
xinian
2026-04-04 22:39:56 +08:00
committed by cnb
parent 39e1d4c42f
commit 2eba4b7915
6 changed files with 134 additions and 54 deletions

View File

@@ -51,6 +51,7 @@ func (e *EffectNode) GetInput() *input.Input {
}
// SourceInput 返回 effect 的来源输入(优先 Ctx.Source回退到绑定输入
func (e *EffectNode) SourceInput() *input.Input {
if e.Ctx().Source != nil {
return e.Ctx().Source
@@ -58,6 +59,7 @@ func (e *EffectNode) SourceInput() *input.Input {
return e.Input
}
// CarrierInput 返回当前持有该 effect 的输入(优先 Ctx.Carrier
func (e *EffectNode) CarrierInput() *input.Input {
if e.Ctx().Carrier != nil {
return e.Ctx().Carrier
@@ -65,6 +67,7 @@ func (e *EffectNode) CarrierInput() *input.Input {
return e.Ctx().Our
}
// TargetInput 返回当前 effect 作用目标输入(优先 Ctx.Target
func (e *EffectNode) TargetInput() *input.Input {
if e.Ctx().Target != nil {
return e.Ctx().Target
@@ -72,10 +75,12 @@ func (e *EffectNode) TargetInput() *input.Input {
return e.Ctx().Opp
}
// OpponentInput 返回当前上下文中的对位输入(兼容旧链路)。
func (e *EffectNode) OpponentInput() *input.Input {
return e.Ctx().Opp
}
// SourcePet 返回来源输入当前出战精灵。
func (e *EffectNode) SourcePet() *info.BattlePetEntity {
in := e.SourceInput()
if in == nil {
@@ -84,6 +89,7 @@ func (e *EffectNode) SourcePet() *info.BattlePetEntity {
return in.CurrentPet()
}
// CarrierPet 返回持有效果输入当前出战精灵。
func (e *EffectNode) CarrierPet() *info.BattlePetEntity {
in := e.CarrierInput()
if in == nil {
@@ -92,6 +98,7 @@ func (e *EffectNode) CarrierPet() *info.BattlePetEntity {
return in.CurrentPet()
}
// TargetPet 返回目标输入当前出战精灵。
func (e *EffectNode) TargetPet() *info.BattlePetEntity {
in := e.TargetInput()
if in == nil {
@@ -100,6 +107,7 @@ func (e *EffectNode) TargetPet() *info.BattlePetEntity {
return in.CurrentPet()
}
// OpponentPet 返回对位输入当前出战精灵。
func (e *EffectNode) OpponentPet() *info.BattlePetEntity {
in := e.OpponentInput()
if in == nil {
@@ -108,6 +116,8 @@ func (e *EffectNode) OpponentPet() *info.BattlePetEntity {
return in.CurrentPet()
}
// ForEachOpponentSlot 遍历对面全部站位;回调返回 false 时提前停止。
// 无组队视图时回退到单目标 OpponentInput。
func (e *EffectNode) ForEachOpponentSlot(fn func(*input.Input) bool) {
if fn == nil {
return
@@ -136,6 +146,8 @@ func (e *EffectNode) ForEachOpponentSlot(fn func(*input.Input) bool) {
}
}
// ForEachCarrierBenchPet 遍历持有效果方当前站位的后备精灵(不含当前出战)。
// 回调返回 false 时提前停止。
func (e *EffectNode) ForEachCarrierBenchPet(fn func(*info.BattlePetEntity) bool) {
if fn == nil {
return