Update the vision every time we step the game

Recalculate the character's lines of sight every time we step the game,
rather than just every time the character *moves*. I had originally
thought this was a non-contiguous lines-of-sight bug - which there's a
test disproving - but it actually turned out to be that actions like
eating or attacking would step the game forward (thus moving gormlaks)
without re-calculating the positions visible to the character.
This commit is contained in:
Griffin Smith 2019-12-23 17:55:28 -05:00
parent a58966d43f
commit 32421916e0
4 changed files with 53 additions and 2 deletions

View file

@ -102,6 +102,8 @@ stepGameBy ticks = do
pEntity' <- step ticks pEntity pEntity' <- step ticks pEntity
entities . ix eid .= pEntity' entities . ix eid .= pEntity'
modify updateCharacterVision
whenM (uses character isDead) whenM (uses character isDead)
. prompt_ @'Continue ["dead"] Uncancellable . prompt_ @'Continue ["dead"] Uncancellable
. const . lift . liftIO . const . lift . liftIO
@ -137,7 +139,6 @@ handleCommand (Move dir) = do
characterPosition .= newPos characterPosition .= newPos
stepGameBy =<< uses (character . speed) (|*| 1) stepGameBy =<< uses (character . speed) (|*| 1)
describeEntitiesAt newPos describeEntitiesAt newPos
modify updateCharacterVision
Just Combat -> attackAt newPos Just Combat -> attackAt newPos
Just Stop -> pure () Just Stop -> pure ()
continue continue

View file

@ -1,6 +1,7 @@
import Test.Prelude import Test.Prelude
import qualified Xanthous.Data.EntityCharSpec import qualified Xanthous.Data.EntityCharSpec
import qualified Xanthous.Data.EntityMapSpec import qualified Xanthous.Data.EntityMapSpec
import qualified Xanthous.Data.EntityMap.GraphicsSpec
import qualified Xanthous.DataSpec import qualified Xanthous.DataSpec
import qualified Xanthous.Entities.RawsSpec import qualified Xanthous.Entities.RawsSpec
import qualified Xanthous.GameSpec import qualified Xanthous.GameSpec
@ -18,6 +19,7 @@ test :: TestTree
test = testGroup "Xanthous" test = testGroup "Xanthous"
[ Xanthous.Data.EntityCharSpec.test [ Xanthous.Data.EntityCharSpec.test
, Xanthous.Data.EntityMapSpec.test , Xanthous.Data.EntityMapSpec.test
, Xanthous.Data.EntityMap.GraphicsSpec.test
, Xanthous.Entities.RawsSpec.test , Xanthous.Entities.RawsSpec.test
, Xanthous.GameSpec.test , Xanthous.GameSpec.test
, Xanthous.Generators.UtilSpec.test , Xanthous.Generators.UtilSpec.test

View file

@ -0,0 +1,47 @@
--------------------------------------------------------------------------------
module Xanthous.Data.EntityMap.GraphicsSpec (main, test) where
--------------------------------------------------------------------------------
import Test.Prelude
import Data.Aeson
--------------------------------------------------------------------------------
import Xanthous.Game.State
import Xanthous.Data
import Xanthous.Data.EntityMap
import Xanthous.Data.EntityMap.Graphics
--------------------------------------------------------------------------------
main :: IO ()
main = defaultMain test
test :: TestTree
test = testGroup "Xanthous.Data.EntityMap.Graphics"
[ testGroup "visiblePositions"
[ testCase "non-contiguous bug 1" $
let charPos = Position 20 20
gormlakPos = Position 17 19
em = insertAt gormlakPos TestEntity
. insertAt charPos TestEntity
$ mempty
visPositions = visiblePositions charPos 12 em
in (gormlakPos `member` visPositions) @?
( "not ("
<> show gormlakPos <> " `member` "
<> show visPositions
<> ")"
)
]
]
--------------------------------------------------------------------------------
data TestEntity = TestEntity
deriving stock (Show, Eq, Ord, Generic)
deriving anyclass (ToJSON, FromJSON, NFData)
instance Brain TestEntity where
step _ = pure
instance Draw TestEntity
instance Entity TestEntity where
blocksVision _ = False
description _ = ""
entityChar _ = "e"

View file

@ -4,7 +4,7 @@ cabal-version: 1.12
-- --
-- see: https://github.com/sol/hpack -- see: https://github.com/sol/hpack
-- --
-- hash: ae5b84ec168dd61b715e874bcb49579697873b164c43027a776dda725dfdffbf -- hash: 2d93180ab419496ded42f750d00a5b3f6c6994a9af86a8694bb585a1f52919d4
name: xanthous name: xanthous
version: 0.1.0.0 version: 0.1.0.0
@ -208,6 +208,7 @@ test-suite test
other-modules: other-modules:
Test.Prelude Test.Prelude
Xanthous.Data.EntityCharSpec Xanthous.Data.EntityCharSpec
Xanthous.Data.EntityMap.GraphicsSpec
Xanthous.Data.EntityMapSpec Xanthous.Data.EntityMapSpec
Xanthous.DataSpec Xanthous.DataSpec
Xanthous.Entities.RawsSpec Xanthous.Entities.RawsSpec