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, ObserverOrder) newtype ObserverOrder = ObserverOrder Int deriving (Int -> ObserverOrder -> ShowS [ObserverOrder] -> ShowS ObserverOrder -> String (Int -> ObserverOrder -> ShowS) -> (ObserverOrder -> String) -> ([ObserverOrder] -> ShowS) -> Show ObserverOrder forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> ObserverOrder -> ShowS showsPrec :: Int -> ObserverOrder -> ShowS $cshow :: ObserverOrder -> String show :: ObserverOrder -> String $cshowList :: [ObserverOrder] -> ShowS showList :: [ObserverOrder] -> ShowS Show) deriving anyclass (Typeable ObserverOrder [HookRel ObserverOrder] [Hook ObserverOrder] Set DefaultComponentType IsExclusive (IsExclusiveRel ObserverOrder) (Typeable ObserverOrder, IsExclusive (IsExclusiveRel ObserverOrder)) => Set DefaultComponentType -> [Hook ObserverOrder] -> [Hook ObserverOrder] -> [Hook ObserverOrder] -> [HookRel ObserverOrder] -> [HookRel ObserverOrder] -> [HookRel ObserverOrder] -> Component ObserverOrder forall c. (Typeable c, IsExclusive (IsExclusiveRel c)) => Set DefaultComponentType -> [Hook c] -> [Hook c] -> [Hook c] -> [HookRel c] -> [HookRel c] -> [HookRel c] -> Component c $crequired :: Set DefaultComponentType required :: Set DefaultComponentType $conAdd :: [Hook ObserverOrder] onAdd :: [Hook ObserverOrder] $conSet :: [Hook ObserverOrder] onSet :: [Hook ObserverOrder] $conRemove :: [Hook ObserverOrder] onRemove :: [Hook ObserverOrder] $conAddRel :: [HookRel ObserverOrder] onAddRel :: [HookRel ObserverOrder] $conSetRel :: [HookRel ObserverOrder] onSetRel :: [HookRel ObserverOrder] $conRemoveRel :: [HookRel ObserverOrder] onRemoveRel :: [HookRel ObserverOrder] Component) deriving newtype (ObserverOrder -> ObserverOrder -> Bool (ObserverOrder -> ObserverOrder -> Bool) -> (ObserverOrder -> ObserverOrder -> Bool) -> Eq ObserverOrder forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: ObserverOrder -> ObserverOrder -> Bool == :: ObserverOrder -> ObserverOrder -> Bool $c/= :: ObserverOrder -> ObserverOrder -> Bool /= :: ObserverOrder -> ObserverOrder -> Bool Eq, Eq ObserverOrder Eq ObserverOrder => (ObserverOrder -> ObserverOrder -> Ordering) -> (ObserverOrder -> ObserverOrder -> Bool) -> (ObserverOrder -> ObserverOrder -> Bool) -> (ObserverOrder -> ObserverOrder -> Bool) -> (ObserverOrder -> ObserverOrder -> Bool) -> (ObserverOrder -> ObserverOrder -> ObserverOrder) -> (ObserverOrder -> ObserverOrder -> ObserverOrder) -> Ord ObserverOrder ObserverOrder -> ObserverOrder -> Bool ObserverOrder -> ObserverOrder -> Ordering ObserverOrder -> ObserverOrder -> ObserverOrder forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: ObserverOrder -> ObserverOrder -> Ordering compare :: ObserverOrder -> ObserverOrder -> Ordering $c< :: ObserverOrder -> ObserverOrder -> Bool < :: ObserverOrder -> ObserverOrder -> Bool $c<= :: ObserverOrder -> ObserverOrder -> Bool <= :: ObserverOrder -> ObserverOrder -> Bool $c> :: ObserverOrder -> ObserverOrder -> Bool > :: ObserverOrder -> ObserverOrder -> Bool $c>= :: ObserverOrder -> ObserverOrder -> Bool >= :: ObserverOrder -> ObserverOrder -> Bool $cmax :: ObserverOrder -> ObserverOrder -> ObserverOrder max :: ObserverOrder -> ObserverOrder -> ObserverOrder $cmin :: ObserverOrder -> ObserverOrder -> ObserverOrder min :: ObserverOrder -> ObserverOrder -> ObserverOrder Ord, ObserverOrder ObserverOrder -> Default ObserverOrder forall a. a -> Default a $cdef :: ObserverOrder def :: ObserverOrder Default) 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)