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 Set DefaultComponentType Hooks ObserverOrder IsExclusive (RelExclusivity ObserverOrder) (Typeable ObserverOrder, IsExclusive (RelExclusivity ObserverOrder)) => Set DefaultComponentType -> Hooks ObserverOrder -> Component ObserverOrder forall c. (Typeable c, IsExclusive (RelExclusivity c)) => Set DefaultComponentType -> Hooks c -> Component c $crequired :: Set DefaultComponentType required :: Set DefaultComponentType $chooks :: Hooks ObserverOrder hooks :: Hooks 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) Set DefaultComponentType Hooks (EventProxy e) IsExclusive (RelExclusivity (EventProxy e)) (Typeable (EventProxy e), IsExclusive (RelExclusivity (EventProxy e))) => Set DefaultComponentType -> Hooks (EventProxy e) -> Component (EventProxy e) forall c. (Typeable c, IsExclusive (RelExclusivity c)) => Set DefaultComponentType -> Hooks c -> Component c forall k (e :: k). (Typeable e, Typeable k) => Typeable (EventProxy e) forall k (e :: k). (Typeable e, Typeable k) => Set DefaultComponentType forall k (e :: k). (Typeable e, Typeable k) => Hooks (EventProxy e) forall k (e :: k). (Typeable e, Typeable k) => IsExclusive (RelExclusivity (EventProxy e)) $crequired :: forall k (e :: k). (Typeable e, Typeable k) => Set DefaultComponentType required :: Set DefaultComponentType $chooks :: forall k (e :: k). (Typeable e, Typeable k) => Hooks (EventProxy e) hooks :: Hooks (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)