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:
		
							parent
							
								
									a58966d43f
								
							
						
					
					
						commit
						32421916e0
					
				
					 4 changed files with 53 additions and 2 deletions
				
			
		
							
								
								
									
										47
									
								
								test/Xanthous/Data/EntityMap/GraphicsSpec.hs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								test/Xanthous/Data/EntityMap/GraphicsSpec.hs
									
										
									
									
									
										Normal 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" | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue