package components import ( "github.com/hajimehoshi/ebiten/v2" "github.com/mlange-42/arche/ecs" ) // the Bond components binds two different entities together, one // manipulates the other type Bond struct { ecs.Relation Id, Ref string } // A door has a relation to a switch using the Bond component. The // Switch opens or closes the door, depending on player actions. The // door itself is merely dump and just does what being told. type Door struct { IsOpen bool OpenSprite *ebiten.Image CloseSprite *ebiten.Image Id string } func (door *Door) Toggle() { door.IsOpen = !door.IsOpen } func (door *Door) Sprite() *ebiten.Image { if door.IsOpen { return door.OpenSprite } return door.CloseSprite } // the switch is being activated when the player runs over it, it can // either use a timeout or just stay in its switching position type Switch struct { IsOpen bool OpenSprite *ebiten.Image CloseSprite *ebiten.Image Ref string // the IId of the door } func (switcher *Switch) Toggle() { switcher.IsOpen = !switcher.IsOpen } func (switcher *Switch) Sprite() *ebiten.Image { if switcher.IsOpen { return switcher.OpenSprite } return switcher.CloseSprite }