module Dodge.Module ( moduleSizes, moduleStrings, moduleName, ) where import qualified Data.Map.Strict as M import Dodge.Data.Item import Dodge.Module.Info moduleSizes :: Item -> Int moduleSizes = sum . fmap moduleSize . _iyModules . _itType moduleSize :: ItemModuleType -> Int moduleSize imt = case imt of EMPTYMODULE -> 0 _ -> 1 moduleStrings :: Item -> [String] moduleStrings = M.elems . M.mapMaybe moduleName . _iyModules . _itType moduleName :: ItemModuleType -> Maybe String moduleName imt = case imt of EMPTYMODULE -> Nothing -- BELTMAG -> Just "+BELT FEED" MAGNETMAG -> Just "+MAGNET FEED" BULPAY thepayload -> Just $ "+" ++ displayBulletPayload thepayload BULBODY thebody -> Just $ "+" ++ displayBulletBody thebody BULTRAJ thetraj -> Just $ "+" ++ displayBulletTraj thetraj TARGET TargetRBCreature -> Just "+CREATURETARGETING" TARGET TARGETLASER -> Just "+LASERTARGETING" TARGET TargetRBPress -> Just "+POSTIONALTARGETING" TARGET TargetCursor -> Just "+CURSORTARGETING" TARGET TargetRBLine -> Just "+LINETARGETING" INCENDLAS -> Just "+INCENDIARY" SPLITLAS -> Just "+SPLIT" STATICLAS -> Just "+STATIC" -- WEPTELE -> Just "+DIRECTEDTELE" LAUNCHHOME -> Just "+TARGET HOMING" ATTACHTORCH -> Just "+TORCH" --moduleFold :: (m -> m -> m) -> (ItemModule -> Maybe m) -> m -> Item -> m --moduleFold g f e = foldr (g . fromMaybe e . f) e -- . fmap fromModuleType -- . _iyModules -- . _itType