mirror of
https://github.com/stevenhowes/GoRetro.git
synced 2026-05-27 00:03:29 +01:00
59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package GoRetro
|
|
|
|
/*
|
|
* --------------------
|
|
* damageGiver
|
|
* --------------------
|
|
* During a collision a damageReciever handles damage from
|
|
* a damageGiver
|
|
*/
|
|
|
|
type damageGiver struct {
|
|
container *Element
|
|
damage float64 // Damage per incident (or tick if damagePerists)
|
|
damageActive bool // Is currently able to issue damage
|
|
damagePersists bool // Can this continue to damage once it's been hit
|
|
}
|
|
|
|
func NewDamageGiver(container *Element, damage float64, damagePersists bool) *damageGiver {
|
|
return &damageGiver{
|
|
container: container,
|
|
damage: damage,
|
|
damageActive: true,
|
|
damagePersists: damagePersists,
|
|
}
|
|
}
|
|
|
|
func (dg *damageGiver) onDraw() error {
|
|
return nil
|
|
}
|
|
|
|
func (dg *damageGiver) onUpdate() error {
|
|
if dg.container.checkComponentIsPresent(&damageReceiver{}) {
|
|
dr := dg.container.getComponent(&damageReceiver{}).(*damageReceiver)
|
|
if dr.health <= 0 {
|
|
// We can't give damage any more if our reciever is at 0 (i.e. container is dead)
|
|
dg.damageActive = false
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (dg *damageGiver) onCollision(other *Element) error {
|
|
if !dg.damageActive {
|
|
return nil
|
|
}
|
|
|
|
if other.checkComponentIsPresent(&damageReceiver{}) {
|
|
// Find our victim and subtract damage
|
|
dr := other.getComponent(&damageReceiver{}).(*damageReceiver)
|
|
dr.health -= dg.damage
|
|
|
|
// If we don't continue to hand out damage then disable ourselves
|
|
if !dg.damagePersists {
|
|
dg.damageActive = false
|
|
}
|
|
}
|
|
return nil
|
|
}
|