apecs-0.7.2: Fast Entity-Component-System library for game programming

Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

Apecs.Reactive

Description

Reactive stores module, still experimental. Adds the Reactive r s store, which when wrapped around store s, will call the react on its r.

Show c => Reactive (Printer c) (Map c) will print a message every time a c value is set.

Enum c => Reactive (EnumMap c) (Map c) allows you to look up entities by component value. Use e.g. rget >>= mapLookup True to retrieve a list of entities that have a True component.

Synopsis

Documentation

type family ReactElem r Source #

Analogous to Elem, but for Reacts instances. For a Reactive r s to be valid, ReactElem r = Elem s

Instances
type ReactElem (EnumMap c) Source # 
Instance details

Defined in Apecs.Reactive

type ReactElem (EnumMap c) = c
type ReactElem (Printer c) Source # 
Instance details

Defined in Apecs.Reactive

type ReactElem (Printer c) = c
type ReactElem (a, b) Source # 
Instance details

Defined in Apecs.Reactive

type ReactElem (a, b) = ReactElem a

class Monad m => Reacts m r where Source #

Class required by Reactive. Given some r and update information about some component, will run a side-effect in monad m. Note that there are also instances for (,).

Methods

rempty :: m r Source #

react :: Entity -> Maybe (ReactElem r) -> Maybe (ReactElem r) -> r -> m () Source #

Instances
(MonadIO m, Enum c) => Reacts m (EnumMap c) Source # 
Instance details

Defined in Apecs.Reactive

Methods

rempty :: m (EnumMap c) Source #

react :: Entity -> Maybe (ReactElem (EnumMap c)) -> Maybe (ReactElem (EnumMap c)) -> EnumMap c -> m () Source #

(MonadIO m, Show c) => Reacts m (Printer c) Source # 
Instance details

Defined in Apecs.Reactive

Methods

rempty :: m (Printer c) Source #

react :: Entity -> Maybe (ReactElem (Printer c)) -> Maybe (ReactElem (Printer c)) -> Printer c -> m () Source #

(ReactElem a ~ ReactElem b, Reacts m a, Reacts m b) => Reacts m (a, b) Source # 
Instance details

Defined in Apecs.Reactive

Methods

rempty :: m (a, b) Source #

react :: Entity -> Maybe (ReactElem (a, b)) -> Maybe (ReactElem (a, b)) -> (a, b) -> m () Source #

data Reactive r s Source #

Wrapper for reactivity around some store s.

Constructors

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

Defined in Apecs.Reactive

Methods

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

(Reacts m r, ExplDestroy m s, ExplGet m s, Elem s ~ ReactElem r) => ExplDestroy m (Reactive r s) Source # 
Instance details

Defined in Apecs.Reactive

Methods

explDestroy :: Reactive r s -> Int -> m () Source #

(Reacts m r, ExplSet m s, ExplGet m s, Elem s ~ ReactElem r) => ExplSet m (Reactive r s) Source # 
Instance details

Defined in Apecs.Reactive

Methods

explSet :: Reactive r s -> Int -> Elem (Reactive r s) -> m () Source #

ExplGet m s => ExplGet m (Reactive r s) Source # 
Instance details

Defined in Apecs.Reactive

Methods

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

explExists :: Reactive r s -> Int -> m Bool Source #

(Reacts m r, ExplInit m s) => ExplInit m (Reactive r s) Source # 
Instance details

Defined in Apecs.Reactive

Methods

explInit :: m (Reactive r s) Source #

type Elem (Reactive r s) Source # 
Instance details

Defined in Apecs.Reactive

type Elem (Reactive r s) = Elem s

rget :: forall w m r s. (Component (ReactElem r), Has w m (ReactElem r), Storage (ReactElem r) ~ Reactive r s) => SystemT w m r Source #

Reads r from the game world.

data Printer c Source #

Prints a message to stdout every time a component is updated.

Constructors

Printer 
Instances
(MonadIO m, Show c) => Reacts m (Printer c) Source # 
Instance details

Defined in Apecs.Reactive

Methods

rempty :: m (Printer c) Source #

react :: Entity -> Maybe (ReactElem (Printer c)) -> Maybe (ReactElem (Printer c)) -> Printer c -> m () Source #

type ReactElem (Printer c) Source # 
Instance details

Defined in Apecs.Reactive

type ReactElem (Printer c) = c

newtype EnumMap c Source #

Allows you to look up entities by component value. Use e.g. rget >>= mapLookup True to retrieve a list of entities that have a True component.

Constructors

EnumMap (IORef (IntMap IntSet)) 
Instances
(MonadIO m, Enum c) => Reacts m (EnumMap c) Source # 
Instance details

Defined in Apecs.Reactive

Methods

rempty :: m (EnumMap c) Source #

react :: Entity -> Maybe (ReactElem (EnumMap c)) -> Maybe (ReactElem (EnumMap c)) -> EnumMap c -> m () Source #

type ReactElem (EnumMap c) Source # 
Instance details

Defined in Apecs.Reactive

type ReactElem (EnumMap c) = c

mapLookup :: Enum c => EnumMap c -> c -> System w [Entity] Source #