refactor(fight/effect): 实现Effect9的BeforeSkill逻辑,新增Min泛型函数并优化效果叠加处理
This commit is contained in:
@@ -35,3 +35,10 @@ func Max[T Number](a, b T) T {
|
||||
}
|
||||
return b
|
||||
}
|
||||
// Max 泛型函数:接收两个同类型的 Number 参数,返回最大值
|
||||
func Min[T Number](a, b T) T {
|
||||
if a < b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package effect
|
||||
|
||||
import (
|
||||
"blazing/common/utils"
|
||||
"blazing/logic/service/fight/info"
|
||||
"blazing/logic/service/fight/input"
|
||||
"blazing/logic/service/fight/node"
|
||||
)
|
||||
@@ -18,6 +20,22 @@ func init() {
|
||||
|
||||
type Effect9 struct {
|
||||
node.EffectNode
|
||||
skillid int //记录使用的技能 ,如果技能变了就删除effect
|
||||
Skillid int //记录使用的技能 ,如果技能变了就删除effect
|
||||
UseSkillCount int //技能使用了多少次,切换后置0
|
||||
}
|
||||
|
||||
func (e *Effect9) BeforeSkill(opp *input.Input, skill *info.SkillEntity) {
|
||||
if e.Skillid != 0 && skill.ID != e.Skillid {
|
||||
e.NotALive()
|
||||
e.UseSkillCount = 0
|
||||
return
|
||||
|
||||
}
|
||||
e.Skillid = skill.ID
|
||||
add := e.EffectNode.SideEffectArgs[0] * e.UseSkillCount
|
||||
|
||||
skill.Power += utils.Min(add, e.EffectNode.SideEffectArgs[1])
|
||||
|
||||
e.UseSkillCount++
|
||||
|
||||
}
|
||||
|
||||
@@ -48,6 +48,9 @@ func (e *Effect0) OnSkill(opp *input.Input, skill *info.SkillEntity) {
|
||||
})
|
||||
|
||||
e.Stack(e.Stack() * 2)
|
||||
if e.MaxStack != 0 && e.Stack() > e.MaxStack { //限制最大伤害
|
||||
e.Stack(e.MaxStack)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -112,12 +112,16 @@ func (c *Input) AddEffect(e *EffectID) {
|
||||
//TODO 先激活
|
||||
|
||||
// 如果已有同 ID 的效果,尝试叠加
|
||||
_, ok := c.Effects.Load(e.ID)
|
||||
eff, ok := c.Effects.Load(e.ID)
|
||||
if !ok {
|
||||
// 否则新加入
|
||||
c.Effects.Store(e.ID, e.Effect)
|
||||
return
|
||||
}
|
||||
if !eff.Alive() { //如果不存活
|
||||
c.Effects.Store(e.ID, e.Effect)
|
||||
return
|
||||
}
|
||||
|
||||
c.Effects.Range(func(key int, value Effect) bool {
|
||||
if e.ID == key {
|
||||
|
||||
Reference in New Issue
Block a user