36 lines
1.0 KiB
Go
36 lines
1.0 KiB
Go
|
|
package effect
|
||
|
|
|
||
|
|
import (
|
||
|
|
"github.com/df-mc/dragonfly/server/world"
|
||
|
|
"image/color"
|
||
|
|
)
|
||
|
|
|
||
|
|
// InstantDamage is an instant effect that causes a living entity to
|
||
|
|
// immediately take some damage, depending on the level and the potency of the
|
||
|
|
// effect.
|
||
|
|
var InstantDamage instantDamage
|
||
|
|
|
||
|
|
type instantDamage struct{}
|
||
|
|
|
||
|
|
// Apply ...
|
||
|
|
func (i instantDamage) Apply(e world.Entity, eff Effect) {
|
||
|
|
base := 3 << eff.Level()
|
||
|
|
if l, ok := e.(living); ok {
|
||
|
|
l.Hurt(float64(base)*eff.potency, InstantDamageSource{})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// RGBA ...
|
||
|
|
func (instantDamage) RGBA() color.RGBA {
|
||
|
|
return color.RGBA{R: 0xa9, G: 0x65, B: 0x6a, A: 0xff}
|
||
|
|
}
|
||
|
|
|
||
|
|
// InstantDamageSource is used for damage caused by an effect.instantDamage
|
||
|
|
// applied to an entity.
|
||
|
|
type InstantDamageSource struct{}
|
||
|
|
|
||
|
|
func (InstantDamageSource) ReducedByArmour() bool { return false }
|
||
|
|
func (InstantDamageSource) ReducedByResistance() bool { return true }
|
||
|
|
func (InstantDamageSource) Fire() bool { return false }
|
||
|
|
func (InstantDamageSource) IgnoreTotem() bool { return false }
|