Make combine and tweak menus servicable
This commit is contained in:
+12
-5
@@ -1,4 +1,4 @@
|
||||
{-# LANGUAGE TupleSections #-}
|
||||
--{-# LANGUAGE TupleSections #-}
|
||||
module Dodge.Combine where
|
||||
import Dodge.Base.You
|
||||
import Dodge.Data
|
||||
@@ -13,6 +13,7 @@ import qualified Data.IntMap.Strict as IM
|
||||
--import qualified Data.IntSet as IS
|
||||
import qualified Data.Map.Strict as M
|
||||
import Data.Maybe
|
||||
import Data.List (scanl')
|
||||
|
||||
itemCombinations :: [ (M.Map CombineType Int, Item) ]
|
||||
itemCombinations = map (first toMultiset) $
|
||||
@@ -53,8 +54,8 @@ combineItemList m = mapMaybe (pushoutmaybe . second combineToItem)
|
||||
itemsMultisets :: [(Int,Item)] -> [([Int],M.Map CombineType Int)]
|
||||
itemsMultisets = map mconcat . mapM itemMultisets
|
||||
|
||||
-- individual items can produce multiple multisets if they are a stack of more
|
||||
-- than one item
|
||||
-- "individual" items can produce multiple multisets if they are in fact
|
||||
-- a stack of more than one item
|
||||
itemMultisets :: (Int,Item) -> [([Int],M.Map CombineType Int)]
|
||||
itemMultisets (i,it) = case it ^? itConsumption . itAmount' of
|
||||
Nothing -> [ ([i], M.singleton thetype 1 ) ]
|
||||
@@ -66,7 +67,7 @@ itemMultisets (i,it) = case it ^? itConsumption . itAmount' of
|
||||
itemTypeAmounts :: Item -> [[CombineType]]
|
||||
itemTypeAmounts it = case it ^? itConsumption . itAmount' of
|
||||
Nothing -> [[thetype]]
|
||||
Just i -> map (flip replicate thetype) [1 .. i]
|
||||
Just i -> map (`replicate` thetype) [1 .. i]
|
||||
where
|
||||
thetype = _itCombineType it
|
||||
|
||||
@@ -84,7 +85,13 @@ toggleCombineInv w = case _inventoryMode w of
|
||||
enterCombineInv :: World -> World
|
||||
enterCombineInv w = w & inventoryMode .~ CombineInventory mi
|
||||
where
|
||||
mi = const 0 <$> listToMaybe (combineListYou w)
|
||||
mi = 0 <$ listToMaybe (combineListYou w)
|
||||
|
||||
combine :: M.Map CombineType Int -> Maybe CombineType
|
||||
combine m = lookup m combinations
|
||||
|
||||
combineSizes :: World -> [Int]
|
||||
combineSizes = map (ceiling . _itInvSize . snd) . combineItemListYou
|
||||
|
||||
combinePoss :: World -> [Int]
|
||||
combinePoss = scanl' (+) 0 . combineSizes
|
||||
|
||||
Reference in New Issue
Block a user