Move mouse button imputs to your input

This commit is contained in:
2022-06-29 12:34:15 +01:00
parent 4b8155ae16
commit e24f89217a
2 changed files with 49 additions and 43 deletions
+1 -31
View File
@@ -68,7 +68,7 @@ handleMouseMotionEvent mmev u = Just $ u & uvWorld . mousePos .~ V2
handleMouseButtonEvent :: MouseButtonEventData -> World -> World handleMouseButtonEvent :: MouseButtonEventData -> World -> World
handleMouseButtonEvent mbev = case mouseButtonEventMotion mbev of handleMouseButtonEvent mbev = case mouseButtonEventMotion mbev of
Released -> mouseButtons . at thebutton .~ Nothing Released -> mouseButtons . at thebutton .~ Nothing
Pressed -> handlePressedMouseButton thebutton . (mouseButtons . at thebutton ?~ False) Pressed -> mouseButtons . at thebutton ?~ False
where where
thebutton = mouseButtonEventButton mbev thebutton = mouseButtonEventButton mbev
@@ -94,36 +94,6 @@ handleResizeEvent sev u = return . Just $ u
V2 x' y' = windowSizeChangedEventSize sev V2 x' y' = windowSizeChangedEventSize sev
divRes = resFactorNum $ u ^. config . graphics_resolution_factor divRes = resFactorNum $ u ^. config . graphics_resolution_factor
handlePressedMouseButton :: MouseButton -> World -> World
handlePressedMouseButton but w = case (_hudElement (_hud w), but) of
(DisplayCarte,_) -> w & clickMousePos .~ _mousePos w
(_,ButtonMiddle) -> w & clickMousePos .~ _mousePos w
( DisplayInventory (DisplayTerminal tmid) , ButtonLeft)
| inTermFocus w -> doTerminalEffectLB (w ^?! terminals . ix tmid) w
| otherwise -> w & terminals . ix tmid . tmInput . tiFocus %~ const True
( DisplayInventory (CombineInventory mi) , ButtonLeft)
-> maybeexitcombine $ maybe id doCombine mi w
_ -> w
where
maybeexitcombine
| ButtonRight `M.member` _mouseButtons w = id
| otherwise = hud . hudElement .~ DisplayInventory NoSubInventory
-- note "sort" on the inventory indices; otherwise
-- lower items may be shifted up and items below these removed instead
doCombine :: Int -> World -> World
doCombine i w = case combineItemListYou w !? i of
Nothing -> w
Just (is,it) -> -- set (hud . hudElement) (DisplayInventory NoSubInventory)
selectinv --enterCombineInv
. createPutItem it
$ foldr (rmInvItem yid) w (sort is)
where
yid = _yourID w
selectinv (Just i', w') = w' & creatures . ix yid . crInvSel .~ InvSel i' NoInvSelAction
selectinv (Nothing, w') = w'
handleMouseWheelEvent :: MouseWheelEventData -> Universe -> Maybe Universe handleMouseWheelEvent :: MouseWheelEventData -> Universe -> Maybe Universe
handleMouseWheelEvent mwev w = case _menuLayers w of handleMouseWheelEvent mwev w = case _menuLayers w of
[] -> case mouseWheelEventPos mwev of [] -> case mouseWheelEventPos mwev of
+48 -12
View File
@@ -5,8 +5,14 @@ module Dodge.Update.UsingInput
import Dodge.Data import Dodge.Data
import Dodge.Base.You import Dodge.Base.You
import Dodge.Creature.Impulse.UseItem import Dodge.Creature.Impulse.UseItem
import Dodge.Terminal
import Dodge.InputFocus
import Dodge.Combine
import Dodge.Inventory
import Dodge.Inventory.Add
import Geometry import Geometry
import ListHelp
import SDL import SDL
--import qualified Data.Set as S --import qualified Data.Set as S
import qualified Data.Map.Strict as M import qualified Data.Map.Strict as M
@@ -14,21 +20,35 @@ import Control.Lens
updateUsingInput :: World -> World updateUsingInput :: World -> World
updateUsingInput w = case _hudElement $ _hud w of updateUsingInput w = case _hudElement $ _hud w of
DisplayInventory {} -> updatePressedButtons (_mouseButtons w) w DisplayInventory subinv
DisplayCarte -> updatePressedButtonsCarte (_mouseButtons w) w -> updatePressedButtons subinv (_mouseButtons w) w
DisplayCarte
-> updatePressedButtonsCarte (_mouseButtons w) w
-- ugly check for subinventory inventory hammer, this should change -- ugly check for subinventory inventory hammer, this should change
updatePressedButtons :: M.Map MouseButton Bool -> World -> World updatePressedButtons :: SubInventory -> M.Map MouseButton Bool -> World -> World
updatePressedButtons pkeys w updatePressedButtons subinv pkeys w = case subinv of
| ButtonLeft `M.member` pkeys && NoSubInventory
(inSubInv || w ^?! hammers . ix SubInvHam /= HammerUp) | ButtonLeft `M.member` pkeys && w ^?! hammers . ix SubInvHam /= HammerUp
= undefined --w & hammers . ix SubInvHam .~ HammerDown -> w & hammers . ix SubInvHam .~ HammerDown
| otherwise = updatePressedButtons' pkeys w | otherwise -> updatePressedButtons' pkeys w
CombineInventory mi
| pkeys ^? ix ButtonLeft == Just False
-> (maybeexitcombine $ maybe id doCombine mi w) & hammers . ix SubInvHam .~ HammerDown
DisplayTerminal tmid
| pkeys ^? ix ButtonLeft == Just False && inTermFocus w
-> doTerminalEffectLB (w ^?! terminals . ix tmid) w
& hammers . ix SubInvHam .~ HammerDown
| pkeys ^? ix ButtonLeft == Just False
-> w & terminals . ix tmid . tmInput . tiFocus %~ const True
& hammers . ix SubInvHam .~ HammerDown
_ | ButtonLeft `M.member` pkeys
-> w & hammers . ix SubInvHam .~ HammerDown
_ -> w
where where
inSubInv = case _hudElement (_hud w) of maybeexitcombine
DisplayInventory NoSubInventory -> False | ButtonRight `M.member` _mouseButtons w = id
DisplayInventory _ -> True | otherwise = hud . hudElement .~ DisplayInventory NoSubInventory
_ -> False
updatePressedButtons' :: M.Map MouseButton Bool -> World -> World updatePressedButtons' :: M.Map MouseButton Bool -> World -> World
updatePressedButtons' pkeys w updatePressedButtons' pkeys w
@@ -52,6 +72,22 @@ updatePressedButtons' pkeys w
isDown but = but `M.member` pkeys isDown but = but `M.member` pkeys
rotation = angleBetween (_mousePos w) (_clickMousePos w) rotation = angleBetween (_mousePos w) (_clickMousePos w)
-- note "sort" on the inventory indices; otherwise
-- lower items may be shifted up and items below these removed instead
doCombine :: Int -> World -> World
doCombine i w = case combineItemListYou w ^? ix i of
Nothing -> w
Just (is,it) -> -- set (hud . hudElement) (DisplayInventory NoSubInventory)
selectinv --enterCombineInv
. createPutItem it
$ foldr (rmInvItem yid) w (sort is)
where
yid = _yourID w
selectinv (Just i', w') = w' & creatures . ix yid . crInvSel .~ InvSel i' NoInvSelAction
selectinv (Nothing, w') = w'
updatePressedButtonsCarte :: M.Map MouseButton Bool -> World -> World updatePressedButtonsCarte :: M.Map MouseButton Bool -> World -> World
updatePressedButtonsCarte pkeys w updatePressedButtonsCarte pkeys w
| isDown ButtonRight = w | isDown ButtonRight = w