Implement combining of items
This commit is contained in:
+43
-13
@@ -4,15 +4,17 @@ module Dodge.Render.HUD
|
||||
) where
|
||||
import Dodge.Data
|
||||
import Dodge.WinScale
|
||||
import Dodge.Combine
|
||||
import Dodge.Base
|
||||
import Dodge.Base.Window
|
||||
import Dodge.Combine.Combinations
|
||||
--import Dodge.Combine.Combinations
|
||||
import Dodge.Inventory
|
||||
import Dodge.Render.Connectors
|
||||
import Dodge.Render.List
|
||||
import Picture
|
||||
import Geometry
|
||||
import Padding
|
||||
import ListHelp
|
||||
|
||||
--import Data.Foldable
|
||||
import Data.Maybe
|
||||
@@ -20,6 +22,7 @@ import qualified Data.IntMap.Strict as IM
|
||||
import qualified Data.Set as S
|
||||
import Control.Lens
|
||||
import SDL (MouseButton (..))
|
||||
--import Data.List
|
||||
--import Data.Bifunctor
|
||||
|
||||
hudDrawings :: Configuration -> World -> Picture
|
||||
@@ -35,7 +38,8 @@ subInventoryDisplay :: Configuration -> World -> Picture
|
||||
subInventoryDisplay cfig w = case _inventoryMode w of
|
||||
LockedInventory -> mempty -- topInvCursor col cursPos cfig w
|
||||
TopInventory -> pictures
|
||||
[ --closeObjectTexts cfig w
|
||||
[ --closeObjectTexts cfig w
|
||||
selcursor
|
||||
]
|
||||
TweakInventory -> pictures
|
||||
[ mCurs it cfig w
|
||||
@@ -43,9 +47,17 @@ subInventoryDisplay cfig w = case _inventoryMode w of
|
||||
, cursorsZ cfig cursPos it
|
||||
, displayMidList cfig (ammoTweakStrings it) "TWEAK"
|
||||
]
|
||||
CombineInventory ->
|
||||
displayMidList cfig (combineListStrings w) "COMBINE"
|
||||
-- invHead cfig "COMBINE"
|
||||
CombineInventory mi -> pictures
|
||||
[ invHead cfig "COMBINE"
|
||||
, listTextPicturesAt 150 60 cfig $ map text $ combineListStrings w
|
||||
, fromMaybe mempty $ do
|
||||
i <- mi
|
||||
return $ listCursorAt 150 60 cfig i white 10 1
|
||||
, fromMaybe mempty $ do
|
||||
i <- mi
|
||||
lnks <- combineListLnks w !? i
|
||||
return $ uncurry (lnkMidPosInvSels cfig w) lnks
|
||||
]
|
||||
InspectInventory -> invHead cfig "INSPECT"
|
||||
where
|
||||
itCol = fromMaybe (greyN 0.5) . (^? _Just . itInvColor)
|
||||
@@ -53,6 +65,24 @@ subInventoryDisplay cfig w = case _inventoryMode w of
|
||||
it = yourItem w
|
||||
col = itCol it
|
||||
cursPos = invSelPos w
|
||||
selcursor
|
||||
| IM.null inv && null (_closeObjects w) = mempty
|
||||
| otherwise = listCursorAt 0 0 cfig curpos white curx cury
|
||||
inv = _crInv cr
|
||||
curpos = invSelPos w
|
||||
curx = 10
|
||||
cury = fromMaybe 1 $ augmentedInvSizes w IM.!? _crInvSel (you w)
|
||||
cr = _creatures w IM.! 0
|
||||
|
||||
lnkMidPosInvSels :: Configuration -> World -> Int -> [Int] -> Picture
|
||||
lnkMidPosInvSels cfig w i is = winScale cfig . color white
|
||||
. concatMap
|
||||
(zConnect rp) $ map (lp . flip selNumPos w) is
|
||||
where
|
||||
lp ipos = V2 (125 - hw) ( hh - (20 * fromIntegral ipos + 17.5))
|
||||
rp = (V2 (155 - hw) ( hh - (20 * fromIntegral i + 77.5)))
|
||||
hh = halfHeight cfig
|
||||
hw = halfWidth cfig
|
||||
|
||||
cursorsZ :: Configuration -> Int -> Maybe Item -> Picture
|
||||
cursorsZ cfig ipos it = case it ^? _Just . itTweaks . tweakSel of
|
||||
@@ -64,8 +94,12 @@ cursorsZ cfig ipos it = case it ^? _Just . itTweaks . tweakSel of
|
||||
hw = halfWidth cfig
|
||||
sp = V2 (125 - hw) ( hh - (20 * fromIntegral ipos + 17.5))
|
||||
|
||||
|
||||
combineListStrings :: World -> [String]
|
||||
combineListStrings = map (show . snd) . combineList . fmap _itCombineType . yourInv
|
||||
combineListStrings = map (show . snd) . combineListYou
|
||||
|
||||
combineListLnks :: World -> [(Int,[Int])]
|
||||
combineListLnks = zip [0..] . map fst . combineListYou
|
||||
|
||||
ammoTweakStrings :: Maybe Item -> [String]
|
||||
ammoTweakStrings it = case it ^? _Just . itTweaks . tweakParams of
|
||||
@@ -107,12 +141,8 @@ invHead cfig s = winScale cfig
|
||||
displayInv :: Int -> Configuration -> World -> Picture
|
||||
displayInv n cfig w = listTextPicturesAt 0 0 cfig invlist
|
||||
<> equipcursor
|
||||
<> selcursor
|
||||
<> closeobjectcursor
|
||||
where
|
||||
selcursor
|
||||
| IM.null inv && null (_closeObjects w) = mempty
|
||||
| otherwise = listCursorAt 0 0 cfig curpos white curx cury
|
||||
closeobjectcursor = case selectedCloseObject w of
|
||||
Nothing -> mempty
|
||||
Just (i,_) -> listCursorAt 50 0 cfig (selNumPos i w) blue 15 (invSelSize i w)
|
||||
@@ -124,9 +154,9 @@ displayInv n cfig w = listTextPicturesAt 0 0 cfig invlist
|
||||
0 -> [color invDimColor . text $ " INVENTORY FULL"]
|
||||
1 -> [color invDimColor . text $ " +1 FREE SLOT"]
|
||||
x -> [color invDimColor . text $ " +" ++ show x ++ " FREE SLOTS"]
|
||||
curpos = invSelPos w
|
||||
curx = 10
|
||||
cury = fromMaybe 1 $ augmentedInvSizes w IM.!? _crInvSel (you w)
|
||||
--curpos = invSelPos w
|
||||
--curx = 10
|
||||
--cury = fromMaybe 1 $ augmentedInvSizes w IM.!? _crInvSel (you w)
|
||||
equipcursor = case _crLeftInvSel cr of
|
||||
Nothing -> mempty
|
||||
Just invid -> openCursorAt 20 yellow 0 0 (selNumPos invid w) cfig
|
||||
|
||||
@@ -35,14 +35,14 @@ listCursorAt xoff yoff cfig yint col cursxsize cursysize = winScale cfig
|
||||
|
||||
listTextPictureAt :: Float -> Float -> Configuration -> Int -> Picture -> Picture
|
||||
listTextPictureAt xoff yoff cfig yint = winScale cfig
|
||||
. translate (xoff + 15 - hw) (yoff + hh - (20 * (fromIntegral yint+1)))
|
||||
. translate (xoff + 15 - hw) (negate yoff + hh - (20 * (fromIntegral yint+1)))
|
||||
. scale 0.1 0.1
|
||||
where
|
||||
hw = halfWidth cfig
|
||||
hh = halfHeight cfig
|
||||
|
||||
renderListAt :: Float -> Float -> Configuration -> [(String,Color)] -> Picture
|
||||
renderListAt tx ty cfig = listTextPicturesAt tx ty cfig . map (\(str,col) -> color col $ text str)
|
||||
renderListAt tx ty cfig = listTextPicturesAt tx (negate ty) cfig . map (\(str,col) -> color col $ text str)
|
||||
-- concatMapPic (winScale cfig) . zipWith (listPairAt tx ty cfig) [0..]
|
||||
|
||||
--TODO put the following functions in an appropriate place
|
||||
|
||||
Reference in New Issue
Block a user