diff --git a/src/Dodge/Combine.hs b/src/Dodge/Combine.hs index c9d059bf4..365711f8a 100644 --- a/src/Dodge/Combine.hs +++ b/src/Dodge/Combine.hs @@ -50,6 +50,9 @@ invertListInv = IM.foldrWithKey (\k it -> ((_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 = concatMap lookupItems . invertListInvMult . yourInv diff --git a/src/Dodge/Render/Connectors.hs b/src/Dodge/Render/Connectors.hs index 02896e1b1..5fca360aa 100644 --- a/src/Dodge/Render/Connectors.hs +++ b/src/Dodge/Render/Connectors.hs @@ -1,5 +1,6 @@ module Dodge.Render.Connectors ( zConnect + , zConnectCol , bConnect , lConnect ) where @@ -13,6 +14,15 @@ zConnect (V2 x y) (V2 a b) = line $ map toV2 ,(0.5 * (x+a), b) ,(a, b) ] +zConnectCol :: Point2 -> Point2 -> Color -> Color -> Color -> Color -> Picture +zConnectCol (V2 x y) (V2 a b) c1 c2 c3 c4 = lineCol $ zip + ( map toV2 + [(x,y) + ,(0.5 * (x+a), y) + ,(0.5 * (x+a), b) + ,(a, b) + ] + ) [c1,c2,c3,c4] bConnect :: Point2 -> Point2 -> Picture bConnect (V2 x y) (V2 z w) = pictures diff --git a/src/Dodge/Render/HUD.hs b/src/Dodge/Render/HUD.hs index d89a8e0de..3a3963ef7 100644 --- a/src/Dodge/Render/HUD.hs +++ b/src/Dodge/Render/HUD.hs @@ -101,9 +101,11 @@ subInventoryDisplay cfig w = case _inventoryMode w of , fromMaybe mempty $ do i <- mi cpos <- combinePoss w !? i - lnks <- combineListLnks w !? i - return $ (lnkMidPosInvSels cfig w) cpos (snd lnks) - <> foldMap (cursorAtInvSel listCursorNESW cfig w) (snd lnks) + col <- (combineItemListYou w !? i) <&> _itInvColor . snd + lnks <- map fst (combineItemListYou w) !? i + return $ lnkMidPosInvSelsCol cfig w cpos col lnks + <> foldMap (cursorAtInvSel listCursorNESW cfig w) lnks + <> combineCounts cfig w lnks ] InspectInventory -> invHead cfig "INSPECT" where @@ -138,10 +140,25 @@ lnkMidInvSel cfig w lefti midi = winScale cfig hw = halfWidth cfig -lnkMidPosInvSels :: Configuration -> World -> Int -> [Int] -> Picture -lnkMidPosInvSels cfig w i = winScale cfig - . color white - . concatMap (zConnect rp . selNumMidHeight cfig w) +--lnkMidPosInvSels :: Configuration -> World -> Int -> [Int] -> Picture +--lnkMidPosInvSels cfig w i = winScale cfig +-- . color white +-- . concatMap (zConnect rp . selNumMidHeight cfig w) +-- where +---- lp ipos = V2 (150 - hw) ( hh - (20 * fromIntegral ipos + 17.5)) +-- rp = V2 (190 - hw) ( hh - (20 * fromIntegral i + 77.5)) +-- hh = halfHeight cfig +-- hw = halfWidth cfig + +combineCounts :: Configuration -> World -> [Int] -> Picture +combineCounts cfig w = winScale cfig . foldMap f . group + where + f (i:is) = uncurryV translate (V2 10 5 +.+ selNumMidHeight cfig w i) . scale 0.1 0.1 . text . show $ length is + 1 + f _ = mempty + +lnkMidPosInvSelsCol :: Configuration -> World -> Int -> Color -> [Int] -> Picture +lnkMidPosInvSelsCol cfig w i col = winScale cfig + . concatMap (\j -> zConnectCol rp (selNumMidHeight cfig w j) col white white (selNumCol j w)) where -- lp ipos = V2 (150 - hw) ( hh - (20 * fromIntegral ipos + 17.5)) rp = V2 (190 - hw) ( hh - (20 * fromIntegral i + 77.5)) @@ -161,9 +178,6 @@ combineListStringPictures w = case concatMap (itemText . snd) . combineItemListY [] -> [text "NO POSSIBLE COMBINATIONS"] xs -> xs -combineListLnks :: World -> [(Int,[Int])] -combineListLnks = zip [0..] . map fst . combineItemListYou - ammoTweakStrings :: Maybe Item -> [String] ammoTweakStrings it = case it ^? _Just . itTweaks . tweakParams of Just l -> map tweakString $ IM.elems l