packages feed

mischief-assets-0.1.0.0: src/Mischief/Assets/AssetRef.hs

module Mischief.Assets.AssetRef
  ( AssetRef (..),
    getAsset,
    getAsset',
    getRefEntity,
    qasset,
    qassetRec,
    qasset',
    ToAssetRef (..),
  )
where

import Data.Set qualified as Set
import Mischief.Assets.Internal.Asset
import Mischief.ECS

-- | Gets the value of an asset.
qasset' :: forall a m w. (MonadSystem w m) => AssetRef a -> Query m a
qasset' ref = qmaybe =<< qlift (getAsset' ref)

-- | Gets the value of an asset. If it isn't loaded, it will attempt to start loading it.
qasset :: forall a. AssetRef a -> Query System a
qasset ref = qmaybe =<< qlift (getAsset ref False Set.empty)

qassetRec :: forall a. AssetRef a -> Query System a
qassetRec ref = qmaybe =<< qlift (getAsset ref True Set.empty)