packages feed

mischief-ecs-0.1.0.0: src/Mischief/ECS/Resources.hs

module Mischief.ECS.Resources where

import Mischief.ECS.Components
import Mischief.ECS.Components.Bundle
import Mischief.ECS.Components.Spawn
import Mischief.ECS.Tables
import Mischief.ECS.World
import Mischief.ECS.World.Insert
import Mischief.ECS.World.Query
import Mischief.ECS.World.Query.Markers
import Mischief.ECS.World.Query.QueryType
import Mischief.ECS.World.Query.Queryable

-- | Insert a resource into this world. If the resource already exists, its value will be overwritten.
insertRes :: forall r. (Component r, Bundle r) => r -> System ()
insertRes res = do
  entity <- meta @r
  insert res entity

res :: forall c. (QueryType c) => System (Maybe c)
res = do
  meta <- meta @c
  get (Val (C @c)) meta

resOrInsert :: forall r. (Component r, Updateable (Result r), Bundle r) => r -> System (Result r)
resOrInsert r = do
  meta <- meta @r
  getOrInsert r meta