From abdfd022ae8ee41439a8d8b2577db9f0e28760d9 Mon Sep 17 00:00:00 2001 From: Sevenfm Date: Tue, 18 Jan 2022 22:05:01 +0000 Subject: [PATCH] Implements mouse wheel scrolling for switching mercs in strategic map when hovering mouse above teamlist, character inventory and character info panels (by Asdow). Simplified the r9266 inventory scrolling and made it obey inverted mouse wheel scrolling direction that is in the options screen (by Asdow). git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9267 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- .../Map Screen Interface Map Inventory.cpp | 61 ++++--------------- Strategic/mapscreen.cpp | 23 +++++++ 2 files changed, 34 insertions(+), 50 deletions(-) diff --git a/Strategic/Map Screen Interface Map Inventory.cpp b/Strategic/Map Screen Interface Map Inventory.cpp index da29dd6f..fbe8313a 100644 --- a/Strategic/Map Screen Interface Map Inventory.cpp +++ b/Strategic/Map Screen Interface Map Inventory.cpp @@ -213,7 +213,6 @@ UINT32 uiNumberOfUnSeenItems = 0; //MOUSE_REGION MapInventoryPoolSlots[ MAP_INVENTORY_POOL_SLOT_COUNT ]; MOUSE_REGION MapInventoryPoolSlots[ MAP_INVENTORY_POOL_MAX_SLOTS ]; MOUSE_REGION MapInventoryPoolMask; -MOUSE_REGION MapInventoryPageScrollArea; // HEADROCK HAM 5: This rectangle describes the inventory. It is used to limit cursor movement while waiting for zoom input. SGPRect MapInventoryRect; @@ -925,14 +924,6 @@ void CreateDestroyMapInventoryPoolButtons( BOOLEAN fExitFromMapScreen ) // create buttons CreateMapInventoryButtons( ); - // Create mouseregion for page scroll - MSYS_DefineRegion( - &MapInventoryPageScrollArea, - UI_MAP.BorderRegion.x, UI_MAP.BorderRegion.y, - UI_MAP.BorderRegion.x + UI_MAP.BorderRegion.width, UI_MAP.BorderRegion.y + UI_MAP.BorderRegion.height, - MSYS_PRIORITY_NORMAL, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, MSYS_NO_CALLBACK - ); - // Flugente: certain features need to alter an item's temperature value depending on the time passed // if we do these functions here and adjust for the time passed since this sector was loaded last, it will seem to the player // as if these checks are always performed in any sector @@ -985,8 +976,6 @@ void CreateDestroyMapInventoryPoolButtons( BOOLEAN fExitFromMapScreen ) DestroyInventoryPoolDoneButton( ); - MSYS_RemoveRegion(&MapInventoryPageScrollArea); - // HEADROCK HAM 5: Destroy big item graphics. if (fMapInventoryZoom) { @@ -6318,53 +6307,25 @@ void HandleSectorCooldownFunctions( INT16 sMapX, INT16 sMapY, INT8 sMapZ, std::v } -void ResetMapInventoryWheelStates(void) -{ - MapInventoryPageScrollArea.WheelState = 0; - for (UINT32 i = 0; i < MAP_INVENTORY_POOL_SLOT_COUNT; i++) - { - MapInventoryPoolSlots[i].WheelState = 0; - } -} void HandleMousePageScroll(void) { - boolean scroll = false; - if (MapInventoryPageScrollArea.WheelState > 0) + SGPPoint MousePos; + GetMousePos(&MousePos); + const auto x = MousePos.iX; + const auto y = MousePos.iY; + if ( (UI_MAP.BorderRegion.x < x && x < (UI_MAP.BorderRegion.x + UI_MAP.BorderRegion.width)) && (UI_MAP.BorderRegion.y < y && y < (UI_MAP.BorderRegion.y + UI_MAP.BorderRegion.height)) ) { - scroll = true; - } - for (UINT32 i = 0; i < MAP_INVENTORY_POOL_SLOT_COUNT; i++) - { - if (MapInventoryPoolSlots[i].WheelState > 0) + const auto Wheelstate = _WheelValue * (gGameSettings.fOptions[TOPTION_INVERT_WHEEL] ? -1 : 1); + if (Wheelstate < 0) { - scroll = true; - break; + MapInvNextPage(); } - } - if (scroll == true) - { - MapInvPreviousPage(); - ResetMapInventoryWheelStates(); - return; - } - - if (MapInventoryPageScrollArea.WheelState < 0) - { - scroll = true; - } - for (UINT32 i = 0; i < MAP_INVENTORY_POOL_SLOT_COUNT; i++) - { - if (MapInventoryPoolSlots[i].WheelState < 0) + else if (Wheelstate > 0) { - scroll = true; - break; + MapInvPreviousPage(); } - } - if (scroll == true) - { - MapInvNextPage(); - ResetMapInventoryWheelStates(); + _WheelValue = 0; } } diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 9b5d20b3..b4c0ff45 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -9025,6 +9025,29 @@ void PollWheelInMapView(UINT32 *puiNewEvent) } } + // Scroll through mercenaries if the mouse is inside any of these three panels. Couldn't use MOUSE_REGION wheelstates because it would've been messy due to the panels having higher priority mouse regions on top of the larger areas. + // This way there are only three cleanly defined areas to check for. + SGPPoint MousePos; + GetMousePos(&MousePos); + const auto x = MousePos.iX; + const auto y = MousePos.iY; + if ( + ( (UI_CHARINV.Region.x < x && x < (UI_CHARINV.Region.x + UI_CHARINV.Region.width)) && (UI_CHARINV.Region.y < y && y < (UI_CHARINV.Region.y + UI_CHARINV.Region.height)) ) || + ((UI_CHARPANEL.Region.x < x && x < (UI_CHARPANEL.Region.x + UI_CHARPANEL.Region.width)) && (UI_CHARPANEL.Region.y < y && y < (UI_CHARPANEL.Region.y + UI_CHARPANEL.Region.height))) || + ((UI_CHARLIST.Region.x < x && x < (UI_CHARLIST.Region.x + UI_CHARLIST.Region.width)) && (UI_CHARLIST.Region.y < y && y < (UI_CHARLIST.Region.y + UI_CHARLIST.Region.height))) + ) + { + const auto Wheelstate = _WheelValue * (gGameSettings.fOptions[TOPTION_INVERT_WHEEL] ? -1 : 1); + if (Wheelstate < 0) + { + GoToNextCharacterInList(); + } + else if (Wheelstate > 0) + { + GoToPrevCharacterInList(); + } + _WheelValue = 0; + } } void PollLeftButtonInMapView( UINT32 *puiNewEvent )