This commit is contained in:
2024-10-01 10:33:15 +01:00
parent 87cbaf911f
commit 8348c1234c
4 changed files with 47 additions and 38 deletions
+1 -1
View File
@@ -1 +1 @@
All good (604 modules, at 10:01:12)
All good (604 modules, at 10:33:02)
+22 -24
View File
@@ -3,39 +3,18 @@ module Dodge.Combine (
combineList,
) where
import Dodge.Combine.Combinations
import Data.Bifunctor
import Data.List (sortOn)
import Data.Foldable
import Data.List (sort, sortOn)
import qualified Data.Map.Strict as M
import Dodge.Base.You
import Dodge.Combine.Combinations
import Dodge.Data.Combine
import Dodge.Data.Universe
import Dodge.Item.Display
import Dodge.Item.InventoryColor
import qualified IntMapHelp as IM
import SimpleTrie
import Data.Foldable
import Data.List (sort)
invertInventoryToMap :: IM.IntMap Item -> M.Map ItemType [Int]
invertInventoryToMap =
IM.foldrWithKey
(\k it -> M.insertWith (++) (_itType it) [k])
mempty
groupSplitItemAmounts :: M.Map ItemType [Int] -> [((ItAmount, ItemType), [Int])]
--groupSplitItemAmounts = M.foldrWithKey f []
groupSplitItemAmounts = M.foldrWithKey f []
where
f ibt is = (++) [((fromIntegral i, ibt), take i is) | i <- [1 .. length is]]
flatLookupItems :: IM.IntMap Item -> [([[Int]], Item)]
flatLookupItems =
flip multiLookupTrieI combinationsTrie . sortOn fst . groupSplitItemAmounts
. invertInventoryToMap
combineItemListYouX :: World -> [([Int], Item)]
combineItemListYouX = map (first concat) . flatLookupItems . yourInv
combineList :: World -> [SelectionItem CombinableItem]
combineList = map f . combineItemListYouX
@@ -50,6 +29,14 @@ combineList = map f . combineItemListYouX
, _siPayload = CombinableItem is itm []
}
combineItemListYouX :: World -> [([Int], Item)]
combineItemListYouX = map (first concat) . flatLookupItems . yourInv
flatLookupItems :: IM.IntMap Item -> [([[Int]], Item)]
flatLookupItems =
flip multiLookupTrieI combinationsTrie . sortOn fst . groupSplitItemAmounts
. invertInventoryToMap
combinationsTrie :: Trie (ItAmount, ItemType) Item
{-# INLINE combinationsTrie #-}
combinationsTrie =
@@ -57,3 +44,14 @@ combinationsTrie =
(flip $ uncurry insertInTrie . first sort)
emptyTrie
itemCombinations
groupSplitItemAmounts :: M.Map ItemType [Int] -> [((ItAmount, ItemType), [Int])]
groupSplitItemAmounts = M.foldMapWithKey f
where
f ibt is = [((fromIntegral i, ibt), take i is) | i <- [1 .. length is]]
invertInventoryToMap :: IM.IntMap Item -> M.Map ItemType [Int]
invertInventoryToMap =
IM.foldrWithKey
(\k it -> M.insertWith (++) (_itType it) [k])
mempty
+9
View File
@@ -18,11 +18,14 @@ module IntMapHelp
cycleGT,
cycleLT,
invertIntMap,
) where
import Control.Applicative
import Data.Aeson
import Data.IntMap.Strict
import qualified Data.Map.Strict as M
import GHC.Generics
import LensHelp
@@ -94,3 +97,9 @@ cycleGT i m = lookupGT i m <|> lookupMin m
cycleLT :: Int -> IntMap a -> Maybe (Int, a)
cycleLT i m = lookupLT i m <|> lookupMax m
invertIntMap :: Ord a => IntMap a -> M.Map a [Int]
invertIntMap = foldrWithKey
(\k xs -> M.insertWith (++) xs [k])
mempty
+15 -13
View File
@@ -4705,13 +4705,14 @@ colorSH src/Shape.hs 233;" f
combinationsDotGraph src/Dodge/Combine/Graph.hs 85;" f
combinationsGraph src/Dodge/Combine/Graph.hs 66;" f
combinationsOf src/Multiset.hs 40;" f
combinationsTrie src/Dodge/Combine.hs 51;" f
combinationsTrie src/Dodge/Combine/Trie.hs 19;" f
combineAwareness src/Dodge/Creature/AlertLevel.hs 33;" f
combineAwareness src/Dodge/Creature/Perception.hs 109;" f
combineFloors src/Dodge/Room/Procedural.hs 171;" f
combineInventoryExtra src/Dodge/Render/HUD.hs 203;" f
combineItemListYouX src/Dodge/Combine.hs 34;" f
combineList src/Dodge/Combine.hs 37;" f
combineItemListYouX src/Dodge/Combine.hs 35;" f
combineList src/Dodge/Combine.hs 38;" f
combineRooms src/Dodge/Room/Procedural.hs 151;" f
combineS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 344;" f
combineTree src/Dodge/Tree/Compose.hs 66;" f
@@ -4856,9 +4857,9 @@ cutWallsWithPoints src/Dodge/LevelGen/StaticWalls.hs 112;" f
cyan src/Color.hs 18;" f
cycleDownEnum src/Dodge/Menu/OptionType.hs 27;" f
cycleEnum src/Dodge/Menu/OptionType.hs 22;" f
cycleGT src/IntMapHelp.hs 92;" f
cycleGT src/IntMapHelp.hs 95;" f
cycleL src/DoubleStack.hs 28;" f
cycleLT src/IntMapHelp.hs 95;" f
cycleLT src/IntMapHelp.hs 98;" f
cycleOptions src/Dodge/Menu/Option.hs 84;" f
cycleR src/DoubleStack.hs 32;" f
cylinderIndices src/Shader/Poke.hs 374;" f
@@ -5392,7 +5393,7 @@ findBlips src/Dodge/RadarSweep.hs 44;" f
findBoundDists src/Dodge/Update/Camera.hs 239;" f
findClosePoint src/Dodge/LevelGen/StaticWalls.hs 155;" f
findClosePoint src/Dodge/LevelGen/StaticWalls/Deprecated.hs 74;" f
findIndex src/IntMapHelp.hs 84;" f
findIndex src/IntMapHelp.hs 87;" f
findItemSlot src/Dodge/Inventory/CheckSlots.hs 26;" f
findReverseEdge src/Polyhedra.hs 49;" f
findReverseEdgeList src/Polyhedra.hs 56;" f
@@ -5420,7 +5421,7 @@ flameWall src/Dodge/Item/Weapon/SprayGuns.hs 54;" f
flamerPic src/Dodge/Item/Draw/SPic.hs 331;" f
flareCircleAt src/Dodge/WorldEvent/Flash.hs 46;" f
flatItemCombinations src/Dodge/Combine/Combinations.hs 49;" f
flatLookupItems src/Dodge/Combine.hs 29;" f
flatLookupItems src/Dodge/Combine.hs 30;" f
flatShield src/Dodge/Item/Held/Utility.hs 9;" f
flatShieldEquipSPic src/Dodge/Item/Draw/SPic.hs 392;" f
flattenIMIMIM src/Dodge/Base/Zone.hs 246;" f
@@ -5577,7 +5578,7 @@ gridPoints src/Grid.hs 67;" f
gridPoints' src/Grid.hs 79;" f
gridPoints'' src/Grid.hs 74;" f
gridPointsOff src/Grid.hs 62;" f
groupSplitItemAmounts src/Dodge/Combine.hs 24;" f
groupSplitItemAmounts src/Dodge/Combine.hs 25;" f
gruntS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 484;" f
guardDisconnectedID src/Dodge/Update/Scroll.hs 71;" f
gut1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 516;" f
@@ -5706,14 +5707,14 @@ insertAt src/Padding.hs 60;" f
insertIMInZone src/Dodge/Base.hs 59;" f
insertInTrie src/SimpleTrie.hs 18;" f
insertInZoneWith src/Dodge/Zone/Update.hs 17;" f
insertNewKey src/IntMapHelp.hs 63;" f
insertNewKey src/IntMapHelp.hs 66;" f
insertOneS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 368;" f
insertOver src/ListHelp.hs 47;" f
insertS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 318;" f
insertWall src/Dodge/Placement/PlaceSpot/Block.hs 122;" f
insertWallInZones src/Dodge/Wall/Zone.hs 20;" f
insertWalls src/Dodge/Placement/PlaceSpot/Block.hs 117;" f
insertWithNewKeys src/IntMapHelp.hs 69;" f
insertWithNewKeys src/IntMapHelp.hs 72;" f
intToBulAmmo src/Dodge/TweakBullet.hs 23;" f
internalHammerUpdate src/Dodge/Creature/State.hs 147;" f
interpWith src/Dodge/Creature/Boid.hs 10;" f
@@ -5755,8 +5756,9 @@ inventoryExtraH src/Dodge/Render/HUD.hs 195;" f
inventoryX src/Dodge/Creature.hs 115;" f
inverseShockwaveAt src/Dodge/WorldEvent/Shockwave.hs 43;" f
invertEncircleDistP src/Dodge/Creature/Boid.hs 13;" f
invertIntMap src/IntMapHelp.hs 101;" f
invertIntMap src/Multiset.hs 61;" f
invertInventoryToMap src/Dodge/Combine.hs 18;" f
invertInventoryToMap src/Dodge/Combine.hs 19;" f
invisibleChaseCrit src/Dodge/Creature/ChaseCrit.hs 25;" f
invisibleWall src/Dodge/Placement/Instance/Wall.hs 16;" f
isAmmoIntLink src/Dodge/HeldUse.hs 188;" f
@@ -6265,7 +6267,7 @@ nearSeg src/Dodge/Zone.hs 89;" f
nearSeg src/Dodge/Zoning/Common.hs 12;" f
newExtraAwareness src/Dodge/Creature/Perception.hs 137;" f
newHotkey src/Dodge/Hotkey.hs 18;" f
newKey src/IntMapHelp.hs 59;" f
newKey src/IntMapHelp.hs 62;" f
newMapKey src/Dodge/Config/KeyConfig.hs 33;" f
newSounds src/Dodge/Creature/Perception.hs 170;" f
newTextureFramebuffer src/Framebuffer/Setup.hs 16;" f
@@ -6868,7 +6870,7 @@ safeMinimumOnMaybe src/FoldableHelp.hs 67;" f
safeMinimumOnMaybeF src/FoldableHelp.hs 39;" f
safeMinimumOnMaybeL src/FoldableHelp.hs 57;" f
safeNormalizeV src/Geometry/Vector.hs 153;" f
safeSwapKeys src/IntMapHelp.hs 76;" f
safeSwapKeys src/IntMapHelp.hs 79;" f
safeUncons src/ListHelp.hs 72;" f
safeUpdateSingleNode src/Dodge/Tree/Polymorphic.hs 92;" f
safeUpdateSingleNode src/TreeHelp.hs 115;" f
@@ -7516,7 +7518,7 @@ unlockInv src/Dodge/Inventory/Lock.hs 9;" f
unpause src/Dodge/Menu.hs 192;" f
unsafeBlinkAction src/Dodge/Creature/Action/Blink.hs 52;" f
unsafeBlinkGun src/Dodge/Item/Weapon/Utility.hs 62;" f
unsafeSwapKeys src/IntMapHelp.hs 73;" f
unsafeSwapKeys src/IntMapHelp.hs 76;" f
unshadowBlock src/Dodge/Block.hs 38;" f
untilJust src/MonadHelp.hs 7;" f
untilJustCount src/MonadHelp.hs 14;" f