diff --git a/src/Dodge/Data/SelectionList.hs b/src/Dodge/Data/SelectionList.hs index 919493261..2d91c8b3a 100644 --- a/src/Dodge/Data/SelectionList.hs +++ b/src/Dodge/Data/SelectionList.hs @@ -6,7 +6,6 @@ module Dodge.Data.SelectionList where import Color import Picture.Data import Control.Lens -import Data.Set (Set) import Dodge.Data.CardinalPoint --import Data.Aeson --import Data.Aeson.TH @@ -33,7 +32,7 @@ data SelectionWidth = FixedSelectionWidth Int | UseMaxSelectionItemWidth data CursorType = NoCursor - | BorderCursor (Set CardinalPoint) + | BorderCursor [CardinalPoint] data SelectionItem a = SelectionItem { _siPictures :: [Picture] diff --git a/src/Dodge/Menu/Option.hs b/src/Dodge/Menu/Option.hs index 2becdc9d0..b81597712 100644 --- a/src/Dodge/Menu/Option.hs +++ b/src/Dodge/Menu/Option.hs @@ -4,7 +4,6 @@ module Dodge.Menu.Option where import Data.Maybe --import Dodge.WindowLayout -import qualified Data.Set as Set import Dodge.Data.CardinalPoint import Dodge.Data.SelectionList import Dodge.Data.Universe @@ -21,7 +20,7 @@ optionListDisplayParams = , _ldpScale = 2 , _ldpVerticalGap = 30 , _ldpWidth = FixedSelectionWidth 50 - , _ldpCursorType = BorderCursor (Set.fromList [North, South, West]) + , _ldpCursorType = BorderCursor [North, South, West] } initializeOptionMenu :: String -> [MenuOption] -> PositionedMenuOption -> Universe -> ScreenLayer diff --git a/src/Dodge/Render/HUD.hs b/src/Dodge/Render/HUD.hs index 086e13911..59fd50532 100644 --- a/src/Dodge/Render/HUD.hs +++ b/src/Dodge/Render/HUD.hs @@ -14,7 +14,8 @@ import qualified Data.Vector as V import Dodge.Base import Dodge.Clock import Dodge.Combine -import Dodge.Data.Universe +import Dodge.Data.World +import Dodge.Data.Config import Dodge.Inventory import Dodge.Inventory.ItemSpace import Dodge.Item.Display @@ -28,28 +29,22 @@ import ListHelp import Padding import Picture import SDL (MouseButton (..)) -import qualified Data.Set as Set -drawHUD :: Universe -> Picture -drawHUD uv = case w ^. cWorld . lWorld . hud . hudElement of +drawHUD :: Configuration -> World -> Picture +drawHUD cfig w = case w ^. cWorld . lWorld . hud . hudElement of DisplayCarte -> drawCarte cfig w DisplayInventory subinv -> - drawInGameHUD sl uv + drawInGameHUD sl cfig w <> drawSubInventory subinv cfig w where sl = makeInventorySelectionList w - w = _uvWorld uv - cfig = _uvConfig uv -drawInGameHUD :: SelectionList () -> Universe -> Picture -drawInGameHUD sl uv = +drawInGameHUD :: SelectionList () -> Configuration -> World -> Picture +drawInGameHUD sl cfig w = pictures [ winScale cfig . dShadCol white $ displayHP 0 cfig w - , inventoryDisplay sl cfig w + , inventoryDisplay w cfig sl ] - where - w = _uvWorld uv - cfig = _uvConfig uv defaultListDisplayParams :: ListDisplayParams defaultListDisplayParams = ListDisplayParams @@ -71,8 +66,8 @@ subInvListDisplayParams = ListDisplayParams , _ldpWidth = FixedSelectionWidth 15 } -subInvSelectionList :: SelectionList a -subInvSelectionList = SelectionList +defaultSubInvSelectionList :: SelectionList a +defaultSubInvSelectionList = SelectionList { _slItems = [] , _slSelPos = Nothing , _slLength = 0 @@ -81,15 +76,15 @@ subInvSelectionList = SelectionList invDisplayParams :: World -> ListDisplayParams invDisplayParams w = defaultListDisplayParams & ldpWidth .~ FixedSelectionWidth topInvW - & ldpCursorType .~ BorderCursor (Set.fromList selcursortype) + & ldpCursorType .~ BorderCursor selcursortype & ldpWidth .~ FixedSelectionWidth (determineInvSelCursorWidth w) where selcursortype | ButtonRight `M.member` _mouseButtons (_input w) = [North,South,East,West] | otherwise = [North,South,West] -inventoryDisplay :: SelectionList () -> Configuration -> World -> Picture -inventoryDisplay sl cfig w = drawSelectionList (invDisplayParams w) cfig sl +inventoryDisplay :: World -> Configuration -> SelectionList () -> Picture +inventoryDisplay w = drawSelectionList (invDisplayParams w) drawSubInventory :: SubInventory -> Configuration -> World -> Picture drawSubInventory subinv cfig w = case subinv of @@ -102,7 +97,7 @@ drawSubInventory subinv cfig w = case subinv of , rboptions ] TweakInventory mtweaki -> - titledSub "TWEAK" (subInvSelectionList & slItems .~ ammoTweakSelectionItems it) + titledSub "TWEAK" (defaultSubInvSelectionList & slItems .~ ammoTweakSelectionItems it) [ selcursor' listCursorNESW , fromMaybe mempty $ do tweaki <- mtweaki @@ -136,7 +131,7 @@ drawSubInventory subinv cfig w = case subinv of ] ] InspectInventory -> - titledSub "INSPECT" (subInvSelectionList & slItems .~ textSelItems (itmInfo it)) + titledSub "INSPECT" (defaultSubInvSelectionList & slItems .~ textSelItems (itmInfo it)) [ selcursor' listCursorNESW ] where @@ -145,7 +140,7 @@ drawSubInventory subinv cfig w = case subinv of extrapics closeobjectcursor = case selectedCloseObject w of Nothing -> mempty - Just (i,_) -> drawCursorAt (invDisplayParams w & ldpCursorType .~ BorderCursor (Set.fromList [North,South])) cfig (Just i) (inventorySelectionList w) + Just (i,_) -> drawCursorAt (invDisplayParams w & ldpCursorType .~ BorderCursor [North,South]) cfig (Just i) (inventorySelectionList w) itcol = fromMaybe (greyN 0.5) (it ^? _Just . itInvColor) cr = you w it = yourItem w @@ -289,7 +284,7 @@ determineInvSelCursorWidth w = case _rbOptions w of else topInvW combineListSelection :: World -> SelectionList () -combineListSelection w = subInvSelectionList & slItems .~ combineListSelectionItems w +combineListSelection w = defaultSubInvSelectionList & slItems .~ combineListSelectionItems w combineListSelectionItems :: World -> [SelectionItem ()] combineListSelectionItems w = case combineListSelectionItems' w of diff --git a/src/Dodge/Render/List.hs b/src/Dodge/Render/List.hs index f6c573382..453a8f22d 100644 --- a/src/Dodge/Render/List.hs +++ b/src/Dodge/Render/List.hs @@ -2,8 +2,6 @@ module Dodge.Render.List where import Data.Foldable import Data.Maybe -import Data.Set (Set) -import qualified Data.Set as Set import Dodge.Base.WinScale import Dodge.Base.Window import Dodge.Data.CardinalPoint @@ -74,7 +72,7 @@ stackPicturesAtOff tx ty cfig i = mconcat . zipWith (listTextPictureAt tx ty cfi listCursorChooseBorderScale :: Float -> Float -> - Set CardinalPoint -> + [CardinalPoint] -> Float -> Float -> Configuration -> @@ -99,12 +97,12 @@ listCursorChooseBorderScale ygap s borders xoff yoff cfig yint col cursxsize cur -- the width of a character appears to be 9(?!) -- this is probably because it is 8 pixels plus one for the border listCursorChooseBorder :: - Set CardinalPoint -> Float -> Float -> Configuration -> Int -> Color -> Int -> Int -> Picture + [CardinalPoint] -> Float -> Float -> Configuration -> Int -> Color -> Int -> Int -> Picture listCursorChooseBorder = listCursorChooseBorderScale 10 1 -- note we cannot simply scale lines because they are drawn as solid rectangles -chooseCursorBorders :: Float -> Float -> Set CardinalPoint -> Picture -chooseCursorBorders wth hgt = fold . Set.map (line . toLine) +chooseCursorBorders :: Float -> Float -> [CardinalPoint] -> Picture +chooseCursorBorders wth hgt = fold . map (line . toLine) where top = 0 bot = - hgt @@ -115,16 +113,16 @@ chooseCursorBorders wth hgt = fold . Set.map (line . toLine) toLine West = [V2 lef bot, V2 lef top] listCursorNS :: Float -> Float -> Configuration -> Int -> Color -> Int -> Int -> Picture -listCursorNS = listCursorChooseBorder (Set.fromList [North, South]) +listCursorNS = listCursorChooseBorder [North, South] listCursorNES :: Float -> Float -> Configuration -> Int -> Color -> Int -> Int -> Picture -listCursorNES = listCursorChooseBorder (Set.fromList [North, South, East]) +listCursorNES = listCursorChooseBorder [North, South, East] listCursorNESW :: Float -> Float -> Configuration -> Int -> Color -> Int -> Int -> Picture -listCursorNESW = listCursorChooseBorder (Set.fromList [North, South, East, West]) +listCursorNESW = listCursorChooseBorder [North, South, East, West] listCursorNSW :: Float -> Float -> Configuration -> Int -> Color -> Int -> Int -> Picture -listCursorNSW = listCursorChooseBorder (Set.fromList [North, South, West]) +listCursorNSW = listCursorChooseBorder [North, South, West] fillScreenText :: Configuration -> String -> Picture fillScreenText cfig str = diff --git a/src/Dodge/Render/MenuScreen.hs b/src/Dodge/Render/MenuScreen.hs index e853c8105..ddaab35a4 100644 --- a/src/Dodge/Render/MenuScreen.hs +++ b/src/Dodge/Render/MenuScreen.hs @@ -3,10 +3,8 @@ module Dodge.Render.MenuScreen ( drawMenuScreen, ) where ---import LensHelp import Dodge.Base.WinScale import Dodge.Data.SelectionList ---import Dodge.Menu.Option import Dodge.Render.List import qualified Data.Text as T import Dodge.Base.Window @@ -73,4 +71,3 @@ drawFooterText cfig col = color col . placeString (- hw + 30) (- hh + 10) 0.1 where hh = halfHeight cfig hw = halfWidth cfig - diff --git a/src/Dodge/Render/Picture.hs b/src/Dodge/Render/Picture.hs index 2a51f033d..86132d4ff 100644 --- a/src/Dodge/Render/Picture.hs +++ b/src/Dodge/Render/Picture.hs @@ -22,7 +22,7 @@ fixedCoordPictures u = drawMenuOrHUD cfig u drawMenuOrHUD :: Configuration -> Universe -> Picture drawMenuOrHUD cfig u = case u ^. uvScreenLayers of - [] -> drawHUD u + [] -> drawHUD (u ^. uvConfig) (u ^. uvWorld) (lay : _) -> drawMenuScreen cfig lay drawConcurrentMessage :: Universe -> Picture