Move towards correcting module combinations
This commit is contained in:
+34
-8
@@ -18,6 +18,9 @@ import Dodge.Module
|
||||
import Multiset
|
||||
import SimpleTrie
|
||||
|
||||
import Data.Foldable
|
||||
import Data.Map.Merge.Strict
|
||||
import Control.Monad
|
||||
import Control.Lens
|
||||
import Data.Bifunctor
|
||||
import qualified Data.IntMap.Strict as IM
|
||||
@@ -50,7 +53,36 @@ combineItemListYou = map (first f) . lookupItems' . yourInv
|
||||
where
|
||||
f = concatMap g
|
||||
g (amount,i) = replicate (_toInt amount) i
|
||||
|
||||
combineItemListYou' :: World -> [([Int],(Item,[String]))]
|
||||
combineItemListYou' w = map (cmm (yourInv w)) $ combineItemListYou w
|
||||
|
||||
cmm :: IM.IntMap Item -> ([Int],Item) -> ([Int],(Item,[String]))
|
||||
cmm inv (is,itm) = (is,(itm & itType . iyModules .~ mods, s))
|
||||
where
|
||||
mms = map (_iyModules . _itType . (inv IM.!)) $ is
|
||||
(s,mods) = combineModuleMaps (_iyModules $ _itType itm) mms
|
||||
|
||||
combineModuleMaps :: M.Map ModuleSlot ItemModuleType -> [M.Map ModuleSlot ItemModuleType]
|
||||
-> ([String],M.Map ModuleSlot ItemModuleType)
|
||||
combineModuleMaps = foldrM cMod
|
||||
|
||||
cMod :: M.Map ModuleSlot ItemModuleType
|
||||
-> (M.Map ModuleSlot ItemModuleType)
|
||||
-> ([String],M.Map ModuleSlot ItemModuleType)
|
||||
cMod = mergeA
|
||||
(filterAMissing f)
|
||||
(filterAMissing f')
|
||||
(zipWithAMatched g)
|
||||
where
|
||||
f k EMPTYMODULE = ([],False)
|
||||
f k md = ([],False)
|
||||
f' k EMPTYMODULE = ([],True)
|
||||
f' k md = ([rm md++"SECOND"++show k],True)
|
||||
g k EMPTYMODULE md = ([],md)
|
||||
g k md1 md2 = ([rm md1++"BOTH"],md2)
|
||||
rm md = "REMOVES "++fromJust (moduleName md)
|
||||
|
||||
|
||||
-- this can probably be improved by going through accessing the combinations
|
||||
-- trie going through each combine type in your inventory in order, rather than
|
||||
@@ -77,14 +109,8 @@ invertListInv = IM.foldrWithKey
|
||||
(\k it -> ((_iyModules $ _itType it,_iyBase $ _itType it, k, itStackAmount it) :) )
|
||||
[]
|
||||
|
||||
-- gives a list of indices-item pairs.
|
||||
-- Note that within the pair, indices can be repeated if two or more of an item
|
||||
-- are needed
|
||||
combineItemListYou'' :: World -> [([Int],Item)]
|
||||
combineItemListYou'' = map (second fst) . combineItemListYou'
|
||||
|
||||
combineItemListYou' :: World -> [([Int],(Item,[String]))]
|
||||
combineItemListYou' = map addModules . concatMap lookupItems . invertListInvMult . yourInv
|
||||
combineItemListYou'' :: World -> [([Int],(Item,[String]))]
|
||||
combineItemListYou'' = map addModules . concatMap lookupItems . invertListInvMult . yourInv
|
||||
|
||||
addModules :: ([(M.Map ModuleSlot ItemModuleType,Int)],Item)
|
||||
-> ([Int],(Item,[String]))
|
||||
|
||||
@@ -229,6 +229,14 @@ inventoryX c = case c of
|
||||
, makeTypeCraftNum 5 TRANSFORMER
|
||||
, makeTypeCraftNum 5 PRISM
|
||||
, makeTypeCraftNum 5 LIGHTER
|
||||
, makeTypeCraftNum 5 INCENDIARYMODULE
|
||||
]
|
||||
'G' ->
|
||||
[ autoPistol
|
||||
, makeTypeCraftNum 2 HARDWARE
|
||||
, makeTypeCraftNum 2 MAGNET
|
||||
, makeTypeCraftNum 5 INCENDIARYMODULE
|
||||
, makeTypeCraftNum 5 STATICMODULE
|
||||
]
|
||||
_ -> []
|
||||
|
||||
|
||||
Reference in New Issue
Block a user