Safe Haskell | None |
---|---|
Language | Haskell2010 |
- 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, used to index into a component store.
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.
class Component c => Has w c where Source #
A world Has
a component if it can produce its Storage
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.
Initialize the store with its initialization arguments.
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
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
.
Pseudostore used to produce values of type Not a
NotStore s |
newtype MaybeStore s Source #
Pseudostore used to produce values of type Maybe a
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
EitherStore sp sq |
(Store sp, Store sq) => Store (EitherStore sp sq) Source # | |
type Elem (EitherStore sp sq) Source # | |
newtype FilterStore s Source #
Store s => Store (FilterStore s) Source # | |
type Elem (FilterStore s) Source # | |
data EntityStore Source #
Pseudostore used to produce components of type Entity
Store EntityStore Source # | |
type Elem EntityStore Source # | |