Events are a way of communicating between systems, spaces and even scenes. Events can be subscribed to, unsubscribed and broadcasted via the App#subscribe
, App#unsubscribe
and App#broadcast
methods.
Copy app . subscribe( Event :: Closed ) { puts "window closed!" ; exit ( 0 ) }
Copy class PlayerDeadEvent < Scar::Event::Event # Scar::Event is a module containing all builtin events!
property :pos
def initialize (@ pos : Scar :: Vec ) ; end
end
class SomeSystem < Scar::System
include Scar
def init ( app : App , space : Space )
app . subscribe( PlayerDeadEvent ) { | e : PlayerDeadEvent | puts "Player died at #{e . pos . x} | #{e . pos . y} " }
end
end
class PlayerSystem < Scar::System
include Scar
def update ( app : App , space : Space , dt )
pl = space[ "player" ]
plc = pl[ PlayerComponent ]
app . broadcast( PlayerDeadEvent . new pl . position) if plc . health <= 0
end
end