apecs-0.7.3: 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 #

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

Instances
type ReactElem (EnumMap c) # 
Instance details

Defined in Apecs.Reactive

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

Defined in Apecs.Reactive

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

Defined in Apecs.Reactive

type ReactElem (a, b) = ReactElem a

class Monad m => Reacts m r where #

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 #

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

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

Defined in Apecs.Reactive

Methods

rempty :: m (EnumMap c) #

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

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

Defined in Apecs.Reactive

Methods

rempty :: m (Printer c) #

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

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

Defined in Apecs.Reactive

Methods

rempty :: m (a, b) #

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

data Reactive r s #

Wrapper for reactivity around some store s.

Constructors

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

Defined in Apecs.Reactive

Methods

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

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

Defined in Apecs.Reactive

Methods

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

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

Defined in Apecs.Reactive

Methods

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

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

Defined in Apecs.Reactive

Methods

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

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

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

Defined in Apecs.Reactive

Methods

explInit :: m (Reactive r s) #

type Elem (Reactive r s) # 
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 #

Reads r from the game world.

data Printer c #

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

Constructors

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

Defined in Apecs.Reactive

Methods

rempty :: m (Printer c) #

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

type ReactElem (Printer c) # 
Instance details

Defined in Apecs.Reactive

type ReactElem (Printer c) = c

newtype EnumMap 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.

Constructors

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

Defined in Apecs.Reactive

Methods

rempty :: m (EnumMap c) #

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

type ReactElem (EnumMap c) # 
Instance details

Defined in Apecs.Reactive

type ReactElem (EnumMap c) = c

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