apecs-0.9.3: Fast Entity-Component-System library for game programming
Safe HaskellNone
LanguageHaskell2010

Apecs.Stores

Synopsis

Documentation

data Map c Source #

A map based on Strict. O(log(n)) for most operations.

Instances

Instances details
MonadIO m => ExplMembers m (Map c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explMembers :: Map c -> m (Vector Int) Source #

MonadIO m => ExplDestroy m (Map c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explDestroy :: Map c -> Int -> m () Source #

MonadIO m => ExplSet m (Map c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explSet :: Map c -> Int -> Elem (Map c) -> m () Source #

(MonadIO m, Typeable c) => ExplGet m (Map c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explGet :: Map c -> Int -> m (Elem (Map c)) Source #

explExists :: Map c -> Int -> m Bool Source #

MonadIO m => ExplInit m (Map c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explInit :: m (Map c) Source #

Cachable (Map s) Source # 
Instance details

Defined in Apecs.Stores

type Elem (Map c) Source # 
Instance details

Defined in Apecs.Stores

type Elem (Map c) = c

data Cache (n :: Nat) s Source #

A cache around another store. Caches store their members in a fixed-size vector, so read/write operations become O(1). Caches can provide huge performance boosts, especially when working with large numbers of components.

The cache size is given as a type-level argument.

Note that iterating over a cache is linear in cache size, so sparsely populated caches might decrease performance. In general, the exact size of the cache does not matter as long as it reasonably approximates the number of components present.

The cache uses entity (-2) internally to represent missing entities. If you manually manipulate Entity values, be careful that you do not use (-2)

The actual cache is not necessarily the given argument, but the next biggest power of two. This is allows most operations to be expressed as bit masks, for a large potential performance boost.

Instances

Instances details
(MonadIO m, ExplMembers m s) => ExplMembers m (Cache n s) Source # 
Instance details

Defined in Apecs.Stores

Methods

explMembers :: Cache n s -> m (Vector Int) Source #

(MonadIO m, ExplDestroy m s) => ExplDestroy m (Cache n s) Source # 
Instance details

Defined in Apecs.Stores

Methods

explDestroy :: Cache n s -> Int -> m () Source #

(MonadIO m, ExplSet m s) => ExplSet m (Cache n s) Source # 
Instance details

Defined in Apecs.Stores

Methods

explSet :: Cache n s -> Int -> Elem (Cache n s) -> m () Source #

(MonadIO m, ExplGet m s) => ExplGet m (Cache n s) Source # 
Instance details

Defined in Apecs.Stores

Methods

explGet :: Cache n s -> Int -> m (Elem (Cache n s)) Source #

explExists :: Cache n s -> Int -> m Bool Source #

(MonadIO m, ExplInit m s, KnownNat n, Cachable s) => ExplInit m (Cache n s) Source # 
Instance details

Defined in Apecs.Stores

Methods

explInit :: m (Cache n s) Source #

(KnownNat n, Cachable s) => Cachable (Cache n s) Source # 
Instance details

Defined in Apecs.Stores

type Elem (Cache n s) Source # 
Instance details

Defined in Apecs.Stores

type Elem (Cache n s) = Elem s

data Unique c Source #

A Unique contains zero or one component. Writing to it overwrites both the previous component and its owner. Its main purpose is to be a Map optimized for when only ever one component inhabits it.

Instances

Instances details
MonadIO m => ExplMembers m (Unique c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explMembers :: Unique c -> m (Vector Int) Source #

MonadIO m => ExplDestroy m (Unique c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explDestroy :: Unique c -> Int -> m () Source #

MonadIO m => ExplSet m (Unique c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explSet :: Unique c -> Int -> Elem (Unique c) -> m () Source #

(MonadIO m, Typeable c) => ExplGet m (Unique c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explGet :: Unique c -> Int -> m (Elem (Unique c)) Source #

explExists :: Unique c -> Int -> m Bool Source #

MonadIO m => ExplInit m (Unique c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explInit :: m (Unique c) Source #

type Elem (Unique c) Source # 
Instance details

Defined in Apecs.Stores

type Elem (Unique c) = c

data Global c Source #

A Global contains exactly one component. The initial value is mempty from the component's Monoid instance. Querying a Global at any Entity yields this one component, effectively sharing the component between all entities.

A Global component can be read with get 0 or get 1 or even get undefined. The convenience entity global is defined as -1, and can be used to make operations on a global more explicit, i.e. 'Time t <- get global'.

You also can read and write Globals during a cmap over other components.

Instances

Instances details
MonadIO m => ExplSet m (Global c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explSet :: Global c -> Int -> Elem (Global c) -> m () Source #

MonadIO m => ExplGet m (Global c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explGet :: Global c -> Int -> m (Elem (Global c)) Source #

explExists :: Global c -> Int -> m Bool Source #

(Monoid c, MonadIO m) => ExplInit m (Global c) Source # 
Instance details

Defined in Apecs.Stores

Methods

explInit :: m (Global c) Source #

type Elem (Global c) Source # 
Instance details

Defined in Apecs.Stores

type Elem (Global c) = c

class Cachable s Source #

Class of stores that behave like a regular map, and can therefore safely be cached. This prevents stores like Unique and Global, which do not behave like simple maps, from being cached.

Instances

Instances details
Cachable (Map s) Source # 
Instance details

Defined in Apecs.Stores

(KnownNat n, Cachable s) => Cachable (Cache n s) Source # 
Instance details

Defined in Apecs.Stores

data ReadOnly s Source #

Wrapper that makes a store read-only by hiding its ExplSet and ExplDestroy instances. This is primarily used to protect the EntityCounter from accidental overwrites. Use setReadOnly and destroyReadOnly to override.

Instances

Instances details
ExplMembers m s => ExplMembers m (ReadOnly s) Source # 
Instance details

Defined in Apecs.Stores

Methods

explMembers :: ReadOnly s -> m (Vector Int) Source #

ExplGet m s => ExplGet m (ReadOnly s) Source # 
Instance details

Defined in Apecs.Stores

Methods

explGet :: ReadOnly s -> Int -> m (Elem (ReadOnly s)) Source #

explExists :: ReadOnly s -> Int -> m Bool Source #

(Functor m, ExplInit m s) => ExplInit m (ReadOnly s) Source # 
Instance details

Defined in Apecs.Stores

Methods

explInit :: m (ReadOnly s) Source #

type Elem (ReadOnly s) Source # 
Instance details

Defined in Apecs.Stores

type Elem (ReadOnly s) = Elem s

setReadOnly :: forall w m s c. (Has w m c, Storage c ~ ReadOnly s, Elem s ~ c, ExplSet m s) => Entity -> c -> SystemT w m () Source #

destroyReadOnly :: forall w m s c. (Has w m c, Storage c ~ ReadOnly s, Elem s ~ c, ExplDestroy m s) => Entity -> Proxy c -> SystemT w m () Source #