diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Main.hs | 5 | ||||
| -rw-r--r-- | src/Sequence/Utils.hs | 8 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/Main.hs b/src/Main.hs index 449e21d..de90b80 100644 --- a/src/Main.hs +++ b/src/Main.hs | |||
| @@ -297,6 +297,7 @@ entitySeqVal' ident = void . runMaybeT $ do | |||
| 297 | & set seqVal (Just sNum) | 297 | & set seqVal (Just sNum) |
| 298 | & set seqEpsilon (entity ^. eStats . sSeqEpsilon) | 298 | & set seqEpsilon (entity ^. eStats . sSeqEpsilon) |
| 299 | gEntities . at ident .= Just (newEntity & set eSeqVal val) | 299 | gEntities . at ident .= Just (newEntity & set eSeqVal val) |
| 300 | gLog <>= pure (ident, "Sequence: " ++ show sNum) | ||
| 300 | 301 | ||
| 301 | spendSeq :: Int -> String -> Sh GameState () | 302 | spendSeq :: Int -> String -> Sh GameState () |
| 302 | spendSeq n logStr = withFocus $ \focusId -> do | 303 | spendSeq n logStr = withFocus $ \focusId -> do |
| @@ -342,7 +343,7 @@ doShock dmg efLens = withFocus $ \focusId -> do | |||
| 342 | lStats . efLens . seApplied .= True | 343 | lStats . efLens . seApplied .= True |
| 343 | Effect (CI.original -> effectName) effect <- evalF . table $ cripple ^. seEffect | 344 | Effect (CI.original -> effectName) effect <- evalF . table $ cripple ^. seEffect |
| 344 | lStats <~ (MaybeT . fmap join . runMaybeT $ evalF effect) | 345 | lStats <~ (MaybeT . fmap join . runMaybeT $ evalF effect) |
| 345 | lift $ shellPutStrLn effectName | 346 | lift . outputLogged focusId $ "Effect: " ++ effectName |
| 346 | lift . addNote $ "Effect: " ++ effectName | 347 | lift . addNote $ "Effect: " ++ effectName |
| 347 | 348 | ||
| 348 | takeHit :: Int -> Completable (Set Hitzone) -> Completable DamageType -> Sh GameState () | 349 | takeHit :: Int -> Completable (Set Hitzone) -> Completable DamageType -> Sh GameState () |
| @@ -355,7 +356,7 @@ takeHit dmg a1 a2 = flip withArg a1 $ \zones -> flip withArg a2 $ \dType -> with | |||
| 355 | dmg' <- MaybeT . focusState lStats . evalFormula' [name] $ absorb armor dType dmg | 356 | dmg' <- MaybeT . focusState lStats . evalFormula' [name] $ absorb armor dType dmg |
| 356 | forM_ (Map.toList dmg') $ \(dType, dmg) -> lift . runMaybeT $ do | 357 | forM_ (Map.toList dmg') $ \(dType, dmg) -> lift . runMaybeT $ do |
| 357 | guard $ dmg > 0 | 358 | guard $ dmg > 0 |
| 358 | lift $ shellPutStrLn $ name ++ " took " ++ show dmg ++ " " ++ show dType | 359 | lift . outputLogged focusId $ name ++ " took " ++ show dmg ++ " " ++ show dType |
| 359 | case dType of | 360 | case dType of |
| 360 | Fatigue -> lStats . sFatigue += dmg | 361 | Fatigue -> lStats . sFatigue += dmg |
| 361 | _ -> lStats . sDamage . ix zone += dmg | 362 | _ -> lStats . sDamage . ix zone += dmg |
diff --git a/src/Sequence/Utils.hs b/src/Sequence/Utils.hs index 1d34a4f..fbf3c7d 100644 --- a/src/Sequence/Utils.hs +++ b/src/Sequence/Utils.hs | |||
| @@ -4,6 +4,7 @@ module Sequence.Utils | |||
| 4 | ( withArg, withFocus, withFocus' | 4 | ( withArg, withFocus, withFocus' |
| 5 | , focusState | 5 | , focusState |
| 6 | , toName, toDesc | 6 | , toName, toDesc |
| 7 | , outputLogged | ||
| 7 | , Argument(..) | 8 | , Argument(..) |
| 8 | , Completion(..) | 9 | , Completion(..) |
| 9 | , module Sequence.Utils.Ask | 10 | , module Sequence.Utils.Ask |
| @@ -47,6 +48,8 @@ import Sequence.Utils.Ask | |||
| 47 | import Sequence.Contact.Types | 48 | import Sequence.Contact.Types |
| 48 | import Sequence.Formula | 49 | import Sequence.Formula |
| 49 | 50 | ||
| 51 | import Text.Regex (mkRegex, subRegex) | ||
| 52 | |||
| 50 | class Argument a st | a -> st where | 53 | class Argument a st | a -> st where |
| 51 | arg :: String -> Sh st (Maybe a) | 54 | arg :: String -> Sh st (Maybe a) |
| 52 | 55 | ||
| @@ -85,6 +88,11 @@ toDesc ident = do | |||
| 85 | Just dmg -> return $ name ++ " " ++ show dmg | 88 | Just dmg -> return $ name ++ " " ++ show dmg |
| 86 | Nothing -> return name | 89 | Nothing -> return name |
| 87 | 90 | ||
| 91 | outputLogged :: EntityIdentifier -> String -> Sh GameState () | ||
| 92 | outputLogged id str = gLog <>= pure (id, clean str) >> shellPutStrLn str | ||
| 93 | where | ||
| 94 | clean str = subRegex (mkRegex "(\x9B|\x1B\\[)[0-?]*[ -/]*[@-~]") str "" -- remove ANSI escapes | ||
| 95 | |||
| 88 | instance Completion EntityIdentifier GameState where | 96 | instance Completion EntityIdentifier GameState where |
| 89 | completableLabel _ = "<entity>" | 97 | completableLabel _ = "<entity>" |
| 90 | complete _ st prefix = return . filter ((isPrefixOf `on` CI.foldCase) prefix) . map ((evalState ?? st) . toName) . Map.keys $ st ^. gEntities | 98 | complete _ st prefix = return . filter ((isPrefixOf `on` CI.foldCase) prefix) . map ((evalState ?? st) . toName) . Map.keys $ st ^. gEntities |
