mischief-ecs-0.2.0.0: src/Mischief/ECS/Events.hs
module Mischief.ECS.Events where
import Data.Foldable (for_)
import Mischief.ECS.Entities
import Mischief.ECS.EventDef
import Mischief.ECS.Observer
import Mischief.ECS.World
import Mischief.ECS.World.Query
import Mischief.ECS.World.Query.Markers
trigger :: forall e. (Event e) => e -> System ()
trigger !event = do
!observers <- query $ mkQuery (C @(Observer e), C @(EventProxy e))
for_ observers $ \(!observer, _) -> do
let Observer !f = observer
f event
newtype OnSet c = OnSet {entity :: Entity}
deriving anyclass (Event)
deriving stock (Show)
data OnSetRel c = OnSetRel {entity :: Entity, target :: Entity}
deriving anyclass (Event)
deriving stock (Show)
newtype OnAdd c = OnAdd {entity :: Entity}
deriving anyclass (Event)
deriving stock (Show)
data OnAddRel c = OnAddRel {entity :: Entity, target :: Entity}
deriving anyclass (Event)
deriving stock (Show)
newtype OnRemove c = OnRemove {entity :: Entity}
deriving anyclass (Event)
deriving stock (Show)
data OnRemoveRel c = OnRemoveRel {entity :: Entity, target :: Entity}
deriving anyclass (Event)
deriving stock (Show)