ecstasy-0.2.0.0: A GHC.Generics based entity component system.

Safe HaskellNone
LanguageHaskell2010

Data.Ecstasy.Types

Synopsis

Documentation

newtype Ent Source #

The key for an entity.

Constructors

Ent 

Fields

Instances

Eq Ent Source # 

Methods

(==) :: Ent -> Ent -> Bool #

(/=) :: Ent -> Ent -> Bool #

Ord Ent Source # 

Methods

compare :: Ent -> Ent -> Ordering #

(<) :: Ent -> Ent -> Bool #

(<=) :: Ent -> Ent -> Bool #

(>) :: Ent -> Ent -> Bool #

(>=) :: Ent -> Ent -> Bool #

max :: Ent -> Ent -> Ent #

min :: Ent -> Ent -> Ent #

Show Ent Source # 

Methods

showsPrec :: Int -> Ent -> ShowS #

show :: Ent -> String #

showList :: [Ent] -> ShowS #

type SystemState w m = (Int, w (WorldOf m)) Source #

The internal state of the SystemT monad.

newtype SystemT w m a Source #

A monad transformer over an ECS given a world w.

Constructors

SystemT 

Fields

Instances

MonadWriter ww m => MonadWriter ww (SystemT w m) Source # 

Methods

writer :: (a, ww) -> SystemT w m a #

tell :: ww -> SystemT w m () #

listen :: SystemT w m a -> SystemT w m (a, ww) #

pass :: SystemT w m (a, ww -> ww) -> SystemT w m a #

MonadState s m => MonadState s (SystemT w m) Source # 

Methods

get :: SystemT w m s #

put :: s -> SystemT w m () #

state :: (s -> (a, s)) -> SystemT w m a #

MonadReader r m => MonadReader r (SystemT w m) Source # 

Methods

ask :: SystemT w m r #

local :: (r -> r) -> SystemT w m a -> SystemT w m a #

reader :: (r -> a) -> SystemT w m a #

MonadTrans (SystemT w) Source # 

Methods

lift :: Monad m => m a -> SystemT w m a #

Monad m => Monad (SystemT w m) Source # 

Methods

(>>=) :: SystemT w m a -> (a -> SystemT w m b) -> SystemT w m b #

(>>) :: SystemT w m a -> SystemT w m b -> SystemT w m b #

return :: a -> SystemT w m a #

fail :: String -> SystemT w m a #

Functor m => Functor (SystemT w m) Source # 

Methods

fmap :: (a -> b) -> SystemT w m a -> SystemT w m b #

(<$) :: a -> SystemT w m b -> SystemT w m a #

Monad m => Applicative (SystemT w m) Source # 

Methods

pure :: a -> SystemT w m a #

(<*>) :: SystemT w m (a -> b) -> SystemT w m a -> SystemT w m b #

liftA2 :: (a -> b -> c) -> SystemT w m a -> SystemT w m b -> SystemT w m c #

(*>) :: SystemT w m a -> SystemT w m b -> SystemT w m b #

(<*) :: SystemT w m a -> SystemT w m b -> SystemT w m a #

MonadIO m => MonadIO (SystemT w m) Source # 

Methods

liftIO :: IO a -> SystemT w m a #

type System w = SystemT w Identity Source #

A monad over an ECS given a world w.

newtype QueryT w m a Source #

A computation to run over a particular entity.

Constructors

QueryT 

Fields

Instances

MonadWriter ww m => MonadWriter ww (QueryT w m) Source # 

Methods

writer :: (a, ww) -> QueryT w m a #

tell :: ww -> QueryT w m () #

listen :: QueryT w m a -> QueryT w m (a, ww) #

pass :: QueryT w m (a, ww -> ww) -> QueryT w m a #

MonadState s m => MonadState s (QueryT w m) Source # 

Methods

get :: QueryT w m s #

put :: s -> QueryT w m () #

state :: (s -> (a, s)) -> QueryT w m a #

MonadReader r m => MonadReader r (QueryT w m) Source # 

Methods

ask :: QueryT w m r #

local :: (r -> r) -> QueryT w m a -> QueryT w m a #

reader :: (r -> a) -> QueryT w m a #

MonadTrans (QueryT w) Source # 

Methods

lift :: Monad m => m a -> QueryT w m a #

Monad m => Monad (QueryT w m) Source # 

Methods

(>>=) :: QueryT w m a -> (a -> QueryT w m b) -> QueryT w m b #

(>>) :: QueryT w m a -> QueryT w m b -> QueryT w m b #

return :: a -> QueryT w m a #

fail :: String -> QueryT w m a #

Functor m => Functor (QueryT w m) Source # 

Methods

fmap :: (a -> b) -> QueryT w m a -> QueryT w m b #

(<$) :: a -> QueryT w m b -> QueryT w m a #

Monad m => Applicative (QueryT w m) Source # 

Methods

pure :: a -> QueryT w m a #

(<*>) :: QueryT w m (a -> b) -> QueryT w m a -> QueryT w m b #

liftA2 :: (a -> b -> c) -> QueryT w m a -> QueryT w m b -> QueryT w m c #

(*>) :: QueryT w m a -> QueryT w m b -> QueryT w m b #

(<*) :: QueryT w m a -> QueryT w m b -> QueryT w m a #

MonadIO m => MonadIO (QueryT w m) Source # 

Methods

liftIO :: IO a -> QueryT w m a #

Monad m => Alternative (QueryT w m) Source # 

Methods

empty :: QueryT w m a #

(<|>) :: QueryT w m a -> QueryT w m a -> QueryT w m a #

some :: QueryT w m a -> QueryT w m [a] #

many :: QueryT w m a -> QueryT w m [a] #

Monad m => MonadPlus (QueryT w m) Source # 

Methods

mzero :: QueryT w m a #

mplus :: QueryT w m a -> QueryT w m a -> QueryT w m a #

data VTable m a Source #

A collection of methods necessary to dispatch reads and writes to a Virtual component.

Constructors

VTable 

Fields

  • vget :: !(Ent -> m (Maybe a))

    Get the value of an entity's component.

  • vset :: !(Ent -> Update a -> m ())

    Update the value of an entity's component.

Instances

Applicative m => GSetEntity m (K1 * i (Update a)) (K1 * i' (VTable m a)) Source # 

Methods

gSetEntity :: K1 * i (Update a) x -> Int -> K1 * i' (VTable m a) x -> m (K1 * i' (VTable m a) x) Source #

Applicative m => GGetEntity m (K1 * i (VTable m a)) (K1 * i' (Maybe a)) Source # 

Methods

gGetEntity :: K1 * i (VTable m a) x -> Int -> m (K1 * i' (Maybe a) x) Source #

(Applicative m, KnownSymbol sym) => GDefault keep (M1 * S (MetaSel (Just Symbol sym) x y z) (K1 * i (VTable m a))) Source # 

Methods

gdef :: M1 * S (MetaSel (Just Symbol sym) x y z) (K1 * i (VTable m a)) a Source #

data StorageType Source #

Data kind used to parameterize the ECS record.

Constructors

FieldOf

Used to describe the actual entity.

WorldOf (Type -> Type)

Used to construct the world's storage.

SetterOf

Used to construct a setter to update an entity.

data ComponentType Source #

Data kind used to parameterize the fields of the ECS record.

Constructors

Field

This component can be owned by any entity.

Unique

This component can be owned by only a single entity at a time.

Virtual

This component is owned by another system.

data Update a Source #

Describes how we can change an a.

Constructors

Keep

Keep the current value.

Unset

Delete the current value if it exists.

Set !a

Set the current value.

Instances

Functor Update Source # 

Methods

fmap :: (a -> b) -> Update a -> Update b #

(<$) :: a -> Update b -> Update a #

Foldable Update Source # 

Methods

fold :: Monoid m => Update m -> m #

foldMap :: Monoid m => (a -> m) -> Update a -> m #

foldr :: (a -> b -> b) -> b -> Update a -> b #

foldr' :: (a -> b -> b) -> b -> Update a -> b #

foldl :: (b -> a -> b) -> b -> Update a -> b #

foldl' :: (b -> a -> b) -> b -> Update a -> b #

foldr1 :: (a -> a -> a) -> Update a -> a #

foldl1 :: (a -> a -> a) -> Update a -> a #

toList :: Update a -> [a] #

null :: Update a -> Bool #

length :: Update a -> Int #

elem :: Eq a => a -> Update a -> Bool #

maximum :: Ord a => Update a -> a #

minimum :: Ord a => Update a -> a #

sum :: Num a => Update a -> a #

product :: Num a => Update a -> a #

Traversable Update Source # 

Methods

traverse :: Applicative f => (a -> f b) -> Update a -> f (Update b) #

sequenceA :: Applicative f => Update (f a) -> f (Update a) #

mapM :: Monad m => (a -> m b) -> Update a -> m (Update b) #

sequence :: Monad m => Update (m a) -> m (Update a) #

GDefault False (K1 * i (Update c)) Source # 

Methods

gdef :: K1 * i (Update c) a Source #

GDefault True (K1 * i (Update c)) Source # 

Methods

gdef :: K1 * i (Update c) a Source #

Applicative m => GSetEntity m (K1 * i (Update a)) (K1 * i' (IntMap a)) Source # 

Methods

gSetEntity :: K1 * i (Update a) x -> Int -> K1 * i' (IntMap a) x -> m (K1 * i' (IntMap a) x) Source #

Applicative m => GSetEntity m (K1 * i (Update a)) (K1 * i' (VTable m a)) Source # 

Methods

gSetEntity :: K1 * i (Update a) x -> Int -> K1 * i' (VTable m a) x -> m (K1 * i' (VTable m a) x) Source #

Applicative m => GSetEntity m (K1 * i (Update a)) (K1 * i' (Maybe (Int, a))) Source # 

Methods

gSetEntity :: K1 * i (Update a) x -> Int -> K1 * i' (Maybe (Int, a)) x -> m (K1 * i' (Maybe (Int, a)) x) Source #

Eq a => Eq (Update a) Source # 

Methods

(==) :: Update a -> Update a -> Bool #

(/=) :: Update a -> Update a -> Bool #

Ord a => Ord (Update a) Source # 

Methods

compare :: Update a -> Update a -> Ordering #

(<) :: Update a -> Update a -> Bool #

(<=) :: Update a -> Update a -> Bool #

(>) :: Update a -> Update a -> Bool #

(>=) :: Update a -> Update a -> Bool #

max :: Update a -> Update a -> Update a #

min :: Update a -> Update a -> Update a #

Read a => Read (Update a) Source # 
Show a => Show (Update a) Source # 

Methods

showsPrec :: Int -> Update a -> ShowS #

show :: Update a -> String #

showList :: [Update a] -> ShowS #

GConvertSetter (K1 * i (Maybe a)) (K1 * i' (Update a)) Source # 

Methods

gConvertSetter :: K1 * i (Maybe a) x -> K1 * i' (Update a) x Source #

GConvertSetter (K1 * i a) (K1 * i' (Update a)) Source # 

Methods

gConvertSetter :: K1 * i a x -> K1 * i' (Update a) x Source #

type family Component (s :: StorageType) (c :: ComponentType) (a :: Type) :: Type where ... Source #

A type family to be used in your ECS recrod.