about summary refs log tree commit diff
path: root/users/aspen/xanthous/src/Xanthous/App/Time.hs
blob: cca352858d9c4e62a594eecc0feeebfe64afcdf5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
--------------------------------------------------------------------------------
module Xanthous.App.Time
  ( stepGame
  , stepGameBy
  ) where
--------------------------------------------------------------------------------
import           Xanthous.Prelude
--------------------------------------------------------------------------------
import           System.Exit
--------------------------------------------------------------------------------
import           Xanthous.Data (Ticks)
import           Xanthous.App.Prompt
import qualified Xanthous.Data.EntityMap as EntityMap
import           Xanthous.Entities.Character (isDead)
import           Xanthous.Game.State
import           Xanthous.Game.Prompt
import           Xanthous.Game.Lenses
import           Control.Monad.State (modify)
import qualified Xanthous.Game.Memo as Memo
--------------------------------------------------------------------------------


stepGameBy :: Ticks -> AppM ()
stepGameBy ticks = do
  ents <- uses entities EntityMap.toEIDsAndPositioned
  for_ ents $ \(eid, pEntity) -> do
    pEntity' <- step ticks pEntity
    entities . ix eid .= pEntity'

  clearMemo Memo.characterVisiblePositions
  modify updateCharacterVision

  whenM (uses character isDead)
    . prompt_ @'Continue ["dead"] Uncancellable
    . const . lift . liftIO
    $ exitSuccess

ticksPerTurn :: Ticks
ticksPerTurn = 100

stepGame :: AppM ()
stepGame = stepGameBy ticksPerTurn