{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FunctionalDependencies #-}
module Aztecs.ECS.Query.Dynamic.Class (DynamicQueryF (..)) where
import Aztecs.ECS.Component
import Aztecs.ECS.Entity
import Control.Monad
class (Monad m, Functor f) => DynamicQueryF m f | f -> m where
entity :: f EntityID
queryDyn :: (Component m a) => ComponentID -> f a
queryMaybeDyn :: (Component m a) => ComponentID -> f (Maybe a)
queryMaybeDyn ComponentID
cId = a -> Maybe a
forall a. a -> Maybe a
Just (a -> Maybe a) -> f a -> f (Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ComponentID -> f a
forall a. Component m a => ComponentID -> f a
forall (m :: * -> *) (f :: * -> *) a.
(DynamicQueryF m f, Component m a) =>
ComponentID -> f a
queryDyn ComponentID
cId
queryMapDyn :: (Component m a) => (a -> a) -> ComponentID -> f a
queryMapDyn_ :: (Component m a) => (a -> a) -> ComponentID -> f ()
queryMapDyn_ a -> a
f ComponentID
cId = f a -> f ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (f a -> f ()) -> f a -> f ()
forall a b. (a -> b) -> a -> b
$ (a -> a) -> ComponentID -> f a
forall a. Component m a => (a -> a) -> ComponentID -> f a
forall (m :: * -> *) (f :: * -> *) a.
(DynamicQueryF m f, Component m a) =>
(a -> a) -> ComponentID -> f a
queryMapDyn a -> a
f ComponentID
cId
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 ()
queryMapDynWith_ a -> b -> b
f ComponentID
cId = f b -> f ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (f b -> f ()) -> (f a -> f b) -> f a -> f ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> b -> b) -> ComponentID -> f a -> f b
forall b a.
Component m b =>
(a -> b -> b) -> ComponentID -> f a -> f b
forall (m :: * -> *) (f :: * -> *) b a.
(DynamicQueryF m f, Component m b) =>
(a -> b -> b) -> ComponentID -> f a -> f b
queryMapDynWith a -> b -> b
f ComponentID
cId
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
queryFilter a -> Bool
p f a
fa = (a -> Maybe a) -> f a -> f a
forall a b. (a -> Maybe b) -> f a -> f b
forall (m :: * -> *) (f :: * -> *) a b.
DynamicQueryF m f =>
(a -> Maybe b) -> f a -> f b
queryFilterMap (\a
a -> if a -> Bool
p a
a then a -> Maybe a
forall a. a -> Maybe a
Just a
a else Maybe a
forall a. Maybe a
Nothing) f a
fa
queryUntracked :: f a -> f a