packages feed

aztecs-0.2.0.0: examples/ECS.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE MonoLocalBinds #-}

module Main where

import Control.Monad.IO.Class (MonadIO (..))
import Data.Aztecs
import qualified Data.Aztecs.Access as A
import qualified Data.Aztecs.Query as Q
import qualified Data.Aztecs.World as W

newtype Position = Position Int deriving (Show)

instance Component Position

newtype Velocity = Velocity Int deriving (Show)

instance Component Velocity

app :: Access IO ()
app = do
  -- Spawn an entity with position and velocity components
  e <- A.spawn (Position 0)
  A.insert e (Velocity 1)

  -- Query for and update all matching entities
  q <- Q.map (\(Velocity v :& Position x) -> Position (x + v))
  liftIO $ print q

main :: IO ()
main = do
  _ <- runAccess app W.empty
  return ()