Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- newtype Entity = Entity {}
- newtype SystemT w m a = SystemT {}
- type System w a = SystemT w IO a
- class Elem (Storage c) ~ c => Component c where
- type Storage c
- class (Monad m, Component c) => Has w m c where
- type family Elem s
- class ExplInit m s where
- explInit :: m s
- class Monad m => ExplGet m s where
- class Monad m => ExplSet m s where
- class Monad m => ExplDestroy m s where
- explDestroy :: s -> Int -> m ()
- class Monad m => ExplMembers m s where
- explMembers :: s -> m (Vector Int)
- type Get w m c = (Has w m c, ExplGet m (Storage c))
- type Set w m c = (Has w m c, ExplSet m (Storage c))
- type Members w m c = (Has w m c, ExplMembers m (Storage c))
- type Destroy w m c = (Has w m c, ExplDestroy m (Storage c))
Documentation
An Entity is just an integer, used to index into a component store.
In general, use newEntity
, cmap
, and component tags instead of manipulating these directly.
For performance reasons, negative values like (-1) are reserved for stores to represent special values, so avoid using these.
newtype SystemT w m a Source #
A SystemT is a newtype around `ReaderT w m a`, where w
is the game world variable.
Systems serve to
- Allow type-based lookup of a component's store through
getStore
. - Lift side effects into their host Monad.
Instances
Monad m => MonadReader w (SystemT w m) Source # | |
MonadTrans (SystemT w) Source # | |
Defined in Apecs.Core | |
Monad m => Monad (SystemT w m) Source # | |
Functor m => Functor (SystemT w m) Source # | |
Applicative m => Applicative (SystemT w m) Source # | |
Defined in Apecs.Core | |
MonadIO m => MonadIO (SystemT w m) Source # | |
Defined in Apecs.Core |
class Elem (Storage c) ~ c => Component c Source #
A component is defined by specifying how it is stored. The constraint ensures that stores and components are mapped one-to-one.
Instances
class (Monad m, Component c) => Has w m c where Source #
Has w m c
means that world w
can produce a Storage c
.
Instances
Monad m => Has w m Entity Source # | |
Monad m => Has w m () Source # | |
Has w m c => Has w m (Head c) Source # | |
Has w m c => Has w m (Redirect c) Source # | |
Has w m c => Has w m (Identity c) Source # | |
Has w m c => Has w m (Filter c) Source # | |
Has w m c => Has w m (Maybe c) Source # | |
Has w m c => Has w m (Not c) Source # | |
(Storage c ~ Pushdown s c, Has w m c) => Has w m (Stack c) Source # | |
(Has w m ca, Has w m cb) => Has w m (Either ca cb) Source # | |
(Has w m t_0, Has w m t_1) => Has w m (t_0, t_1) Source # | |
(Has w m t_0, Has w m t_1, Has w m t_2) => Has w m (t_0, t_1, t_2) Source # | |
(Has w m t_0, Has w m t_1, Has w m t_2, Has w m t_3) => Has w m (t_0, t_1, t_2, t_3) Source # | |
(Has w m t_0, Has w m t_1, Has w m t_2, Has w m t_3, Has w m t_4) => Has w m (t_0, t_1, t_2, t_3, t_4) Source # | |
(Has w m t_0, Has w m t_1, Has w m t_2, Has w m t_3, Has w m t_4, Has w m t_5) => Has w m (t_0, t_1, t_2, t_3, t_4, t_5) Source # | |
(Has w m t_0, Has w m t_1, Has w m t_2, Has w m t_3, Has w m t_4, Has w m t_5, Has w m t_6) => Has w m (t_0, t_1, t_2, t_3, t_4, t_5, t_6) Source # | |
(Has w m t_0, Has w m t_1, Has w m t_2, Has w m t_3, Has w m t_4, Has w m t_5, Has w m t_6, Has w m t_7) => Has w m (t_0, t_1, t_2, t_3, t_4, t_5, t_6, t_7) Source # | |
The type of components stored by a store, e.g. Elem (Map c) = c
.
Instances
class ExplInit m s where Source #
Indicates that the store s
can be initialized.
Generally, "base" stores like Map c
can be initialized, but composite stores like MaybeStore s
cannot.
Instances
(Functor m, ExplInit m s) => ExplInit m (ReadOnly s) Source # | |
Defined in Apecs.Stores | |
(Monoid c, MonadIO m) => ExplInit m (Global c) Source # | |
Defined in Apecs.Stores | |
MonadIO m => ExplInit m (Unique c) Source # | |
Defined in Apecs.Stores | |
MonadIO m => ExplInit m (Map c) Source # | |
Defined in Apecs.Stores | |
(MonadIO m, ExplInit m s, KnownNat n, Cachable s) => ExplInit m (Cache n s) Source # | |
Defined in Apecs.Stores | |
(Functor m, ExplInit m (s (Stack c))) => ExplInit m (Pushdown s c) Source # | |
Defined in Apecs.Experimental.Stores | |
(Reacts m r, ExplInit m s) => ExplInit m (Reactive r s) Source # | |
Defined in Apecs.Experimental.Reactive |
class Monad m => ExplGet m s where Source #
Stores that we can read using explGet
and explExists
.
For some entity e
, eplGet s e
is only guaranteed to be safe if explExists s e
returns True
.
explGet :: s -> Int -> m (Elem s) Source #
Reads a component from the store. What happens if the component does not exist is left undefined, and might not necessarily crash.
explExists :: s -> Int -> m Bool Source #
Returns whether there is a component for the given index.
Instances
class Monad m => ExplSet m s where Source #
Stores that can be written.
Instances
Monad m => ExplSet m () Source # | |
MonadIO m => ExplSet m (Global c) Source # | |
MonadIO m => ExplSet m (Unique c) Source # | |
MonadIO m => ExplSet m (Map c) Source # | |
ExplSet m s => ExplSet m (Identity s) Source # | |
(ExplDestroy m s, ExplSet m s) => ExplSet m (MaybeStore s) Source # | |
Defined in Apecs.Components explSet :: MaybeStore s -> Int -> Elem (MaybeStore s) -> m () Source # | |
ExplDestroy m s => ExplSet m (NotStore s) Source # | |
(MonadIO m, ExplSet m s) => ExplSet m (Cache n s) Source # | |
(ExplSet m sa, ExplSet m sb) => ExplSet m (EitherStore sa sb) Source # | |
Defined in Apecs.Components explSet :: EitherStore sa sb -> Int -> Elem (EitherStore sa sb) -> m () Source # | |
(ExplSet m t_0, ExplSet m t_1) => ExplSet m (t_0, t_1) Source # | |
(Monad m, ExplGet m (s (Stack c)), ExplSet m (s (Stack c)), Elem (s (Stack c)) ~ Stack c) => ExplSet m (Pushdown s c) Source # | |
(Reacts m r, ExplSet m s, ExplGet m s, Elem s ~ Elem r) => ExplSet m (Reactive r s) Source # | |
(ExplSet m t_0, ExplSet m t_1, ExplSet m t_2) => ExplSet m (t_0, t_1, t_2) Source # | |
(ExplSet m t_0, ExplSet m t_1, ExplSet m t_2, ExplSet m t_3) => ExplSet m (t_0, t_1, t_2, t_3) Source # | |
(ExplSet m t_0, ExplSet m t_1, ExplSet m t_2, ExplSet m t_3, ExplSet m t_4) => ExplSet m (t_0, t_1, t_2, t_3, t_4) Source # | |
(ExplSet m t_0, ExplSet m t_1, ExplSet m t_2, ExplSet m t_3, ExplSet m t_4, ExplSet m t_5) => ExplSet m (t_0, t_1, t_2, t_3, t_4, t_5) Source # | |
(ExplSet m t_0, ExplSet m t_1, ExplSet m t_2, ExplSet m t_3, ExplSet m t_4, ExplSet m t_5, ExplSet m t_6) => ExplSet m (t_0, t_1, t_2, t_3, t_4, t_5, t_6) Source # | |
(ExplSet m t_0, ExplSet m t_1, ExplSet m t_2, ExplSet m t_3, ExplSet m t_4, ExplSet m t_5, ExplSet m t_6, ExplSet m t_7) => ExplSet m (t_0, t_1, t_2, t_3, t_4, t_5, t_6, t_7) Source # | |
class Monad m => ExplDestroy m s where Source #
Stores that components can be removed from.
explDestroy :: s -> Int -> m () Source #
Destroys the component for a given index.
Instances
class Monad m => ExplMembers m s where Source #
Stores that we can request a list of member entities for.
explMembers :: s -> m (Vector Int) Source #
Returns an unboxed vector of member indices
Instances
ExplMembers m s => ExplMembers m (ReadOnly s) Source # | |
Defined in Apecs.Stores | |
MonadIO m => ExplMembers m (Unique c) Source # | |
Defined in Apecs.Stores | |
MonadIO m => ExplMembers m (Map c) Source # | |
Defined in Apecs.Stores | |
ExplMembers m s => ExplMembers m (Identity s) Source # | |
Defined in Apecs.Components | |
ExplMembers m s => ExplMembers m (FilterStore s) Source # | |
Defined in Apecs.Components explMembers :: FilterStore s -> m (Vector Int) Source # | |
(MonadIO m, ExplMembers m s) => ExplMembers m (Cache n s) Source # | |
Defined in Apecs.Stores | |
(ExplMembers m t_0, ExplGet m t_1) => ExplMembers m (t_0, t_1) Source # | |
Defined in Apecs.Components explMembers :: (t_0, t_1) -> m (Vector Int) Source # | |
(Monad m, ExplMembers m (s (Stack c)), Elem (s (Stack c)) ~ Stack c) => ExplMembers m (Pushdown s c) Source # | |
Defined in Apecs.Experimental.Stores | |
ExplMembers m s => ExplMembers m (Reactive r s) Source # | |
Defined in Apecs.Experimental.Reactive | |
(ExplMembers m t_0, ExplGet m t_1, ExplGet m t_2) => ExplMembers m (t_0, t_1, t_2) Source # | |
Defined in Apecs.Components explMembers :: (t_0, t_1, t_2) -> m (Vector Int) Source # | |
(ExplMembers m t_0, ExplGet m t_1, ExplGet m t_2, ExplGet m t_3) => ExplMembers m (t_0, t_1, t_2, t_3) Source # | |
Defined in Apecs.Components explMembers :: (t_0, t_1, t_2, t_3) -> m (Vector Int) Source # | |
(ExplMembers m t_0, ExplGet m t_1, ExplGet m t_2, ExplGet m t_3, ExplGet m t_4) => ExplMembers m (t_0, t_1, t_2, t_3, t_4) Source # | |
Defined in Apecs.Components explMembers :: (t_0, t_1, t_2, t_3, t_4) -> m (Vector Int) Source # | |
(ExplMembers m t_0, ExplGet m t_1, ExplGet m t_2, ExplGet m t_3, ExplGet m t_4, ExplGet m t_5) => ExplMembers m (t_0, t_1, t_2, t_3, t_4, t_5) Source # | |
Defined in Apecs.Components explMembers :: (t_0, t_1, t_2, t_3, t_4, t_5) -> m (Vector Int) Source # | |
(ExplMembers m t_0, ExplGet m t_1, ExplGet m t_2, ExplGet m t_3, ExplGet m t_4, ExplGet m t_5, ExplGet m t_6) => ExplMembers m (t_0, t_1, t_2, t_3, t_4, t_5, t_6) Source # | |
Defined in Apecs.Components explMembers :: (t_0, t_1, t_2, t_3, t_4, t_5, t_6) -> m (Vector Int) Source # | |
(ExplMembers m t_0, ExplGet m t_1, ExplGet m t_2, ExplGet m t_3, ExplGet m t_4, ExplGet m t_5, ExplGet m t_6, ExplGet m t_7) => ExplMembers m (t_0, t_1, t_2, t_3, t_4, t_5, t_6, t_7) Source # | |
Defined in Apecs.Components explMembers :: (t_0, t_1, t_2, t_3, t_4, t_5, t_6, t_7) -> m (Vector Int) Source # |