mirror of
https://github.com/stevenhowes/GoRetro.git
synced 2026-05-27 04:01:00 +01:00
Move all engine stuff to GoRetro. Still many interactions between game and engine code that there should not be.
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user