module Mischief.ECS.Observer where

import Data.Data
import Data.Default
import GHC.Generics
import Mischief.ECS.Components
import Mischief.ECS.Components.Required
import Mischief.ECS.World

newtype Observer e = Observer (e -> System ())

instance (Typeable e) => Component (Observer e) where
  required :: Set DefaultComponentType
required = forall b. RequiredBundle b => Set DefaultComponentType
forall {k} (b :: k). RequiredBundle b => Set DefaultComponentType
require @(EventProxy e)

data EventProxy e = EventProxy deriving (Typeable (EventProxy e)
[HookRel (EventProxy e)]
[Hook (EventProxy e)]
Set DefaultComponentType
IsExclusive (IsExclusiveRel (EventProxy e))
(Typeable (EventProxy e),
 IsExclusive (IsExclusiveRel (EventProxy e))) =>
Set DefaultComponentType
-> [Hook (EventProxy e)]
-> [Hook (EventProxy e)]
-> [Hook (EventProxy e)]
-> [HookRel (EventProxy e)]
-> [HookRel (EventProxy e)]
-> [HookRel (EventProxy e)]
-> Component (EventProxy e)
forall c.
(Typeable c, IsExclusive (IsExclusiveRel c)) =>
Set DefaultComponentType
-> [Hook c]
-> [Hook c]
-> [Hook c]
-> [HookRel c]
-> [HookRel c]
-> [HookRel c]
-> Component c
forall k (e :: k).
(Typeable e, Typeable k) =>
Typeable (EventProxy e)
forall k (e :: k).
(Typeable e, Typeable k) =>
[HookRel (EventProxy e)]
forall k (e :: k).
(Typeable e, Typeable k) =>
[Hook (EventProxy e)]
forall k (e :: k).
(Typeable e, Typeable k) =>
Set DefaultComponentType
forall k (e :: k).
(Typeable e, Typeable k) =>
IsExclusive (IsExclusiveRel (EventProxy e))
$crequired :: forall k (e :: k).
(Typeable e, Typeable k) =>
Set DefaultComponentType
required :: Set DefaultComponentType
$conAdd :: forall k (e :: k).
(Typeable e, Typeable k) =>
[Hook (EventProxy e)]
onAdd :: [Hook (EventProxy e)]
$conSet :: forall k (e :: k).
(Typeable e, Typeable k) =>
[Hook (EventProxy e)]
onSet :: [Hook (EventProxy e)]
$conRemove :: forall k (e :: k).
(Typeable e, Typeable k) =>
[Hook (EventProxy e)]
onRemove :: [Hook (EventProxy e)]
$conAddRel :: forall k (e :: k).
(Typeable e, Typeable k) =>
[HookRel (EventProxy e)]
onAddRel :: [HookRel (EventProxy e)]
$conSetRel :: forall k (e :: k).
(Typeable e, Typeable k) =>
[HookRel (EventProxy e)]
onSetRel :: [HookRel (EventProxy e)]
$conRemoveRel :: forall k (e :: k).
(Typeable e, Typeable k) =>
[HookRel (EventProxy e)]
onRemoveRel :: [HookRel (EventProxy e)]
Component, (forall x. EventProxy e -> Rep (EventProxy e) x)
-> (forall x. Rep (EventProxy e) x -> EventProxy e)
-> Generic (EventProxy e)
forall x. Rep (EventProxy e) x -> EventProxy e
forall x. EventProxy e -> Rep (EventProxy e) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall k (e :: k) x. Rep (EventProxy e) x -> EventProxy e
forall k (e :: k) x. EventProxy e -> Rep (EventProxy e) x
$cfrom :: forall k (e :: k) x. EventProxy e -> Rep (EventProxy e) x
from :: forall x. EventProxy e -> Rep (EventProxy e) x
$cto :: forall k (e :: k) x. Rep (EventProxy e) x -> EventProxy e
to :: forall x. Rep (EventProxy e) x -> EventProxy e
Generic, EventProxy e
EventProxy e -> Default (EventProxy e)
forall a. a -> Default a
forall k (e :: k). EventProxy e
$cdef :: forall k (e :: k). EventProxy e
def :: EventProxy e
Default)