Safe Haskell | None |
---|---|
Language | Haskell2010 |
Apecs.Core
Synopsis
- newtype Entity = Entity {}
- newtype SystemT w (m :: Type -> Type) 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 :: Type -> Type) c where
- type family Elem s
- class ExplInit (m :: Type -> Type) s where
- explInit :: m s
- class Monad m => ExplGet (m :: Type -> Type) s where
- class Monad m => ExplSet (m :: Type -> Type) s where
- class Monad m => ExplDestroy (m :: Type -> Type) s where
- explDestroy :: s -> Int -> m ()
- class Monad m => ExplMembers (m :: Type -> Type) s where
- explMembers :: s -> m (Vector Int)
- type Get w (m :: Type -> Type) c = (Has w m c, ExplGet m (Storage c))
- type Set w (m :: Type -> Type) c = (Has w m c, ExplSet m (Storage c))
- type Members w (m :: Type -> Type) c = (Has w m c, ExplMembers m (Storage c))
- type Destroy w (m :: Type -> Type) 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.
Instances
Component Entity Source # | |||||
Defined in Apecs.Components Associated Types
| |||||
Enum Entity Source # | |||||
Defined in Apecs.Core | |||||
Num Entity Source # | |||||
Show Entity Source # | |||||
Eq Entity Source # | |||||
Ord Entity Source # | |||||
Monad m => Has w m Entity Source # | |||||
type Storage Entity Source # | |||||
Defined in Apecs.Components |
newtype SystemT w (m :: Type -> Type) 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
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 :: Type -> Type) c where Source #
Has w m c
means that world w
can produce a Storage c
.
It is parameterized over m
to allow stores to be foreign.
Instances
Monad m => Has w m Entity Source # | |
Monad m => Has w m () Source # | |
Has w m c => Has w m (Filter c) Source # | |
Has w m c => Has w m (Not c) Source # | |
(MonadIO m, Component c, Has w m (Child c)) => Has w m (ChildList c) Source # | |
(MonadIO m, Component c, Has w m (Child c)) => Has w m (ChildValue c) Source # | |
Defined in Apecs.Experimental.Children | |
Has w m c => Has w m (Head c) Source # | |
Has w m c => Has w m (Redirect c) Source # | |
(Storage c ~ Pushdown s c, Has w m c) => Has w m (Stack c) Source # | |
Has w m c => Has w m (Identity c) Source # | |
Has w m c => Has w m (Maybe 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
type Elem EntityStore Source # | |
Defined in Apecs.Components | |
type Elem () Source # | |
Defined in Apecs.Components type Elem () = () | |
type Elem (FilterStore s) Source # | |
Defined in Apecs.Components | |
type Elem (MaybeStore s) Source # | |
Defined in Apecs.Components | |
type Elem (NotStore s) Source # | |
Defined in Apecs.Components | |
type Elem (ComponentCounter c) Source # | |
Defined in Apecs.Experimental.Reactive | |
type Elem (EnumMap c) Source # | |
Defined in Apecs.Experimental.Reactive | |
type Elem (IxMap c) Source # | |
Defined in Apecs.Experimental.Reactive | |
type Elem (OrdMap c) Source # | |
Defined in Apecs.Experimental.Reactive | |
type Elem (Printer c) Source # | |
Defined in Apecs.Experimental.Reactive | |
type Elem (Global c) Source # | |
Defined in Apecs.Stores | |
type Elem (Map c) Source # | |
Defined in Apecs.Stores | |
type Elem (ReadOnly s) Source # | |
Defined in Apecs.Stores | |
type Elem (Unique c) Source # | |
Defined in Apecs.Stores | |
type Elem (Identity s) Source # | |
Defined in Apecs.Components | |
type Elem (EitherStore sa sb) Source # | |
Defined in Apecs.Components | |
type Elem (Reactive r s) Source # | |
Defined in Apecs.Experimental.Reactive | |
type Elem (Pushdown s c) Source # | |
Defined in Apecs.Experimental.Stores | |
type Elem (Cache n s) Source # | |
Defined in Apecs.Stores | |
type Elem (t_0, t_1) Source # | |
Defined in Apecs.Components | |
type Elem (t_0, t_1, t_2) Source # | |
Defined in Apecs.Components | |
type Elem (t_0, t_1, t_2, t_3) Source # | |
type Elem (t_0, t_1, t_2, t_3, t_4) Source # | |
type Elem (t_0, t_1, t_2, t_3, t_4, t_5) Source # | |
type Elem (t_0, t_1, t_2, t_3, t_4, t_5, t_6) Source # | |
type Elem (t_0, t_1, t_2, t_3, t_4, t_5, t_6, t_7) Source # | |
class ExplInit (m :: Type -> Type) 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
(Monoid c, MonadIO m) => ExplInit m (Global c) Source # | |
Defined in Apecs.Stores | |
MonadIO m => ExplInit m (Map c) Source # | |
Defined in Apecs.Stores | |
(Functor m, ExplInit m s) => ExplInit m (ReadOnly s) Source # | |
Defined in Apecs.Stores | |
MonadIO m => ExplInit m (Unique c) Source # | |
Defined in Apecs.Stores | |
(Reacts m r, ExplInit m s) => ExplInit m (Reactive r s) Source # | |
Defined in Apecs.Experimental.Reactive | |
(Functor m, ExplInit m (s (Stack c))) => ExplInit m (Pushdown s c) Source # | |
Defined in Apecs.Experimental.Stores | |
(MonadIO m, ExplInit m s, KnownNat n, Cachable s) => ExplInit m (Cache n s) Source # | |
Defined in Apecs.Stores |
class Monad m => ExplGet (m :: Type -> Type) 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
.
Methods
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
Monad m => ExplGet m EntityStore Source # | |
Defined in Apecs.Components Methods explGet :: EntityStore -> Int -> m (Elem EntityStore) Source # explExists :: EntityStore -> Int -> m Bool Source # | |
Monad m => ExplGet m () Source # | |
ExplGet m s => ExplGet m (FilterStore s) Source # | |
Defined in Apecs.Components Methods explGet :: FilterStore s -> Int -> m (Elem (FilterStore s)) Source # explExists :: FilterStore s -> Int -> m Bool Source # | |
ExplGet m s => ExplGet m (MaybeStore s) Source # | |
Defined in Apecs.Components Methods explGet :: MaybeStore s -> Int -> m (Elem (MaybeStore s)) Source # explExists :: MaybeStore s -> Int -> m Bool Source # | |
ExplGet m s => ExplGet m (NotStore s) Source # | |
MonadIO m => ExplGet m (Global c) Source # | |
(MonadIO m, Typeable c) => ExplGet m (Map c) Source # | |
ExplGet m s => ExplGet m (ReadOnly s) Source # | |
(MonadIO m, Typeable c) => ExplGet m (Unique c) Source # | |
ExplGet m s => ExplGet m (Identity s) Source # | |
(ExplGet m sa, ExplGet m sb) => ExplGet m (EitherStore sa sb) Source # | |
Defined in Apecs.Components Methods explGet :: EitherStore sa sb -> Int -> m (Elem (EitherStore sa sb)) Source # explExists :: EitherStore sa sb -> Int -> m Bool Source # | |
ExplGet m s => ExplGet m (Reactive r s) Source # | |
(Monad m, ExplGet m (s (Stack c)), Elem (s (Stack c)) ~ Stack c) => ExplGet m (Pushdown s c) Source # | |
(MonadIO m, ExplGet m s) => ExplGet m (Cache n s) Source # | |
(ExplGet m t_0, ExplGet m t_1) => ExplGet m (t_0, t_1) Source # | |
(ExplGet m t_0, ExplGet m t_1, ExplGet m t_2) => ExplGet m (t_0, t_1, t_2) Source # | |
(ExplGet m t_0, ExplGet m t_1, ExplGet m t_2, ExplGet m t_3) => ExplGet m (t_0, t_1, t_2, t_3) Source # | |
(ExplGet m t_0, ExplGet m t_1, ExplGet m t_2, ExplGet m t_3, ExplGet m t_4) => ExplGet m (t_0, t_1, t_2, t_3, t_4) Source # | |
(ExplGet 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_0, t_1, t_2, t_3, t_4, t_5) Source # | |
(ExplGet 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_0, t_1, t_2, t_3, t_4, t_5, t_6) Source # | |
(ExplGet 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) => ExplGet m (t_0, t_1, t_2, t_3, t_4, t_5, t_6, t_7) Source # | |
class Monad m => ExplSet (m :: Type -> Type) s where Source #
Stores that can be written.
Instances
Monad m => ExplSet m () Source # | |
(ExplDestroy m s, ExplSet m s) => ExplSet m (MaybeStore s) Source # | |
Defined in Apecs.Components Methods explSet :: MaybeStore s -> Int -> Elem (MaybeStore s) -> m () Source # | |
ExplDestroy m s => ExplSet m (NotStore s) Source # | |
MonadIO m => ExplSet m (Global c) Source # | |
MonadIO m => ExplSet m (Map c) Source # | |
MonadIO m => ExplSet m (Unique c) Source # | |
ExplSet m s => ExplSet m (Identity s) Source # | |
(ExplSet m sa, ExplSet m sb) => ExplSet m (EitherStore sa sb) Source # | |
Defined in Apecs.Components Methods explSet :: EitherStore sa sb -> Int -> Elem (EitherStore sa sb) -> m () Source # | |
(Reacts m r, ExplSet m s, ExplGet m s, Elem s ~ Elem r) => ExplSet m (Reactive r s) 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 # | |
(MonadIO m, ExplSet m s) => ExplSet m (Cache n s) Source # | |
(ExplSet m t_0, ExplSet m t_1) => ExplSet m (t_0, t_1) 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 :: Type -> Type) s where Source #
Stores that components can be removed from.
Instances
Monad m => ExplDestroy m () Source # | |
Defined in Apecs.Components Methods explDestroy :: () -> Int -> m () Source # | |
MonadIO m => ExplDestroy m (Map c) Source # | |
Defined in Apecs.Stores Methods explDestroy :: Map c -> Int -> m () Source # | |
MonadIO m => ExplDestroy m (Unique c) Source # | |
Defined in Apecs.Stores Methods explDestroy :: Unique c -> Int -> m () Source # | |
ExplDestroy m s => ExplDestroy m (Identity s) Source # | |
Defined in Apecs.Components Methods explDestroy :: Identity s -> Int -> m () Source # | |
(ExplDestroy m sa, ExplDestroy m sb) => ExplDestroy m (EitherStore sa sb) Source # | |
Defined in Apecs.Components Methods explDestroy :: EitherStore sa sb -> Int -> m () Source # | |
(Reacts m r, ExplDestroy m s, ExplGet m s, Elem s ~ Elem r) => ExplDestroy m (Reactive r s) Source # | |
Defined in Apecs.Experimental.Reactive Methods explDestroy :: Reactive r s -> Int -> m () Source # | |
(Monad m, ExplGet m (s (Stack c)), ExplSet m (s (Stack c)), ExplDestroy m (s (Stack c)), Elem (s (Stack c)) ~ Stack c) => ExplDestroy m (Pushdown s c) Source # | |
Defined in Apecs.Experimental.Stores Methods explDestroy :: Pushdown s c -> Int -> m () Source # | |
(MonadIO m, ExplDestroy m s) => ExplDestroy m (Cache n s) Source # | |
Defined in Apecs.Stores Methods explDestroy :: Cache n s -> Int -> m () Source # | |
(ExplDestroy m t_0, ExplDestroy m t_1) => ExplDestroy m (t_0, t_1) Source # | |
Defined in Apecs.Components Methods explDestroy :: (t_0, t_1) -> Int -> m () Source # | |
(ExplDestroy m t_0, ExplDestroy m t_1, ExplDestroy m t_2) => ExplDestroy m (t_0, t_1, t_2) Source # | |
Defined in Apecs.Components Methods explDestroy :: (t_0, t_1, t_2) -> Int -> m () Source # | |
(ExplDestroy m t_0, ExplDestroy m t_1, ExplDestroy m t_2, ExplDestroy m t_3) => ExplDestroy m (t_0, t_1, t_2, t_3) Source # | |
Defined in Apecs.Components Methods explDestroy :: (t_0, t_1, t_2, t_3) -> Int -> m () Source # | |
(ExplDestroy m t_0, ExplDestroy m t_1, ExplDestroy m t_2, ExplDestroy m t_3, ExplDestroy m t_4) => ExplDestroy m (t_0, t_1, t_2, t_3, t_4) Source # | |
Defined in Apecs.Components Methods explDestroy :: (t_0, t_1, t_2, t_3, t_4) -> Int -> m () Source # | |
(ExplDestroy m t_0, ExplDestroy m t_1, ExplDestroy m t_2, ExplDestroy m t_3, ExplDestroy m t_4, ExplDestroy m t_5) => ExplDestroy m (t_0, t_1, t_2, t_3, t_4, t_5) Source # | |
Defined in Apecs.Components Methods explDestroy :: (t_0, t_1, t_2, t_3, t_4, t_5) -> Int -> m () Source # | |
(ExplDestroy m t_0, ExplDestroy m t_1, ExplDestroy m t_2, ExplDestroy m t_3, ExplDestroy m t_4, ExplDestroy m t_5, ExplDestroy m t_6) => ExplDestroy m (t_0, t_1, t_2, t_3, t_4, t_5, t_6) Source # | |
Defined in Apecs.Components Methods explDestroy :: (t_0, t_1, t_2, t_3, t_4, t_5, t_6) -> Int -> m () Source # | |
(ExplDestroy m t_0, ExplDestroy m t_1, ExplDestroy m t_2, ExplDestroy m t_3, ExplDestroy m t_4, ExplDestroy m t_5, ExplDestroy m t_6, ExplDestroy m t_7) => ExplDestroy m (t_0, t_1, t_2, t_3, t_4, t_5, t_6, t_7) Source # | |
Defined in Apecs.Components Methods explDestroy :: (t_0, t_1, t_2, t_3, t_4, t_5, t_6, t_7) -> Int -> m () Source # |
class Monad m => ExplMembers (m :: Type -> Type) s where Source #
Stores that we can request a list of member entities for.
Instances
ExplMembers m s => ExplMembers m (FilterStore s) Source # | |
Defined in Apecs.Components Methods explMembers :: FilterStore s -> m (Vector Int) Source # | |
MonadIO m => ExplMembers m (Map c) Source # | |
Defined in Apecs.Stores Methods explMembers :: Map c -> m (Vector Int) Source # | |
ExplMembers m s => ExplMembers m (ReadOnly s) Source # | |
Defined in Apecs.Stores Methods explMembers :: ReadOnly s -> m (Vector Int) Source # | |
MonadIO m => ExplMembers m (Unique c) Source # | |
Defined in Apecs.Stores Methods explMembers :: Unique c -> m (Vector Int) Source # | |
ExplMembers m s => ExplMembers m (Identity s) Source # | |
Defined in Apecs.Components Methods explMembers :: Identity s -> m (Vector Int) Source # | |
ExplMembers m s => ExplMembers m (Reactive r s) Source # | |
Defined in Apecs.Experimental.Reactive Methods explMembers :: Reactive r s -> 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 Methods explMembers :: Pushdown s c -> m (Vector Int) Source # | |
(MonadIO m, ExplMembers m s) => ExplMembers m (Cache n s) Source # | |
Defined in Apecs.Stores Methods explMembers :: Cache n s -> m (Vector Int) Source # | |
(ExplMembers m t_0, ExplGet m t_1) => ExplMembers m (t_0, t_1) Source # | |
Defined in Apecs.Components Methods explMembers :: (t_0, t_1) -> m (Vector Int) Source # | |
(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 Methods 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 Methods 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 Methods 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 Methods 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 Methods 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 Methods explMembers :: (t_0, t_1, t_2, t_3, t_4, t_5, t_6, t_7) -> m (Vector Int) Source # |