aztecs-0.16.0: A modular game engine and Entity-Component-System (ECS) for Haskell.
Copyright(c) Matt Hunzinger 2025
LicenseBSD-style (see the LICENSE file in the distribution)
Maintainermatt@hunzinger.me
Stabilityprovisional
Portabilitynon-portable (GHC extensions)
Safe HaskellNone
LanguageHaskell2010

Aztecs.ECS.Query

Description

Query for matching entities.

Synopsis

Queries

newtype Query (m :: Type -> Type) a Source #

Query for matching entities.

Constructors

Query 

Fields

Instances

Instances details
Monad m => DynamicQueryF m (Query m) Source # 
Instance details

Defined in Aztecs.ECS.Query

Methods

entity :: Query m EntityID Source #

queryDyn :: Component m a => ComponentID -> Query m a Source #

queryMaybeDyn :: Component m a => ComponentID -> Query m (Maybe a) Source #

queryMapDyn :: Component m a => (a -> a) -> ComponentID -> Query m a Source #

queryMapDyn_ :: Component m a => (a -> a) -> ComponentID -> Query m () Source #

queryMapDynM :: (Monad m, Component m a) => (a -> m a) -> ComponentID -> Query m a Source #

queryMapDynWith :: Component m b => (a -> b -> b) -> ComponentID -> Query m a -> Query m b Source #

queryMapDynWith_ :: Component m b => (a -> b -> b) -> ComponentID -> Query m a -> Query m () Source #

queryMapDynWithM :: (Monad m, Component m b) => (a -> b -> m b) -> ComponentID -> Query m a -> Query m b Source #

queryMapDynWithAccum :: Component m c => (b -> c -> (a, c)) -> ComponentID -> Query m b -> Query m (a, c) Source #

queryMapDynWithAccumM :: (Monad m, Component m c) => (b -> c -> m (a, c)) -> ComponentID -> Query m b -> Query m (a, c) Source #

queryFilterMap :: (a -> Maybe b) -> Query m a -> Query m b Source #

queryFilter :: (a -> Bool) -> Query m a -> Query m a Source #

queryUntracked :: Query m a -> Query m a Source #

Monad m => Applicative (Query m) Source # 
Instance details

Defined in Aztecs.ECS.Query

Methods

pure :: a -> Query m a #

(<*>) :: Query m (a -> b) -> Query m a -> Query m b #

liftA2 :: (a -> b -> c) -> Query m a -> Query m b -> Query m c #

(*>) :: Query m a -> Query m b -> Query m b #

(<*) :: Query m a -> Query m b -> Query m a #

Functor m => Functor (Query m) Source # 
Instance details

Defined in Aztecs.ECS.Query

Methods

fmap :: (a -> b) -> Query m a -> Query m b #

(<$) :: a -> Query m b -> Query m a #

class (Monad m, Functor f) => DynamicQueryF (m :: Type -> Type) (f :: Type -> Type) | f -> m where Source #

Dynamic query functor.

Methods

entity :: f EntityID Source #

Fetch the currently matched EntityID.

queryDyn :: Component m a => ComponentID -> f a Source #

Fetch a Component by its ComponentID.

queryMaybeDyn :: Component m a => ComponentID -> f (Maybe a) Source #

Try to query a Component by its ComponentID.

queryMapDyn :: Component m a => (a -> a) -> ComponentID -> f a Source #

Map over a Component by its ComponentID.

queryMapDyn_ :: Component m a => (a -> a) -> ComponentID -> f () Source #

Map over a Component by its ComponentID, ignoring any output.

queryMapDynM :: (Monad m, Component m a) => (a -> m a) -> ComponentID -> f a Source #

Map over a Component by its ComponentID with a monadic function.

queryMapDynWith :: Component m b => (a -> b -> b) -> ComponentID -> f a -> f b Source #

Map over a Component by its ComponentID with input.

queryMapDynWith_ :: Component m b => (a -> b -> b) -> ComponentID -> f a -> f () Source #

Map over a Component by its ComponentID with input, ignoring any output.

queryMapDynWithM :: (Monad m, Component m b) => (a -> b -> m b) -> ComponentID -> f a -> f b Source #

Map over a Component by its ComponentID with input and a monadic function.

queryMapDynWithAccum :: Component m c => (b -> c -> (a, c)) -> ComponentID -> f b -> f (a, c) Source #

Map over a Component by its ComponentID with input, returning a tuple of the result and the updated component.

queryMapDynWithAccumM :: (Monad m, Component m c) => (b -> c -> m (a, c)) -> ComponentID -> f b -> f (a, c) Source #

Map over a Component by its ComponentID with input and a monadic function, returning a tuple.

queryFilterMap :: (a -> Maybe b) -> f a -> f b Source #

Filter a query and map the results, constraining the query to entities that satisfy the predicate.

queryFilter :: (a -> Bool) -> f a -> f a Source #

Filter a query, constraining it to entities that satisfy the predicate.

queryUntracked :: f a -> f a Source #

Run a query without tracking changes.

Instances

Instances details
Monad m => DynamicQueryF m (Query m) Source # 
Instance details

Defined in Aztecs.ECS.Query

Methods

entity :: Query m EntityID Source #

queryDyn :: Component m a => ComponentID -> Query m a Source #

queryMaybeDyn :: Component m a => ComponentID -> Query m (Maybe a) Source #

queryMapDyn :: Component m a => (a -> a) -> ComponentID -> Query m a Source #

queryMapDyn_ :: Component m a => (a -> a) -> ComponentID -> Query m () Source #

queryMapDynM :: (Monad m, Component m a) => (a -> m a) -> ComponentID -> Query m a Source #

queryMapDynWith :: Component m b => (a -> b -> b) -> ComponentID -> Query m a -> Query m b Source #

queryMapDynWith_ :: Component m b => (a -> b -> b) -> ComponentID -> Query m a -> Query m () Source #

queryMapDynWithM :: (Monad m, Component m b) => (a -> b -> m b) -> ComponentID -> Query m a -> Query m b Source #

queryMapDynWithAccum :: Component m c => (b -> c -> (a, c)) -> ComponentID -> Query m b -> Query m (a, c) Source #

queryMapDynWithAccumM :: (Monad m, Component m c) => (b -> c -> m (a, c)) -> ComponentID -> Query m b -> Query m (a, c) Source #

queryFilterMap :: (a -> Maybe b) -> Query m a -> Query m b Source #

queryFilter :: (a -> Bool) -> Query m a -> Query m a Source #

queryUntracked :: Query m a -> Query m a Source #

Monad m => DynamicQueryF m (DynamicQuery m) Source # 
Instance details

Defined in Aztecs.ECS.Query.Dynamic

Operations

query :: forall (m :: Type -> Type) a. (Monad m, Component m a) => Query m a Source #

Query a component.

queryMaybe :: forall (m :: Type -> Type) a. (Monad m, Component m a) => Query m (Maybe a) Source #

Optionally query a component, returning Nothing if it does not exist.

queryMap :: forall (m :: Type -> Type) a. (Monad m, Component m a) => (a -> a) -> Query m a Source #

Query a component and update it.

queryMap_ :: forall (m :: Type -> Type) a. (Monad m, Component m a) => (a -> a) -> Query m () Source #

Query a component and update it, ignoring any output.

queryMapM :: (Monad m, Component m a) => (a -> m a) -> Query m a Source #

Query a component and update it with a monadic action.

queryMapWith :: forall (m :: Type -> Type) a b. (Monad m, Component m b) => (a -> b -> b) -> Query m a -> Query m b Source #

Query a component with input and update it.

queryMapWith_ :: forall (m :: Type -> Type) a b. (Monad m, Component m b) => (a -> b -> b) -> Query m a -> Query m () Source #

Query a component with input and update it, ignoring any output.

queryMapWithM :: forall m a b. (Monad m, Component m b) => (a -> b -> m b) -> Query m a -> Query m b Source #

Query a component with input and update it with a monadic action.

queryMapWithAccum :: forall (m :: Type -> Type) a b c. (Monad m, Component m c) => (b -> c -> (a, c)) -> Query m b -> Query m (a, c) Source #

Query a component with input, returning a tuple of the result and the updated component.

queryMapWithAccumM :: forall m a b c. (Monad m, Component m c) => (b -> c -> m (a, c)) -> Query m b -> Query m (a, c) Source #

Query a component with input and update it with a monadic action, returning a tuple.

Running

readQuery :: Monad m => Query m a -> Entities m -> m (Vector a, Entities m) Source #

Match all entities.

readQuery' :: Monad m => Query m a -> Entities m -> m (Vector a, Components) Source #

Match all entities.

readQuerySingle :: (HasCallStack, Monad m) => Query m a -> Entities m -> m (a, Entities m) Source #

Match a single entity.

readQuerySingle' :: (HasCallStack, Monad m) => Query m a -> Entities m -> m (a, Components) Source #

Match a single entity.

readQuerySingleMaybe :: Monad m => Query m a -> Entities m -> m (Maybe a, Entities m) Source #

Match a single entity.

readQuerySingleMaybe' :: Monad m => Query m a -> Entities m -> m (Maybe a, Components) Source #

Match a single entity.

runQuery :: Monad m => Query m o -> Entities m -> m (Vector o, Entities m, Access m ()) Source #

Map all matched entities.

runQuerySingle :: (HasCallStack, Monad m) => Query m a -> Entities m -> m (a, Entities m, Access m ()) Source #

Map a single matched entity.

runQuerySingleMaybe :: Monad m => Query m a -> Entities m -> m (Maybe a, Entities m, Access m ()) Source #

Map a single matched entity, or Nothing.

Filters

newtype QueryFilter Source #

Filter for a Query.

Constructors

QueryFilter 

Fields

with :: forall (m :: Type -> Type) a. Component m a => QueryFilter Source #

Filter for entities containing this component.

without :: forall (m :: Type -> Type) a. Component m a => QueryFilter Source #

Filter out entities containing this component.

Reads and writes

data ReadsWrites Source #

Reads and writes of a Query.

Constructors

ReadsWrites 

Fields

disjoint :: ReadsWrites -> ReadsWrites -> Bool Source #

True if the reads and writes of two Querys overlap.