packages feed

aztecs-0.6.0: src/Aztecs/ECS/System/Dynamic/Reader/Class.hs

module Aztecs.ECS.System.Dynamic.Reader.Class (ArrowDynamicReaderSystem (..)) where

import Aztecs.ECS.Component (ComponentID)
import Aztecs.ECS.Query.Dynamic.Reader (DynamicQueryReader)
import Aztecs.ECS.World.Archetypes (Node)
import Control.Arrow (Arrow (..), (>>>))
import Data.Set (Set)

class (Arrow arr) => ArrowDynamicReaderSystem arr where
  allDyn :: Set ComponentID -> DynamicQueryReader i o -> arr i [o]

  filterDyn :: Set ComponentID -> DynamicQueryReader i o -> (Node -> Bool) -> arr i [o]

  singleDyn :: Set ComponentID -> DynamicQueryReader () a -> arr () a
  singleDyn cIds q =
    allDyn cIds q
      >>> arr
        ( \as -> case as of
            [a] -> a
            _ -> error "TODO"
        )