| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
Mischief.ECS.Prelude
Synopsis
- module Mischief.ECS.Exports
- class (Typeable c, IsExclusive (IsExclusiveRel c)) => Component c where
- data From c = From {}
- type family IsExclusiveRel c :: Bool
- data Rel c = Rel {}
- newtype Res c = Res {
- comp :: c
- require :: forall {k} (b :: k). RequiredBundle b => Set DefaultComponentType
- module Mischief.ECS.Components.Common
- data Entity
- mkGet :: forall qd out (m :: Type -> Type). Queryable qd out => Entity -> qd -> Query m out
- mkGet' :: forall qd out (m :: Type -> Type). Queryable qd out => Entity -> qd -> QueryFilter 'ArchetypeFilter -> Query m out
- mkQuery :: forall qd out (m :: Type -> Type). Queryable qd out => qd -> Query m out
- mkQuery' :: forall qd out (m :: Type -> Type). Queryable qd out => qd -> QueryFilter 'ArchetypeFilter -> Query m out
- query :: MonadSystem w m => Query m out -> m [out]
- query_ :: MonadSystem w m => Query m out -> m ()
- single :: MonadSystem w m => Query m out -> m (Maybe out)
- data Query (m :: Type -> Type) a
- data QueryFilter (f :: FilterType) where
- NoFilter :: forall (f :: FilterType). QueryFilter f
- With :: forall a (f :: FilterType). ToFilterComponent a => a -> QueryFilter f
- Without :: forall a (f :: FilterType). ToFilterComponent a => a -> QueryFilter f
- Changed :: forall a. ToFilterComponent a => a -> QueryFilter 'EntityFilter
- Added :: forall a. ToFilterComponent a => a -> QueryFilter 'EntityFilter
- Not :: forall (f :: FilterType). QueryFilter f -> QueryFilter f
- And :: forall (f :: FilterType). QueryFilter f -> QueryFilter f -> QueryFilter f
- Or :: forall (f :: FilterType). QueryFilter f -> QueryFilter f -> QueryFilter f
- data Any = Any
- data C (a :: k) = C
- data E = E
- data Has (a :: k) = Has
- newtype HasR (a :: k) b = HasR b
- data M (a :: k) = M
- newtype MR (a :: k) b = MR b
- newtype Q a = Q a
- data Q' a b = Q' a b
- newtype R (a :: k) b = R b
- newtype R' (a :: k) b = R' b
- module Mischief.ECS.World.Query.TH
- insert :: HasCallStack => forall b. Bundle b => b -> Entity -> System ()
- insertIfNeq :: BundleEq b => b -> Entity -> System ()
- insertNew :: Bundle b => b -> Entity -> System ()
- remove :: Collectable c ToRemove => c -> Entity -> System ()
- despawn :: Entity -> System ()
- spawn :: (HasCallStack, Bundle b) => b -> System Entity
- spawnDefer :: Bundle b => b -> ParSystem Entity
- module Mischief.ECS.Resources
- class Typeable e => Event e
- data System a
- data Time
- data TimePlugin
- delay :: MonadSystem w m => Int -> System () -> m ()
- runAfter :: MonadSystem w m => IO a -> (a -> System ()) -> m ()
- defer :: Defer m => System a -> m ()
- addPlugin :: Plugin p => App -> IO ()
- newApp :: IO App
- runApp :: App -> IO ()
- dep :: Plugin p => Dependency
- data Dependency
- class Typeable p => Plugin p where
- deps :: [Dependency]
- init :: System ()
- data PostStartup
- data PostUpdate
- data PreStartup
- data PreUpdate
- data Startup
- data Update
- after :: ToSystems a => a -> SystemConfig -> SystemConfig
- before :: ToSystems a => a -> SystemConfig -> SystemConfig
- order :: forall {k} (sc :: k) a b. (Schedule sc, ToSystems a, ToSystems b) => (a, b) -> System ()
- schedule :: forall {k} (sc :: k). Schedule sc => SystemConfig -> System ()
- systems :: ToSystems a => a -> SystemConfig
- unschedule :: forall {k} (sc :: k) a. (Schedule sc, ToSystems a) => a -> System ()
- module Mischief.ECS.Log
- expect :: HasCallStack => String -> Maybe a -> a
- unwrap :: HasCallStack => Maybe a -> a
- trigger :: Event e => e -> System ()
- newtype OnAdd (c :: k) = OnAdd {}
- data OnAddRel (c :: k) = OnAddRel {}
- newtype OnRemove (c :: k) = OnRemove {}
- data OnRemoveRel (c :: k) = OnRemoveRel {}
- newtype OnSet (c :: k) = OnSet {}
- data OnSetRel (c :: k) = OnSetRel {}
- data Hook (a :: k)
- newtype HookContext = HookContext {}
- data HookContextRel = HookContextRel {}
- data HookRel (a :: k)
- module Mischief.ECS.Hooks
- type Bundle b = Collectable b (BundleData ErasedComponent)
- type BundleEq b = Collectable b (BundleData ErasedComponentEq)
- data Timer
- module Mischief.ECS.World.Query.Pipe
- newtype Observer e = Observer (e -> System ())
- (&) :: a -> (a -> b) -> b
Documentation
module Mischief.ECS.Exports
class (Typeable c, IsExclusive (IsExclusiveRel c)) => Component c where Source #
The Component typeclass.
Minimal complete definition
Nothing
Methods
required :: Set DefaultComponentType Source #
List of components required by this one.
All required components must be Default
Example
data A = A instanceComponentA whererequired=require@(B, C) data B = BIntderiving (Component,Generic,Default) data C = CStringderiving (Component) instanceDefaultC wheredef= C "Default String"
onAddRel :: [HookRel c] Source #
onSetRel :: [HookRel c] Source #
onRemoveRel :: [HookRel c] Source #
Instances
Instances
| Functor From Source # | |
| (Component c, Queryable q out) => RelQuery 'False (MR c (Q q)) (Maybe [From out]) Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| (Component c, Queryable q out) => RelQuery 'False (MR c (Q' q (QueryFilter 'ArchetypeFilter))) (Maybe [From out]) Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods relRunQueryEntity :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe (Maybe [From out])) Source # relRunQueryInternal :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, Maybe [From out])] Source # relQueryTypes :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| (Component c, Queryable q out) => RelQuery 'False (R c (Q q)) [From out] Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| (Component c, Queryable q out) => RelQuery 'False (R c (Q' q (QueryFilter 'ArchetypeFilter))) [From out] Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods relRunQueryEntity :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe [From out]) Source # relRunQueryInternal :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, [From out])] Source # relQueryTypes :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| (Component c, Queryable q out) => RelQuery 'True (MR c (Q q)) (Maybe (From out)) Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| (Component c, Queryable q out) => RelQuery 'True (MR c (Q' q (QueryFilter 'ArchetypeFilter))) (Maybe (From out)) Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods relRunQueryEntity :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe (Maybe (From out))) Source # relRunQueryInternal :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, Maybe (From out))] Source # relQueryTypes :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| (Component c, Queryable q out) => RelQuery 'True (R c (Q q)) (From out) Source # | |
| (Component c, Queryable q out) => RelQuery 'True (R c (Q' q (QueryFilter 'ArchetypeFilter))) (From out) Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods relRunQueryEntity :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe (From out)) Source # relRunQueryInternal :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, From out)] Source # relQueryTypes :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| Show c => Show (From c) Source # | |
| Eq c => Eq (From c) Source # | |
| Collectable c (BundleData ErasedComponent) => EraseIntoStorage (From c) (BundleData ErasedComponent) Source # | |
Defined in Mischief.ECS.Components Methods erase :: From c -> BundleData ErasedComponent Source # | |
| Collectable c (BundleData ErasedComponentEq) => EraseIntoStorage (From c) (BundleData ErasedComponentEq) Source # | |
Defined in Mischief.ECS.Components Methods erase :: From c -> BundleData ErasedComponentEq Source # | |
type family IsExclusiveRel c :: Bool Source #
Instances
| type IsExclusiveRel ScheduleLabel Source # | |
Defined in Mischief.ECS.App.Schedules | |
| type IsExclusiveRel Schedules Source # | |
Defined in Mischief.ECS.App.Schedules | |
| type IsExclusiveRel StartupSchedule Source # | |
Defined in Mischief.ECS.App.Schedules | |
| type IsExclusiveRel UpdateSchedule Source # | |
Defined in Mischief.ECS.App.Schedules | |
| type IsExclusiveRel LastSystemTick Source # | |
Defined in Mischief.ECS.App.SystemDef | |
| type IsExclusiveRel SystemTick Source # | |
Defined in Mischief.ECS.App.SystemDef | |
| type IsExclusiveRel ScheduledIn Source # | |
Defined in Mischief.ECS.App.Systems | |
| type IsExclusiveRel SystemFunction Source # | |
Defined in Mischief.ECS.App.Systems | |
| type IsExclusiveRel Systems Source # | |
Defined in Mischief.ECS.App.Systems | |
| type IsExclusiveRel ComponentArchetypes Source # | |
Defined in Mischief.ECS.Components | |
| type IsExclusiveRel ComponentPairs Source # | |
Defined in Mischief.ECS.Components | |
| type IsExclusiveRel ComponentType Source # | |
Defined in Mischief.ECS.Components | |
| type IsExclusiveRel DefaultValue Source # | |
Defined in Mischief.ECS.Components | |
| type IsExclusiveRel IsExclusiveRelationship Source # | |
Defined in Mischief.ECS.Components | |
| type IsExclusiveRel RequiredBy Source # | |
Defined in Mischief.ECS.Components | |
| type IsExclusiveRel Requires Source # | |
Defined in Mischief.ECS.Components | |
| type IsExclusiveRel Name Source # | |
Defined in Mischief.ECS.Components.Common | |
| type IsExclusiveRel ComponentAddHooks Source # | |
Defined in Mischief.ECS.Components.Spawn | |
| type IsExclusiveRel ComponentAddHooksRel Source # | |
Defined in Mischief.ECS.Components.Spawn | |
| type IsExclusiveRel ComponentRemoveHooks Source # | |
Defined in Mischief.ECS.Components.Spawn | |
| type IsExclusiveRel ComponentRemoveHooksRel Source # | |
Defined in Mischief.ECS.Components.Spawn | |
| type IsExclusiveRel ComponentSetHooks Source # | |
Defined in Mischief.ECS.Components.Spawn | |
| type IsExclusiveRel ComponentSetHooksRel Source # | |
Defined in Mischief.ECS.Components.Spawn | |
| type IsExclusiveRel ObserverOrder Source # | |
Defined in Mischief.ECS.Observer | |
| type IsExclusiveRel ChildOf Source # | |
Defined in Mischief.ECS.Relationships.ChildOf | |
| type IsExclusiveRel Before Source # | |
Defined in Mischief.ECS.Relationships.Order | |
| type IsExclusiveRel Visited Source # | |
Defined in Mischief.ECS.Relationships.Order | |
| type IsExclusiveRel VirtualTime Source # | |
Defined in Mischief.ECS.Time | |
| type IsExclusiveRel (Observer e) Source # | |
Defined in Mischief.ECS.Observer | |
| type IsExclusiveRel (EventProxy e) Source # | |
Defined in Mischief.ECS.Observer | |
| type IsExclusiveRel (TestG a b) Source # | |
Defined in Mischief.ECS.World.Query.TH.QD | |
Type used for querying and inserting relationships.
Instances
| Functor Rel Source # | |
| Component c => RelQuery 'False (MR c Any) (Maybe [Rel c]) Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| Component c => RelQuery 'False (R c Any) [Rel c] Source # | |
| Component c => RelQuery 'True (MR c Any) (Maybe (Rel c)) Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| Component c => RelQuery 'True (R c Any) (Rel c) Source # | |
| Show c => Show (Rel c) Source # | |
| Eq c => Eq (Rel c) Source # | |
| Component c => EraseIntoStorage (Rel c) (BundleData ErasedComponent) Source # | |
Defined in Mischief.ECS.Components Methods erase :: Rel c -> BundleData ErasedComponent Source # | |
| (Component c, Eq c) => EraseIntoStorage (Rel c) (BundleData ErasedComponentEq) Source # | |
Defined in Mischief.ECS.Components Methods erase :: Rel c -> BundleData ErasedComponentEq Source # | |
| Component c => Queryable (MR c Entity) (Maybe (Rel c)) Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| Component c => Queryable (R c Entity) (Rel c) Source # | |
Instances
| Functor Res Source # | |
| Show c => Show (Res c) Source # | |
| Eq c => Eq (Res c) Source # | |
| Component c => EraseIntoStorage (Res c) (BundleData ErasedComponent) Source # | |
Defined in Mischief.ECS.Components Methods erase :: Res c -> BundleData ErasedComponent Source # | |
| (Component c, Eq c) => EraseIntoStorage (Res c) (BundleData ErasedComponentEq) Source # | |
Defined in Mischief.ECS.Components Methods erase :: Res c -> BundleData ErasedComponentEq Source # | |
| Component c => Queryable (MRes c) (Maybe (Res c)) Source # | |
| Component c => Queryable (c -> Res c) (Res c) Source # | |
require :: forall {k} (b :: k). RequiredBundle b => Set DefaultComponentType Source #
UNLIFTED
Points to an unique entity. The first Word# is an id, the second is a generation.
It is guaranteed that there can't be two alive entities with the same id.
Instances
| Show Entity Source # | |
| Eq Entity Source # | |
| Ord Entity Source # | |
| Queryable E Entity Source # | |
| ListToOutgoing (Maybe Entity) Source # | |
Defined in Mischief.ECS.Relationships.Graph | |
| ListToOutgoing [Entity] Source # | |
Defined in Mischief.ECS.Relationships.Graph Methods listToOutgoing :: [Entity] -> [Entity] Source # | |
| Component c => ToFilterComponent (R c Entity) Source # | |
Defined in Mischief.ECS.World.Query.QueryFilter Methods toFilterComponent :: R c Entity -> FilterComponent Source # | |
| Component c => Queryable (HasR c Entity) Bool Source # | |
| Component c => Queryable (MR c Entity) (Maybe (Rel c)) Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| Component c => Queryable (R c Entity) (Rel c) Source # | |
mkGet :: forall qd out (m :: Type -> Type). Queryable qd out => Entity -> qd -> Query m out Source #
mkGet' :: forall qd out (m :: Type -> Type). Queryable qd out => Entity -> qd -> QueryFilter 'ArchetypeFilter -> Query m out Source #
mkQuery' :: forall qd out (m :: Type -> Type). Queryable qd out => qd -> QueryFilter 'ArchetypeFilter -> Query m out Source #
query :: MonadSystem w m => Query m out -> m [out] Source #
query_ :: MonadSystem w m => Query m out -> m () Source #
data Query (m :: Type -> Type) a Source #
Instances
| MonadSystem w m => Applicative (Query m) Source # | |
| MonadSystem w m => Functor (Query m) Source # | |
| MonadSystem w m => Monad (Query m) Source # | |
data QueryFilter (f :: FilterType) where Source #
Constructors
| NoFilter :: forall (f :: FilterType). QueryFilter f | |
| With :: forall a (f :: FilterType). ToFilterComponent a => a -> QueryFilter f | |
| Without :: forall a (f :: FilterType). ToFilterComponent a => a -> QueryFilter f | |
| Changed :: forall a. ToFilterComponent a => a -> QueryFilter 'EntityFilter | |
| Added :: forall a. ToFilterComponent a => a -> QueryFilter 'EntityFilter | |
| Not :: forall (f :: FilterType). QueryFilter f -> QueryFilter f | |
| And :: forall (f :: FilterType). QueryFilter f -> QueryFilter f -> QueryFilter f | |
| Or :: forall (f :: FilterType). QueryFilter f -> QueryFilter f -> QueryFilter f |
Instances
| (Component c, Queryable q out) => RelQuery 'False (MR c (Q' q (QueryFilter 'ArchetypeFilter))) (Maybe [From out]) Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods relRunQueryEntity :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe (Maybe [From out])) Source # relRunQueryInternal :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, Maybe [From out])] Source # relQueryTypes :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| (Component c, Queryable q out) => RelQuery 'False (R c (Q' q (QueryFilter 'ArchetypeFilter))) [From out] Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods relRunQueryEntity :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe [From out]) Source # relRunQueryInternal :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, [From out])] Source # relQueryTypes :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| (Component c, Queryable q out) => RelQuery 'True (MR c (Q' q (QueryFilter 'ArchetypeFilter))) (Maybe (From out)) Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods relRunQueryEntity :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe (Maybe (From out))) Source # relRunQueryInternal :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, Maybe (From out))] Source # relQueryTypes :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| (Component c, Queryable q out) => RelQuery 'True (R c (Q' q (QueryFilter 'ArchetypeFilter))) (From out) Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods relRunQueryEntity :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe (From out)) Source # relRunQueryInternal :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, From out)] Source # relQueryTypes :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| Semigroup (QueryFilter f) Source # | |
Defined in Mischief.ECS.World.Query.QueryFilter Methods (<>) :: QueryFilter f -> QueryFilter f -> QueryFilter f # sconcat :: NonEmpty (QueryFilter f) -> QueryFilter f # stimes :: Integral b => b -> QueryFilter f -> QueryFilter f # | |
| (Component c, Queryable q out) => Queryable (HasR c (Q' q (QueryFilter 'ArchetypeFilter))) Bool Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods runQueryEntity :: HasR c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe Bool) Source # runQueryInternal :: HasR c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, Bool)] Source # queryTypes :: HasR c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
Wildcard used when querying for relationships to indicate that you're querying for relationships with any target.
In the case of exclusive relationships, Any returns a single relationship rather than a list of relationships.
Constructors
| Any |
Instances
| Component c => RelQuery 'False (MR c Any) (Maybe [Rel c]) Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| Component c => RelQuery 'False (R c Any) [Rel c] Source # | |
| Component c => RelQuery 'True (MR c Any) (Maybe (Rel c)) Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| Component c => RelQuery 'True (R c Any) (Rel c) Source # | |
| Component c => ToFilterComponent (R c Any) Source # | |
Defined in Mischief.ECS.World.Query.QueryFilter Methods toFilterComponent :: R c Any -> FilterComponent Source # | |
| Component c => Queryable (HasR c Any) Bool Source # | |
| RelQuery (IsExclusiveRel c) (MR c Any) out => Queryable (MR c Any) out Source # | |
| RelQuery (IsExclusiveRel c) (R c Any) out => Queryable (R c Any) out Source # | |
Used to query for a component or to remove a component. Forces queries to only include entities which have the component.
Example
Querying:
x <- query (C @Name)
Removing:
remove (C @Name)
Quasi Notation
None, you just write the component name directly. For instance:
x <- [q|Name|]
Constructors
| C |
Instances
| Component c => ToFilterComponent (C c) Source # | |
Defined in Mischief.ECS.World.Query.QueryFilter Methods toFilterComponent :: C c -> FilterComponent Source # | |
| Component c => Queryable (C c) c Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
Used to query for the Entity.
Example
x <- query E
Quasi Notation
Entity
entity
E
e
For instance:
x <- [q|Entity|]
Constructors
| E |
Used in queries to return a Bool which indicates whether a component exists on the entity or not.
Example
x <- query (Has @Name)
Quasi Notation
Has
has
H
h
For instance:
x <- [q|Has Name|]
Constructors
| Has |
newtype HasR (a :: k) b Source #
Exactly like R, except that it returns a Bool depending on whether the entity has such a relationship or not.
Example
x <- query (HasR @Likes Any)
Quasi Notation
Has
has
H
h
For instance:
x <- [q|Has Likes -> *|]
Constructors
| HasR b |
Instances
| Component c => Queryable (HasR c Entity) Bool Source # | |
| Component c => Queryable (HasR c Any) Bool Source # | |
| (Component c, Queryable q out) => Queryable (HasR c (Q q)) Bool Source # | |
| (Component c, Queryable q out) => Queryable (HasR c (Q' q (QueryFilter 'ArchetypeFilter))) Bool Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods runQueryEntity :: HasR c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe Bool) Source # runQueryInternal :: HasR c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, Bool)] Source # queryTypes :: HasR c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
Used to query for a component that an entity may or may not have.
Example
x <- query (M @Name)
Quasi Notation
Maybe
maybe
M
m
For instance:
x <- [q|Maybe Name|]
Constructors
| M |
newtype MR (a :: k) b Source #
Exactly like R, except that it wraps the result in a Maybe, also including entities that don't have such a relationship.
Example
x <- query (MR @Likes Any)
Quasi Notation
Maybe
maybe
M
m
For instance:
x <- [q|Maybe Likes -> *|]
Constructors
| MR b |
Instances
| Component c => RelQuery 'False (MR c Any) (Maybe [Rel c]) Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| (Component c, Queryable q out) => RelQuery 'False (MR c (Q q)) (Maybe [From out]) Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| (Component c, Queryable q out) => RelQuery 'False (MR c (Q' q (QueryFilter 'ArchetypeFilter))) (Maybe [From out]) Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods relRunQueryEntity :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe (Maybe [From out])) Source # relRunQueryInternal :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, Maybe [From out])] Source # relQueryTypes :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| Component c => RelQuery 'True (MR c Any) (Maybe (Rel c)) Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| (Component c, Queryable q out) => RelQuery 'True (MR c (Q q)) (Maybe (From out)) Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| (Component c, Queryable q out) => RelQuery 'True (MR c (Q' q (QueryFilter 'ArchetypeFilter))) (Maybe (From out)) Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods relRunQueryEntity :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe (Maybe (From out))) Source # relRunQueryInternal :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, Maybe (From out))] Source # relQueryTypes :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| RelQuery (IsExclusiveRel c) (MR c Any) out => Queryable (MR c Any) out Source # | |
| RelQuery (IsExclusiveRel c) (MR c (Q q)) out => Queryable (MR c (Q q)) out Source # | |
| RelQuery (IsExclusiveRel c) (MR c (Q' q f)) out => Queryable (MR c (Q' q f)) out Source # | |
| Component c => Queryable (MR c Entity) (Maybe (Rel c)) Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
Used when writing transitive queries. See R.
Constructors
| Q a |
Instances
| (Component c, Queryable q out) => RelQuery 'False (MR c (Q q)) (Maybe [From out]) Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| (Component c, Queryable q out) => RelQuery 'False (R c (Q q)) [From out] Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| (Component c, Queryable q out) => RelQuery 'True (MR c (Q q)) (Maybe (From out)) Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| (Component c, Queryable q out) => RelQuery 'True (R c (Q q)) (From out) Source # | |
| (Component c, Queryable q out) => Queryable (HasR c (Q q)) Bool Source # | |
| RelQuery (IsExclusiveRel c) (MR c (Q q)) out => Queryable (MR c (Q q)) out Source # | |
| RelQuery (IsExclusiveRel c) (R c (Q q)) out => Queryable (R c (Q q)) out Source # | |
Used when writing transitive queries with filters. See R.
Constructors
| Q' a b |
Instances
| (Component c, Queryable q out) => RelQuery 'False (MR c (Q' q (QueryFilter 'ArchetypeFilter))) (Maybe [From out]) Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods relRunQueryEntity :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe (Maybe [From out])) Source # relRunQueryInternal :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, Maybe [From out])] Source # relQueryTypes :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| (Component c, Queryable q out) => RelQuery 'False (R c (Q' q (QueryFilter 'ArchetypeFilter))) [From out] Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods relRunQueryEntity :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe [From out]) Source # relRunQueryInternal :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, [From out])] Source # relQueryTypes :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| (Component c, Queryable q out) => RelQuery 'True (MR c (Q' q (QueryFilter 'ArchetypeFilter))) (Maybe (From out)) Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods relRunQueryEntity :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe (Maybe (From out))) Source # relRunQueryInternal :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, Maybe (From out))] Source # relQueryTypes :: MR c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| (Component c, Queryable q out) => RelQuery 'True (R c (Q' q (QueryFilter 'ArchetypeFilter))) (From out) Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods relRunQueryEntity :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe (From out)) Source # relRunQueryInternal :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, From out)] Source # relQueryTypes :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| (Component c, Queryable q out) => Queryable (HasR c (Q' q (QueryFilter 'ArchetypeFilter))) Bool Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods runQueryEntity :: HasR c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe Bool) Source # runQueryInternal :: HasR c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, Bool)] Source # queryTypes :: HasR c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| RelQuery (IsExclusiveRel c) (MR c (Q' q f)) out => Queryable (MR c (Q' q f)) out Source # | |
| RelQuery (IsExclusiveRel c) (R c (Q' q f)) out => Queryable (R c (Q' q f)) out Source # | |
Used to query for a relationships. Can be used in three different ways:
1. R c e
Queries for a relationship with a specific target. Forces queries to only include entities which have such a relationship.
Example
x <- query (R @Likes alice)
x :: [Result (Rel Likes)]
Quasi Notation
It is written with an arrow like so:
x <- [q|Likes -> alice|]
2. R c Any
Queries for all relationships with any target. Forces queries to only include entities which have at least one such relationship.
Example
x <- query (R @Likes Any)
x :: [[Result (Rel Likes)]]
Quasi Notation
x <- [q|Likes -> *|]
3. R c q
Runs a transitive query on the targets of all such relationships.
q can either be Q d or Q' d f, depending if you want to also run a filter or not.
Similar to the previous case, it will limit the query to only entities which have such a relationship with at least one entity which matches the transitive query.
Example
x <- query (R @Likes (Q (C @Name))
x <- query (R @Likes (Q' (C @Name) (With (C @Enemy))))
x :: [[Result Name]]
Quasi Notation
You just write the given query in the () following the arrow. / can be used to give it a filter.
For instance:
x <- [q|Likes -> (Name)|]
x <- [q|Likes -> (Name / With Enemy)|]
Constructors
| R b |
Instances
| Component c => RelQuery 'False (R c Any) [Rel c] Source # | |
| (Component c, Queryable q out) => RelQuery 'False (R c (Q q)) [From out] Source # | |
Defined in Mischief.ECS.World.Query.Queryable | |
| (Component c, Queryable q out) => RelQuery 'False (R c (Q' q (QueryFilter 'ArchetypeFilter))) [From out] Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods relRunQueryEntity :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe [From out]) Source # relRunQueryInternal :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, [From out])] Source # relQueryTypes :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| Component c => RelQuery 'True (R c Any) (Rel c) Source # | |
| (Component c, Queryable q out) => RelQuery 'True (R c (Q q)) (From out) Source # | |
| (Component c, Queryable q out) => RelQuery 'True (R c (Q' q (QueryFilter 'ArchetypeFilter))) (From out) Source # | |
Defined in Mischief.ECS.World.Query.Queryable Methods relRunQueryEntity :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> World -> Entity -> IO (Maybe (From out)) Source # relRunQueryInternal :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> [ArchetypeId] -> World -> IO [(Entity, Bool, From out)] Source # relQueryTypes :: R c (Q' q (QueryFilter 'ArchetypeFilter)) -> Set (TypeRep, TypeQuery) Source # | |
| Component c => ToFilterComponent (R c Entity) Source # | |
Defined in Mischief.ECS.World.Query.QueryFilter Methods toFilterComponent :: R c Entity -> FilterComponent Source # | |
| Component c => ToFilterComponent (R c Any) Source # | |
Defined in Mischief.ECS.World.Query.QueryFilter Methods toFilterComponent :: R c Any -> FilterComponent Source # | |
| RelQuery (IsExclusiveRel c) (R c Any) out => Queryable (R c Any) out Source # | |
| RelQuery (IsExclusiveRel c) (R c (Q q)) out => Queryable (R c (Q q)) out Source # | |
| RelQuery (IsExclusiveRel c) (R c (Q' q f)) out => Queryable (R c (Q' q f)) out Source # | |
| Component c => Queryable (R c Entity) (Rel c) Source # | |
newtype R' (a :: k) b Source #
Constructors
| R' b |
module Mischief.ECS.World.Query.TH
insert :: HasCallStack => forall b. Bundle b => b -> Entity -> System () Source #
Insert a bundle of components on an Entity.
If the entity already contains these components, their values will be updated in-place instead of causing an archetype change.
insertNew :: Bundle b => b -> Entity -> System () Source #
Insert a bundle of components on an Entity.
Only the components that the entity doesn't already have will be inserted, and the rest ignored.
despawn :: Entity -> System () Source #
Despawn an entity. This will trigger the OnRemove events and hooks on all its components.
spawn :: (HasCallStack, Bundle b) => b -> System Entity Source #
Spawn an entity given a bundle of components.
spawnDefer :: Bundle b => b -> ParSystem Entity Source #
Spawn an entity given a bundle of components, inside a ParSystem.
This will immediately reserve and return an Entity index which can be used, while defering the actual spawn.
module Mischief.ECS.Resources
class Typeable e => Event e Source #
Event typeclass.
Instances
| (Typeable c, Typeable k) => Event (OnAdd c) Source # | |
Defined in Mischief.ECS.Events Methods eraseEvent :: OnAdd c -> ErasedEvent Source # | |
| (Typeable c, Typeable k) => Event (OnAddRel c) Source # | |
Defined in Mischief.ECS.Events Methods eraseEvent :: OnAddRel c -> ErasedEvent Source # | |
| (Typeable c, Typeable k) => Event (OnRemove c) Source # | |
Defined in Mischief.ECS.Events Methods eraseEvent :: OnRemove c -> ErasedEvent Source # | |
| (Typeable c, Typeable k) => Event (OnRemoveRel c) Source # | |
Defined in Mischief.ECS.Events Methods eraseEvent :: OnRemoveRel c -> ErasedEvent Source # | |
| (Typeable c, Typeable k) => Event (OnSet c) Source # | |
Defined in Mischief.ECS.Events Methods eraseEvent :: OnSet c -> ErasedEvent Source # | |
| (Typeable c, Typeable k) => Event (OnSetRel c) Source # | |
Defined in Mischief.ECS.Events Methods eraseEvent :: OnSetRel c -> ErasedEvent Source # | |
A System is a monad that mutates the World.
It can be added to a certain schedule and ordered with other systems.
It also offers IO access via liftIO.
Read the tutorial on systems for more details.
Instances
| Applicative System Source # | |
| Functor System Source # | |
| Monad System Source # | |
| MonadFail System Source # | |
Defined in Mischief.ECS.World | |
| MonadIO System Source # | |
Defined in Mischief.ECS.World | |
| Defer System Source # | |
| PrimMonad System Source # | |
| EraseIntoStorage (System ()) Systems Source # | |
| EraseIntoStorage (System ()) [System ()] Source # | |
| type PrimState System Source # | |
Defined in Mischief.ECS.World | |
data TimePlugin Source #
Instances
| Plugin TimePlugin Source # | |
Defined in Mischief.ECS.Time | |
dep :: Plugin p => Dependency Source #
data Dependency Source #
Instances
| Show Dependency Source # | |
Defined in Mischief.ECS.App.Plugins Methods showsPrec :: Int -> Dependency -> ShowS # show :: Dependency -> String # showList :: [Dependency] -> ShowS # | |
| Eq Dependency Source # | |
Defined in Mischief.ECS.App.Plugins | |
| Ord Dependency Source # | |
Defined in Mischief.ECS.App.Plugins Methods compare :: Dependency -> Dependency -> Ordering # (<) :: Dependency -> Dependency -> Bool # (<=) :: Dependency -> Dependency -> Bool # (>) :: Dependency -> Dependency -> Bool # (>=) :: Dependency -> Dependency -> Bool # max :: Dependency -> Dependency -> Dependency # min :: Dependency -> Dependency -> Dependency # | |
class Typeable p => Plugin p where Source #
Minimal complete definition
Nothing
Instances
| Plugin TimePlugin Source # | |
Defined in Mischief.ECS.Time | |
data PostStartup Source #
Instances
| Schedule PostStartup Source # | |
Defined in Mischief.ECS.App.Schedules | |
data PostUpdate Source #
Instances
| Schedule PostUpdate Source # | |
Defined in Mischief.ECS.App.Schedules | |
data PreStartup Source #
Instances
| Schedule PreStartup Source # | |
Defined in Mischief.ECS.App.Schedules | |
after :: ToSystems a => a -> SystemConfig -> SystemConfig Source #
before :: ToSystems a => a -> SystemConfig -> SystemConfig Source #
order :: forall {k} (sc :: k) a b. (Schedule sc, ToSystems a, ToSystems b) => (a, b) -> System () Source #
systems :: ToSystems a => a -> SystemConfig Source #
module Mischief.ECS.Log
unwrap :: HasCallStack => Maybe a -> a Source #
data OnRemoveRel (c :: k) Source #
Constructors
| OnRemoveRel | |
Instances
| Show (OnRemoveRel c) Source # | |
Defined in Mischief.ECS.Events Methods showsPrec :: Int -> OnRemoveRel c -> ShowS # show :: OnRemoveRel c -> String # showList :: [OnRemoveRel c] -> ShowS # | |
| (Typeable c, Typeable k) => Event (OnRemoveRel c) Source # | |
Defined in Mischief.ECS.Events Methods eraseEvent :: OnRemoveRel c -> ErasedEvent Source # | |
newtype HookContext Source #
Constructors
| HookContext | |
data HookContextRel Source #
Constructors
| HookContextRel | |
module Mischief.ECS.Hooks
type Bundle b = Collectable b (BundleData ErasedComponent) Source #
type BundleEq b = Collectable b (BundleData ErasedComponentEq) Source #
Instances
| Typeable e => Component (Observer e) Source # | |||||
Defined in Mischief.ECS.Observer Associated Types
| |||||
| type IsExclusiveRel (Observer e) Source # | |||||
Defined in Mischief.ECS.Observer | |||||
(&) :: a -> (a -> b) -> b infixl 1 #
& is a reverse application operator. This provides notational
convenience. Its precedence is one higher than that of the forward
application operator $, which allows & to be nested in $.
This is a version of , where flip idid is specialized from a -> a to (a -> b) -> (a -> b)
which by the associativity of (->) is (a -> b) -> a -> b.
flipping this yields a -> (a -> b) -> b which is the type signature of &
Examples
>>>5 & (+1) & show"6"
>>>sqrt $ [1 / n^2 | n <- [1..1000]] & sum & (*6)3.1406380562059946
Since: base-4.8.0.0