diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Main.hs | 28 | 
1 files changed, 23 insertions, 5 deletions
diff --git a/src/Main.hs b/src/Main.hs index ace3ef2..8f44db8 100644 --- a/src/Main.hs +++ b/src/Main.hs  | |||
| @@ -98,6 +98,7 @@ main = do | |||
| 98 | , cmd "spend" spendSeq "Spend some of the current focus´ AP" | 98 | , cmd "spend" spendSeq "Spend some of the current focus´ AP" | 
| 99 | , cmd "delay" delay "Spend AP until the current focus´ sequence is no higher than the next highest and focus that one" | 99 | , cmd "delay" delay "Spend AP until the current focus´ sequence is no higher than the next highest and focus that one" | 
| 100 | , cmd "note" addNote "Add a note to the current focus" | 100 | , cmd "note" addNote "Add a note to the current focus" | 
| 101 | , cmd "unnote" delNote "Remove a note from the current focus" | ||
| 101 | , cmd "hit" takeHit "Damage the focused entity" | 102 | , cmd "hit" takeHit "Damage the focused entity" | 
| 102 | , cmd "heal" healDmg "Heal the focused entity" | 103 | , cmd "heal" healDmg "Heal the focused entity" | 
| 103 | , cmd "heal'" healFatigue "Heal the focused entity of fatigue" | 104 | , cmd "heal'" healFatigue "Heal the focused entity of fatigue" | 
| @@ -142,12 +143,21 @@ stateOutline = do | |||
| 142 | layoutTableToString <$> rowGs <*> pure (Just (roundStr round : factions, repeat def)) <*> pure (repeat def) <*> pure unicodeBoldHeaderS | 143 | layoutTableToString <$> rowGs <*> pure (Just (roundStr round : factions, repeat def)) <*> pure (repeat def) <*> pure unicodeBoldHeaderS | 
| 143 | 144 | ||
| 144 | focusNotes :: GameState -> String | 145 | focusNotes :: GameState -> String | 
| 145 | focusNotes = maybe "" (unlines . map dotted) . preview (gFocus' . eNotes) | 146 | focusNotes st | 
| 147 | | (Just notes) <- preview (gFocus' . eNotes) st = let notes' = zip ([1..] :: [Int]) notes | ||
| 148 | dotted' = dotted . maximum $ map (length . show . fst) notes' | ||
| 149 | in unlines $ map dotted' notes' | ||
| 150 | | otherwise = "" | ||
| 146 | where | 151 | where | 
| 147 | dotted "" = " • " | 152 | prefix :: Int -> Int -> String | 
| 148 | dotted str | 153 | prefix pad n = printf (" %*d) " :: String) pad n | 
| 149 | | fstL : [] <- lines str = " • " ++ fstL | 154 | prefix' :: Int -> String | 
| 150 | | fstL : tailL <- lines str = " • " ++ fstL ++ "\n" ++ unlines (map (" " ++ ) tailL) | 155 | prefix' pad = printf (" %*s) " :: String) pad ("" :: String) | 
| 156 | dotted :: Int -> (Int, String) -> String | ||
| 157 | dotted pad (n, "") = prefix pad n | ||
| 158 | dotted pad (n, str) | ||
| 159 | | fstL : [] <- lines str = prefix pad n ++ fstL | ||
| 160 | | fstL : tailL <- lines str = prefix pad n ++ fstL ++ "\n" ++ unlines (map (prefix' pad ++ ) tailL) | ||
| 151 | | otherwise = "" | 161 | | otherwise = "" | 
| 152 | 162 | ||
| 153 | stateMaintenance :: Sh GameState () | 163 | stateMaintenance :: Sh GameState () | 
| @@ -331,6 +341,14 @@ delay = withFocus $ fmap (\_ -> ()) . runMaybeT . delay' | |||
| 331 | addNote :: String -> Sh GameState () | 341 | addNote :: String -> Sh GameState () | 
| 332 | addNote note = withFocus $ \focusId -> gEntities . ix focusId . eNotes %= (note :) | 342 | addNote note = withFocus $ \focusId -> gEntities . ix focusId . eNotes %= (note :) | 
| 333 | 343 | ||
| 344 | delNote :: Int -> Sh GameState () | ||
| 345 | delNote ((\n -> n - 1) -> index) = withFocus $ \focusId -> gEntities . ix focusId . eNotes %= strike index | ||
| 346 | where | ||
| 347 | strike :: Int -> [a] -> [a] | ||
| 348 | strike _ [] = [] | ||
| 349 | strike 0 (_:xs) = xs | ||
| 350 | strike n (x:xs) = x : strike (n - 1) xs | ||
| 351 | |||
| 334 | doShock :: Int -> Traversal' Stats ShockEffect -> Sh GameState () | 352 | doShock :: Int -> Traversal' Stats ShockEffect -> Sh GameState () | 
| 335 | doShock dmg efLens = withFocus $ \focusId -> do | 353 | doShock dmg efLens = withFocus $ \focusId -> do | 
| 336 | let | 354 | let | 
