screeps-purescript-bot/src/Screeps/Game.purs

66 lines
2.0 KiB
Plaintext

module Screeps.Game where
import Prelude
import Foreign.Object as F
import Effect (Effect)
import Screeps.Types
import Screeps.Memory as Memory
import Screeps.FFI ( runThisEffFn0, runThisFn1
, unsafeField, toMaybe )
import Data.Maybe ( Maybe )
import Data.Either ( Either(..) )
import Data.Argonaut.Core ( Json )
import Data.Argonaut.Encode ( encodeJson )
import Data.Map as Map
foreign import getGameGlobal ∷ Effect GameGlobal
foreign import createCreepImpl ∷ Spawn → Array BodyPartType → Json
→ (ReturnCode → Either ReturnCode String)
→ (String → Either ReturnCode String)
→ Effect (Either ReturnCode String)
foreign import rawGetUtility ∷ String → Memory.MemoryGlobal → Int
foreign import rawGetRole ∷ String → Memory.MemoryGlobal → Role
type Cpu = { limit ∷ Int
, tickLimit ∷ Int
, bucket ∷ Int }
cpu ∷ GameGlobal → Cpu
cpu = unsafeField "cpu"
spawns ∷ GameGlobal → F.Object Spawn
spawns = unsafeField "spawns"
creeps ∷ GameGlobal → F.Object Creep
creeps = unsafeField "creeps"
getUsed ∷ GameGlobal → Effect Number
getUsed game = runThisEffFn0 "getUsed" (cpu game)
getObjectById ∷ ∀ a. GameGlobal → Id a → Maybe a
getObjectById game id
= toMaybe (runThisFn1 "getObjectById" game id)
getUtility ∷ Memory.MemoryGlobal → String → Int
getUtility mem key = rawGetUtility key mem
getRole ∷ Memory.MemoryGlobal → String → Role
getRole mem key = rawGetRole key mem
rawSpawnCreep ∷ Spawn → Array BodyPartType → String
→ Role → Effect (Either ReturnCode String)
rawSpawnCreep spawn parts name role
= createCreepImpl spawn parts role' Left Right
where role' = encodeJson role
rawSpawnCreepAs ∷ Spawn
→ Array BodyPartType → String → Role
→ Effect (Either ReturnCode String)
rawSpawnCreepAs spawn parts name role
= createCreepImpl spawn parts role' Left Right
where role' = encodeJson role
time ∷ GameGlobal → Int
time = unsafeField "time"
map ∷ GameGlobal → WorldMap
map = unsafeField "map"