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"
 |