Safe Haskell | None |
---|---|
Language | Haskell2010 |
Apecs.Core
- newtype Entity = Entity Int
- newtype System w a = System {}
- class (Elem (Storage c) ~ c, Store (Storage c)) => Component c where
- type Storage c
- class Component c => Has w c where
- class Store s where
- type Elem s
- data Not a = Not
- newtype NotStore s = NotStore s
- newtype MaybeStore s = MaybeStore s
- data EitherStore sp sq = EitherStore sp sq
- data Filter c = Filter
- newtype FilterStore s = FilterStore s
- data EntityStore = EntityStore
Documentation
An Entity is really just an Int in a newtype.
A system is a newtype around `ReaderT w IO a`, where w
is the game world variable.
class (Elem (Storage c) ~ c, Store (Storage c)) => Component c Source #
A component is defined by the type of its storage The storage in turn supplies runtime types for the component. For the component to be valid, its Storage must be an instance of Store.
Instances
class Component c => Has w c where Source #
A world Has
a component if it can produce its Storage
Minimal complete definition
Instances
Has w Entity Source # | |
Has w c => Has w (Identity c) Source # | |
Has w c => Has w (Filter c) Source # | |
Has w c => Has w (Maybe c) Source # | |
Has w c => Has w (Not c) Source # | |
(Has w p, Has w q) => Has w (Either p q) Source # | |
(Has w t_0, Has w t_1) => Has w (t_0, t_1) Source # | |
(Has w t_0, Has w t_1, Has w t_2) => Has w (t_0, t_1, t_2) Source # | |
(Has w t_0, Has w t_1, Has w t_2, Has w t_3) => Has w (t_0, t_1, t_2, t_3) Source # | |
(Has w t_0, Has w t_1, Has w t_2, Has w t_3, Has w t_4) => Has w (t_0, t_1, t_2, t_3, t_4) Source # | |
(Has w t_0, Has w t_1, Has w t_2, Has w t_3, Has w t_4, Has w t_5) => Has w (t_0, t_1, t_2, t_3, t_4, t_5) Source # | |
(Has w t_0, Has w t_1, Has w t_2, Has w t_3, Has w t_4, Has w t_5, Has w t_6) => Has w (t_0, t_1, t_2, t_3, t_4, t_5, t_6) Source # | |
(Has w t_0, Has w t_1, Has w t_2, Has w t_3, Has w t_4, Has w t_5, Has w t_6, Has w t_7) => Has w (t_0, t_1, t_2, t_3, t_4, t_5, t_6, t_7) Source # | |
Holds components indexed by entities
Laws:
- For all entities in
exmplMembers s
,explExists s ety
must be true. - If for some entity
explExists s ety
,explGet s ety
should safely return a non-bottom value.
Minimal complete definition
Methods
explSet :: s -> Int -> Elem s -> IO () Source #
Writes a component
explGet :: s -> Int -> IO (Elem s) Source #
Reads a component from the store. What happens if the component does not exist is left undefined.
explDestroy :: s -> Int -> IO () Source #
Destroys the component for a given index.
explMembers :: s -> IO (Vector Int) Source #
Returns an unboxed vector of member indices
explExists :: s -> Int -> IO Bool Source #
Returns whether there is a component for the given index
Instances
Store EntityStore Source # | |
Store s => Store (Identity s) Source # | |
Store s => Store (FilterStore s) Source # | |
Store s => Store (MaybeStore s) Source # | |
Store s => Store (NotStore s) Source # | |
Monoid c => Store (Global c) Source # | |
Store (Unique c) Source # | |
Store (Map c) Source # | |
(Store t_0, Store t_1) => Store (t_0, t_1) Source # | |
(Store sp, Store sq) => Store (EitherStore sp sq) Source # | |
(KnownNat n, Cachable s) => Store (Cache n s) Source # | |
(Store t_0, Store t_1, Store t_2) => Store (t_0, t_1, t_2) Source # | |
(Store t_0, Store t_1, Store t_2, Store t_3) => Store (t_0, t_1, t_2, t_3) Source # | |
(Store t_0, Store t_1, Store t_2, Store t_3, Store t_4) => Store (t_0, t_1, t_2, t_3, t_4) Source # | |
(Store t_0, Store t_1, Store t_2, Store t_3, Store t_4, Store t_5) => Store (t_0, t_1, t_2, t_3, t_4, t_5) Source # | |
(Store t_0, Store t_1, Store t_2, Store t_3, Store t_4, Store t_5, Store t_6) => Store (t_0, t_1, t_2, t_3, t_4, t_5, t_6) Source # | |
(Store t_0, Store t_1, Store t_2, Store t_3, Store t_4, Store t_5, Store t_6, Store t_7) => Store (t_0, t_1, t_2, t_3, t_4, t_5, t_6, t_7) Source # | |
Psuedocomponent indicating the absence of a
.
Constructors
Not |
Pseudostore used to produce values of type Not a
Constructors
NotStore s |
newtype MaybeStore s Source #
Pseudostore used to produce values of type Maybe a
Constructors
MaybeStore s |
Instances
Store s => Store (MaybeStore s) Source # | |
type Elem (MaybeStore s) Source # | |
data EitherStore sp sq Source #
Pseudostore used to produce values of type Either p q
Constructors
EitherStore sp sq |
Instances
(Store sp, Store sq) => Store (EitherStore sp sq) Source # | |
type Elem (EitherStore sp sq) Source # | |
Constructors
Filter |
newtype FilterStore s Source #
Constructors
FilterStore s |
Instances
Store s => Store (FilterStore s) Source # | |
type Elem (FilterStore s) Source # | |
data EntityStore Source #
Pseudostore used to produce components of type Entity
Constructors
EntityStore |
Instances
Store EntityStore Source # | |
type Elem EntityStore Source # | |