diff options
author | Griffin Smith <root@gws.fyi> | 2020-01-25T16·38-0500 |
---|---|---|
committer | Griffin Smith <root@gws.fyi> | 2020-01-25T16·38-0500 |
commit | 308c7eb4f6cd1e7bb333e438bb4e6c904d9c20ee (patch) | |
tree | 299e5788dd029ae9258b1af9101ba42c0e77cdc6 /src/Xanthous/App.hs | |
parent | 9256c976edec462af26f33317df6171045e68aa5 (diff) |
Add a close command
Add a close command, to close doors, that works basically the same as the open command.
Diffstat (limited to 'src/Xanthous/App.hs')
-rw-r--r-- | src/Xanthous/App.hs | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/Xanthous/App.hs b/src/Xanthous/App.hs index 1c2fbf86f3b8..0d4f973d7120 100644 --- a/src/Xanthous/App.hs +++ b/src/Xanthous/App.hs @@ -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) -> |