{-# LANGUAGE DeriveGeneric #-}

-- |
-- Module      : Aztecs.ECS.World.Internal
-- 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)
module Aztecs.ECS.World.Internal (World (..)) where

import Aztecs.ECS.Entity
import Aztecs.ECS.World.Entities.Internal
import Aztecs.ECS.World.Observers.Internal
import Control.Monad.State

-- | World of entities and their components.
data World m = World
  { -- | Entities and their components.
    forall (m :: * -> *). World m -> Entities m
entities :: !(Entities m),
    -- | Next unique entity identifier.
    forall (m :: * -> *). World m -> EntityID
nextEntityId :: !EntityID,
    -- | Observers for events.
    forall (m :: * -> *). World m -> Observers (StateT (World m) m)
observers :: !(Observers (StateT (World m) m))
  }