32421916e0
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.
47 lines
1.5 KiB
Haskell
47 lines
1.5 KiB
Haskell
--------------------------------------------------------------------------------
|
|
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"
|