Files
bl/logic/service/fight/input/shield.go
xinian 66fdc3d189
Some checks failed
ci/woodpecker/push/my-first-workflow Pipeline failed
feat: 实现技能效果 627-672 及 1011-1111
2026-03-29 19:00:08 +08:00

52 lines
1.3 KiB
Go

package input
import "github.com/alpacahq/alpacadecimal"
func (our *Input) CurrentShield() alpacadecimal.Decimal {
if our == nil || our.CurrentPet == nil {
return alpacadecimal.Zero
}
return our.CurrentPet.Shield
}
func (our *Input) HasShield() bool {
return our.CurrentShield().Cmp(alpacadecimal.Zero) > 0
}
func (our *Input) AddShield(value alpacadecimal.Decimal) bool {
if our == nil || our.CurrentPet == nil {
return false
}
if value.Cmp(alpacadecimal.Zero) <= 0 {
return false
}
our.CurrentPet.Shield = our.CurrentPet.Shield.Add(value)
return true
}
func (our *Input) AbsorbShieldDamage(damage alpacadecimal.Decimal) alpacadecimal.Decimal {
if our == nil || our.CurrentPet == nil {
return alpacadecimal.Zero
}
if damage.Cmp(alpacadecimal.Zero) <= 0 || our.CurrentPet.Shield.Cmp(alpacadecimal.Zero) <= 0 {
return alpacadecimal.Zero
}
absorbed := alpacadecimal.Min(our.CurrentPet.Shield, damage)
our.CurrentPet.Shield = our.CurrentPet.Shield.Sub(absorbed)
if our.CurrentPet.Shield.Cmp(alpacadecimal.Zero) < 0 {
our.CurrentPet.Shield = alpacadecimal.Zero
}
return absorbed
}
func (our *Input) ConsumeAllShield() alpacadecimal.Decimal {
if our == nil || our.CurrentPet == nil {
return alpacadecimal.Zero
}
value := our.CurrentPet.Shield
our.CurrentPet.Shield = alpacadecimal.Zero
return value
}