Add a close command
Add a close command, to close doors, that works basically the same as the open command.
This commit is contained in:
		
							parent
							
								
									9256c976ed
								
							
						
					
					
						commit
						308c7eb4f6
					
				
					 4 changed files with 33 additions and 2 deletions
				
			
		|  | @ -52,7 +52,7 @@ import qualified Xanthous.Entities.Item as Item | |||
| import           Xanthous.Entities.Creature (Creature) | ||||
| import qualified Xanthous.Entities.Creature as Creature | ||||
| import           Xanthous.Entities.Environment | ||||
|                  (Door, open, locked, GroundMessage(..), Staircase(..)) | ||||
|                  (Door, open, closed, locked, GroundMessage(..), Staircase(..)) | ||||
| import           Xanthous.Entities.RawTypes | ||||
|                  ( edible, eatMessage, hitpointsHealed | ||||
|                  , attackMessage | ||||
|  | @ -182,6 +182,7 @@ handleCommand Open = do | |||
|       doors <- uses entities $ entitiesAtPositionWithType @Door pos | ||||
|       if | null doors -> say_ ["open", "nothingToOpen"] | ||||
|          | any (view $ _2 . locked) doors -> say_ ["open", "locked"] | ||||
|          | all (view $ _2 . open) doors   -> say_ ["open", "alreadyOpen"] | ||||
|          | otherwise -> do | ||||
|              for_ doors $ \(eid, _) -> | ||||
|                entities . ix eid . positioned . _SomeEntity . open .= True | ||||
|  | @ -190,6 +191,21 @@ handleCommand Open = do | |||
|   stepGame -- TODO | ||||
|   continue | ||||
| 
 | ||||
| handleCommand Close = do | ||||
|   prompt_ @'DirectionPrompt ["close", "prompt"] Cancellable | ||||
|     $ \(DirectionResult dir) -> do | ||||
|       pos <- move dir <$> use characterPosition | ||||
|       doors <- uses entities $ entitiesAtPositionWithType @Door pos | ||||
|       if | null doors -> say_ ["close", "nothingToClose"] | ||||
|          | all (view $ _2 . closed) doors -> say_ ["close", "alreadyClosed"] | ||||
|          | otherwise -> do | ||||
|              for_ doors $ \(eid, _) -> | ||||
|                entities . ix eid . positioned . _SomeEntity . closed .= True | ||||
|              say_ ["close", "success"] | ||||
|       pure () | ||||
|   stepGame -- TODO | ||||
|   continue | ||||
| 
 | ||||
| handleCommand Look = do | ||||
|   prompt_ @'PointOnMap ["look", "prompt"] Cancellable | ||||
|     $ \(PointOnMapResult pos) -> | ||||
|  |  | |||
|  | @ -16,6 +16,7 @@ data Command | |||
|   | PickUp | ||||
|   | Drop | ||||
|   | Open | ||||
|   | Close | ||||
|   | Wait | ||||
|   | Eat | ||||
|   | Look | ||||
|  | @ -37,6 +38,7 @@ commandFromKey (KChar 'p') [MCtrl] = Just PreviousMessage | |||
| commandFromKey (KChar ',') [] = Just PickUp | ||||
| commandFromKey (KChar 'd') [] = Just Drop | ||||
| commandFromKey (KChar 'o') [] = Just Open | ||||
| commandFromKey (KChar 'c') [] = Just Close | ||||
| commandFromKey (KChar ';') [] = Just Look | ||||
| commandFromKey (KChar 'e') [] = Just Eat | ||||
| commandFromKey (KChar 'S') [] = Just Save | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ module Xanthous.Entities.Environment | |||
|     -- * Doors | ||||
|   , Door(..) | ||||
|   , open | ||||
|   , closed | ||||
|   , locked | ||||
|   , unlockedDoor | ||||
| 
 | ||||
|  | @ -99,6 +100,9 @@ instance Entity Door where | |||
|   entityCollision door | door ^. open = Nothing | ||||
|                        | otherwise = Just Stop | ||||
| 
 | ||||
| closed :: Lens' Door Bool | ||||
| closed = open . involuted not | ||||
| 
 | ||||
| -- | A closed, unlocked door | ||||
| unlockedDoor :: Door | ||||
| unlockedDoor = Door | ||||
|  |  | |||
|  | @ -35,7 +35,16 @@ open: | |||
|   prompt: Direction to open (hjklybnu.)? | ||||
|   success: "You open the door." | ||||
|   locked: "That door is locked" | ||||
|   nothingToOpen: "There's nothing to open there" | ||||
|   nothingToOpen: "There's nothing to open there." | ||||
|   alreadyOpen: "That door is already open." | ||||
| 
 | ||||
| close: | ||||
|   prompt: Direction to close (hjklybnu.)? | ||||
|   success: | ||||
|     - You close the door. | ||||
|     - You shut the door. | ||||
|   nothingToClose: "There's nothing to close there." | ||||
|   alreadyClosed: "That door is already closed." | ||||
| 
 | ||||
| look: | ||||
|   prompt: Select a position on the map to describe (use Enter to confirm) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue