| Copyright | (c) Matt Hunzinger 2025 |
|---|---|
| License | BSD-style (see the LICENSE file in the distribution) |
| Maintainer | matt@hunzinger.me |
| Stability | provisional |
| Portability | non-portable (GHC extensions) |
| Safe Haskell | None |
| Language | Haskell2010 |
Aztecs.ECS.Query
Description
Query for matching entities.
Synopsis
- newtype Query (m :: Type -> Type) a = Query {
- runQuery' :: Components -> (ReadsWrites, Components, DynamicQuery m a)
- class (Monad m, Functor f) => DynamicQueryF (m :: Type -> Type) (f :: Type -> Type) | f -> m where
- entity :: f EntityID
- queryDyn :: Component m a => ComponentID -> f a
- queryMaybeDyn :: Component m a => ComponentID -> f (Maybe a)
- queryMapDyn :: Component m a => (a -> a) -> ComponentID -> f a
- queryMapDyn_ :: Component m a => (a -> a) -> ComponentID -> f ()
- queryMapDynM :: (Monad m, Component m a) => (a -> m a) -> ComponentID -> f a
- queryMapDynWith :: Component m b => (a -> b -> b) -> ComponentID -> f a -> f b
- queryMapDynWith_ :: Component m b => (a -> b -> b) -> ComponentID -> f a -> f ()
- queryMapDynWithM :: (Monad m, Component m b) => (a -> b -> m b) -> ComponentID -> f a -> f b
- queryMapDynWithAccum :: Component m c => (b -> c -> (a, c)) -> ComponentID -> f b -> f (a, c)
- queryMapDynWithAccumM :: (Monad m, Component m c) => (b -> c -> m (a, c)) -> ComponentID -> f b -> f (a, c)
- queryFilterMap :: (a -> Maybe b) -> f a -> f b
- queryFilter :: (a -> Bool) -> f a -> f a
- queryUntracked :: f a -> f a
- query :: forall (m :: Type -> Type) a. (Monad m, Component m a) => Query m a
- queryMaybe :: forall (m :: Type -> Type) a. (Monad m, Component m a) => Query m (Maybe a)
- queryMap :: forall (m :: Type -> Type) a. (Monad m, Component m a) => (a -> a) -> Query m a
- queryMap_ :: forall (m :: Type -> Type) a. (Monad m, Component m a) => (a -> a) -> Query m ()
- queryMapM :: (Monad m, Component m a) => (a -> m a) -> Query m a
- queryMapWith :: forall (m :: Type -> Type) a b. (Monad m, Component m b) => (a -> b -> b) -> Query m a -> Query m b
- queryMapWith_ :: forall (m :: Type -> Type) a b. (Monad m, Component m b) => (a -> b -> b) -> Query m a -> Query m ()
- queryMapWithM :: forall m a b. (Monad m, Component m b) => (a -> b -> m b) -> Query m a -> Query m b
- queryMapWithAccum :: forall (m :: Type -> Type) a b c. (Monad m, Component m c) => (b -> c -> (a, c)) -> Query m b -> Query m (a, c)
- queryMapWithAccumM :: forall m a b c. (Monad m, Component m c) => (b -> c -> m (a, c)) -> Query m b -> Query m (a, c)
- readQuery :: Monad m => Query m a -> Entities m -> m (Vector a, Entities m)
- readQuery' :: Monad m => Query m a -> Entities m -> m (Vector a, Components)
- readQuerySingle :: (HasCallStack, Monad m) => Query m a -> Entities m -> m (a, Entities m)
- readQuerySingle' :: (HasCallStack, Monad m) => Query m a -> Entities m -> m (a, Components)
- readQuerySingleMaybe :: Monad m => Query m a -> Entities m -> m (Maybe a, Entities m)
- readQuerySingleMaybe' :: Monad m => Query m a -> Entities m -> m (Maybe a, Components)
- runQuery :: Monad m => Query m o -> Entities m -> m (Vector o, Entities m, Access m ())
- runQuerySingle :: (HasCallStack, Monad m) => Query m a -> Entities m -> m (a, Entities m, Access m ())
- runQuerySingleMaybe :: Monad m => Query m a -> Entities m -> m (Maybe a, Entities m, Access m ())
- newtype QueryFilter = QueryFilter {}
- with :: forall (m :: Type -> Type) a. Component m a => QueryFilter
- without :: forall (m :: Type -> Type) a. Component m a => QueryFilter
- data ReadsWrites = ReadsWrites {
- reads :: !(Set ComponentID)
- writes :: !(Set ComponentID)
- disjoint :: ReadsWrites -> ReadsWrites -> Bool
Queries
newtype Query (m :: Type -> Type) a Source #
Query for matching entities.
Constructors
| Query | |
Fields
| |
Instances
class (Monad m, Functor f) => DynamicQueryF (m :: Type -> Type) (f :: Type -> Type) | f -> m where Source #
Dynamic query functor.
Minimal complete definition
entity, queryDyn, queryMapDyn, queryMapDynM, queryMapDynWith, queryMapDynWithM, queryMapDynWithAccum, queryMapDynWithAccumM, queryFilterMap, queryUntracked
Methods
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
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
| |
Instances
| Monoid QueryFilter Source # | |
Defined in Aztecs.ECS.Query Methods mempty :: QueryFilter # mappend :: QueryFilter -> QueryFilter -> QueryFilter # mconcat :: [QueryFilter] -> QueryFilter # | |
| Semigroup QueryFilter Source # | |
Defined in Aztecs.ECS.Query Methods (<>) :: QueryFilter -> QueryFilter -> QueryFilter # sconcat :: NonEmpty QueryFilter -> QueryFilter # stimes :: Integral b => b -> QueryFilter -> QueryFilter # | |
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
| |
Instances
| Monoid ReadsWrites Source # | |
Defined in Aztecs.ECS.Query Methods mempty :: ReadsWrites # mappend :: ReadsWrites -> ReadsWrites -> ReadsWrites # mconcat :: [ReadsWrites] -> ReadsWrites # | |
| Semigroup ReadsWrites Source # | |
Defined in Aztecs.ECS.Query Methods (<>) :: ReadsWrites -> ReadsWrites -> ReadsWrites # sconcat :: NonEmpty ReadsWrites -> ReadsWrites # stimes :: Integral b => b -> ReadsWrites -> ReadsWrites # | |
| Show ReadsWrites Source # | |
Defined in Aztecs.ECS.Query Methods showsPrec :: Int -> ReadsWrites -> ShowS # show :: ReadsWrites -> String # showList :: [ReadsWrites] -> ShowS # | |
disjoint :: ReadsWrites -> ReadsWrites -> Bool Source #