61 lines
2.0 KiB
Haskell
61 lines
2.0 KiB
Haskell
{- |
|
|
Display of weapon strings in the inventory.
|
|
-}
|
|
module Dodge.Item.Weapon.InventoryDisplay
|
|
( basicItemDisplay
|
|
, maybeWarmupStatus
|
|
, maybeRateStatus
|
|
, moduleStrings
|
|
) where
|
|
import Dodge.Data
|
|
import Padding
|
|
import Dodge.Inventory.ItemSpace
|
|
import Dodge.Module
|
|
|
|
import Data.Maybe
|
|
import Data.Sequence
|
|
import Control.Lens
|
|
{- | Displays the item name, ammo if loaded, and any selected '_itCharMode'. -}
|
|
basicItemDisplay :: Item -> [String]
|
|
basicItemDisplay it = Prelude.take (itSlotsTaken it) $
|
|
(midPadL 15 ' ' thename (' ' : thenumber) ++ theparam)
|
|
: moduleStrings it ++ repeat "*"
|
|
where
|
|
thename = _itName it
|
|
thenumber = case it ^? itConsumption of
|
|
Just am@LoadableAmmo{} -> case _reloadState am of
|
|
Nothing' -> show (_ammoLoaded am)
|
|
Just' x -> show x ++ "R" ++ show (_ammoLoaded am)
|
|
Just am@ChargeableAmmo{} -> show $ _wpCharge am
|
|
Just x@ItemItselfConsumable{} -> "x" ++ show (_itAmount x)
|
|
Just NoConsumption -> ""
|
|
Nothing -> ""
|
|
theparam = fromMaybe []
|
|
. listToMaybe
|
|
$ mapMaybe ($ it)
|
|
[ maybeModeStatus
|
|
-- , maybeWarmupStatus
|
|
-- , maybeRateStatus
|
|
]
|
|
|
|
-- this can be moved to Dodge/Module and unified with moduleSizes
|
|
|
|
maybeModeStatus :: Item -> Maybe String
|
|
maybeModeStatus it = case it ^? itAttachment of
|
|
Just ItCharMode {_itCharMode = (c :<| _)} -> Just [' ',c]
|
|
Just ItMode {_itMode = i} -> Just $ show i
|
|
_ -> Nothing
|
|
|
|
maybeRateStatus :: Item -> Maybe String
|
|
maybeRateStatus it = case it ^? itUse . useDelay . rateMaxMax of
|
|
Nothing -> Nothing
|
|
_ -> Just $ ' ' : " " ++ leftPad 4 ' ' (show (_rateMax . _useDelay $ _itUse it))
|
|
|
|
maybeWarmupStatus :: Item -> Maybe String
|
|
maybeWarmupStatus it = case it ^? itUse . useDelay . warmMax of
|
|
Nothing -> Nothing
|
|
Just m -> case m - (_warmTime . _useDelay $ _itUse it) of
|
|
x | x <= 1 -> Just "WARM"
|
|
| otherwise -> let n = show x
|
|
in Just $ Prelude.take (4 - Prelude.length n) "WARM" ++ n
|