Safe Haskell | None |
---|---|
Language | Haskell2010 |
- newtype Entity = Entity {}
- newtype System w a = System {}
- class Elem (Storage c) ~ c => Component c where
- type Storage c
- class Component c => Has w c where
- type family Elem s
- class ExplInit s where
- class ExplGet s where
- class ExplSet s where
- class ExplDestroy s where
- class ExplMembers s where
- type Get w c = (Has w c, ExplGet (Storage c))
- type Set w c = (Has w c, ExplSet (Storage c))
- type Members w c = (Has w c, ExplMembers (Storage c))
- type Destroy w c = (Has w c, ExplDestroy (Storage c))
- data Not a = Not
- newtype NotStore s = NotStore s
- newtype MaybeStore s = MaybeStore s
- data Filter c = Filter
- newtype FilterStore s = FilterStore s
- data EntityStore = EntityStore
Documentation
An Entity is just an integer, 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 => 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 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 # | |
The type of components stored by a Store
type Elem EntityStore Source # | |
type Elem (Identity s) Source # | |
type Elem (FilterStore s) Source # | |
type Elem (MaybeStore s) Source # | |
type Elem (NotStore s) Source # | |
type Elem (Global c) Source # | |
type Elem (Unique c) Source # | |
type Elem (Map c) Source # | |
type Elem (t_0, t_1) Source # | |
type Elem (Cache n s) Source # | |
type Elem (t_0, t_1, t_2) Source # | |
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 ExplGet s where Source #
Stores that support get
and exists
in the IO monad
If existsIO
explGet :: s -> Int -> IO (Elem s) Source #
Reads a component from the store. What happens if the component does not exist is left undefined.
explExists :: s -> Int -> IO Bool Source #
Returns whether there is a component for the given index
class ExplSet s where Source #
class ExplDestroy s where Source #
explDestroy :: s -> Int -> IO () Source #
Destroys the component for a given index.
class ExplMembers s where 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
(ExplDestroy s, ExplSet s) => ExplSet (MaybeStore s) Source # | |
ExplGet s => ExplGet (MaybeStore s) Source # | |
type Elem (MaybeStore s) Source # | |
newtype FilterStore s Source #
ExplGet s => ExplGet (FilterStore s) Source # | |
type Elem (FilterStore s) Source # | |
data EntityStore Source #
Pseudostore used to produce components of type Entity
ExplGet EntityStore Source # | |
type Elem EntityStore Source # | |