module Power where -- XXX: If adding a power with a longer name, check still fits in inventory -- window when we have >= 10 charges. data PowerType = Heal | Dazzle | Smoke | Haste | Teleport | Undo | Ghost | Foresight deriving (Eq, Ord, Show) data Power = Power { tp :: PowerType , charges :: Int , maxCharges :: Int , overUsable :: Bool } setOverUsable :: Bool -> Power -> Power setOverUsable b pow = pow { overUsable = b } new :: PowerType -> Bool -> Power new tp' = Power tp' 0 0 activatable :: Power -> Bool activatable pow = charges pow > 0 || overUsable pow activatableTimes :: Power -> Int activatableTimes pow | overUsable pow = charges pow + maxCharges pow | otherwise = charges pow upgrade, recharge :: Power -> Power upgrade pow = -- |Capped at 99 so will fit in inventory window pow { maxCharges = min 99 $ maxCharges pow + 1, charges = min 99 $ charges pow + 1 } recharge pow = pow {charges = maxCharges pow} deplete :: Power -> Maybe Power deplete pow | charges pow > 0 = Just $ pow { charges = charges pow - 1 } | maxCharges pow > 1 = Just $ pow { maxCharges = maxCharges pow - 1 } | otherwise = Nothing