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

Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

Apecs.Experimental.Reactive

Description

This module is experimental, and its API might change between point releases. Use at your own risk.

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

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 (Elem r) -> Maybe (Elem r) -> r -> m () Source #

Instances
(MonadIO m, Ix c, Bounded c) => Reacts m (IxMap c) Source # 
Instance details

Defined in Apecs.Experimental.Reactive

Methods

rempty :: m (IxMap c) Source #

react :: Entity -> Maybe (Elem (IxMap c)) -> Maybe (Elem (IxMap c)) -> IxMap c -> m () Source #

(MonadIO m, Ord c) => Reacts m (OrdMap c) Source # 
Instance details

Defined in Apecs.Experimental.Reactive

Methods

rempty :: m (OrdMap c) Source #

react :: Entity -> Maybe (Elem (OrdMap c)) -> Maybe (Elem (OrdMap c)) -> OrdMap c -> m () Source #

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

Defined in Apecs.Experimental.Reactive

Methods

rempty :: m (EnumMap c) Source #

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

data Reactive r s Source #

Wrapper for reactivity around some store s.

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

Defined in Apecs.Experimental.Reactive

Methods

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

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

Defined in Apecs.Experimental.Reactive

Methods

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

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

Defined in Apecs.Experimental.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.Experimental.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.Experimental.Reactive

Methods

explInit :: m (Reactive r s) Source #

type Elem (Reactive r s) Source # 
Instance details

Defined in Apecs.Experimental.Reactive

type Elem (Reactive r s) = Elem s

withReactive :: forall w m r s a. (Component (Elem r), Has w m (Elem r), Storage (Elem r) ~ Reactive r s) => (r -> m a) -> SystemT w m a Source #

Performs an action with a reactive state token.

data EnumMap c Source #

Allows you to look up entities by component value. Use e.g. withReactive $ mapLookup True to retrieve a list of entities that have a True component. Based on an IntMap IntSet internally.

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

Defined in Apecs.Experimental.Reactive

Methods

rempty :: m (EnumMap c) Source #

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

type Elem (EnumMap c) Source # 
Instance details

Defined in Apecs.Experimental.Reactive

type Elem (EnumMap c) = c

enumLookup :: (MonadIO m, Enum c) => c -> EnumMap c -> m [Entity] Source #

data OrdMap c Source #

Allows you to look up entities by component value. Based on a Map c IntSet internally

Instances
(MonadIO m, Ord c) => Reacts m (OrdMap c) Source # 
Instance details

Defined in Apecs.Experimental.Reactive

Methods

rempty :: m (OrdMap c) Source #

react :: Entity -> Maybe (Elem (OrdMap c)) -> Maybe (Elem (OrdMap c)) -> OrdMap c -> m () Source #

type Elem (OrdMap c) Source # 
Instance details

Defined in Apecs.Experimental.Reactive

type Elem (OrdMap c) = c

ordLookup :: (MonadIO m, Ord c) => c -> OrdMap c -> m [Entity] Source #

data IxMap c Source #

Allows you to look up entities by component value. Based on an IOArray c IntSet internally

Instances
(MonadIO m, Ix c, Bounded c) => Reacts m (IxMap c) Source # 
Instance details

Defined in Apecs.Experimental.Reactive

Methods

rempty :: m (IxMap c) Source #

react :: Entity -> Maybe (Elem (IxMap c)) -> Maybe (Elem (IxMap c)) -> IxMap c -> m () Source #

type Elem (IxMap c) Source # 
Instance details

Defined in Apecs.Experimental.Reactive

type Elem (IxMap c) = c

ixLookup :: (MonadIO m, Ix c) => c -> IxMap c -> m [Entity] Source #