{- | 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