diff options
author | Bendegúz Nagy | 2016-06-16 23:48:18 +0200 |
---|---|---|
committer | Bendegúz Nagy | 2016-08-26 23:02:22 +0200 |
commit | bcfe176df557b78adf9181a9dfea229ff3fadfe1 (patch) | |
tree | 696be9c1bbc48f5604fa8037d067f31d2fbc39f8 /engines | |
parent | 6b31b1bbc32ecb021de8b92a02e31621c7d8e45f (diff) | |
download | scummvm-rg350-bcfe176df557b78adf9181a9dfea229ff3fadfe1.tar.gz scummvm-rg350-bcfe176df557b78adf9181a9dfea229ff3fadfe1.tar.bz2 scummvm-rg350-bcfe176df557b78adf9181a9dfea229ff3fadfe1.zip |
DM: Add mouseclick processing
Diffstat (limited to 'engines')
-rw-r--r-- | engines/dm/dm.cpp | 12 | ||||
-rw-r--r-- | engines/dm/dm.h | 1 | ||||
-rw-r--r-- | engines/dm/eventman.cpp | 107 | ||||
-rw-r--r-- | engines/dm/eventman.h | 20 | ||||
-rw-r--r-- | engines/dm/gfx.cpp | 2 | ||||
-rw-r--r-- | engines/dm/gfx.h | 4 |
6 files changed, 112 insertions, 34 deletions
diff --git a/engines/dm/dm.cpp b/engines/dm/dm.cpp index 002068a650..44c90d245e 100644 --- a/engines/dm/dm.cpp +++ b/engines/dm/dm.cpp @@ -74,15 +74,15 @@ Common::Error DMEngine::run() { _dungeonMan->setCurrentMapAndPartyMap(dummyMapIndex); - - _displayMan->loadCurrentMapGraphics(); - _displayMan->loadPalette(gPalCredits); _eventMan->initMouse(); _eventMan->showMouse(true); + startGame(); + + while (true) { _eventMan->processInput(); _displayMan->clearScreen(kColorBlack); @@ -95,4 +95,10 @@ Common::Error DMEngine::run() { return Common::kNoError; } + +void DMEngine::startGame() { + _eventMan->_primaryMouseInput = gPrimaryMouseInput_Interface; + _eventMan->_secondaryMouseInput = gSecondaryMouseInput_Movement; +} + } // End of namespace DM diff --git a/engines/dm/dm.h b/engines/dm/dm.h index c381587abf..83f80e4327 100644 --- a/engines/dm/dm.h +++ b/engines/dm/dm.h @@ -76,6 +76,7 @@ enum { }; class DMEngine : public Engine { + void startGame(); // @ F0462_START_StartGame_CPSF public: DMEngine(OSystem *syst); ~DMEngine(); diff --git a/engines/dm/eventman.cpp b/engines/dm/eventman.cpp index 8bf5a5bdc9..f2ca15e0c5 100644 --- a/engines/dm/eventman.cpp +++ b/engines/dm/eventman.cpp @@ -6,21 +6,21 @@ -using namespace DM; +namespace DM { -MouseInput DM::gPrimaryMouseInput_Entrance[4] = { // @ G0445_as_Graphic561_PrimaryMouseInput_Entrance[4] +MouseInput gPrimaryMouseInput_Entrance[4] = { // @ G0445_as_Graphic561_PrimaryMouseInput_Entrance[4] /* { Command, Box.X1, Box.X2, Box.Y1, Box.Y2, Button } */ MouseInput(kCommandEntranceEnterDungeon, 244, 298, 45, 58, kLeftMouseButton), // Strangerke - C201_COMMAND_ENTRANCE_RESUME isn't present in the demo MouseInput(kCommandEntranceResume, 244, 298, 76, 93, kLeftMouseButton), MouseInput(kCommandEntranceDrawCredits, 248, 293, 187, 199, kLeftMouseButton), MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gPrimaryMouseInput_RestartGame[2] = { // @ G0446_as_Graphic561_PrimaryMouseInput_RestartGame[2] +MouseInput gPrimaryMouseInput_RestartGame[2] = { // @ G0446_as_Graphic561_PrimaryMouseInput_RestartGame[2] /* { Command, Box.X1, Box.X2, Box.Y1, Box.Y2, Button } */ MouseInput(kCommandRestartGame, 103, 217, 145, 159, kLeftMouseButton), MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gPrimaryMouseInput_Interface[20] = { // @ G0447_as_Graphic561_PrimaryMouseInput_Interface[20] +MouseInput gPrimaryMouseInput_Interface[20] = { // @ G0447_as_Graphic561_PrimaryMouseInput_Interface[20] /* { Command, Box.X1, Box.X2, Box.Y1, Box.Y2, Button } */ MouseInput(kCommandClickInChampion_0_StatusBox, 0, 42, 0, 28, kLeftMouseButton), MouseInput(kCommandClickInChampion_1_StatusBox, 69, 111, 0, 28, kLeftMouseButton), @@ -42,7 +42,7 @@ MouseInput DM::gPrimaryMouseInput_Interface[20] = { // @ G0447_as_Graphic561_Pri MouseInput(kCommandClickInActionArea, 233, 319, 77, 121, kLeftMouseButton), MouseInput(kCommandFreezeGame, 0, 1, 198, 199, kLeftMouseButton), MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gSecondaryMouseInput_Movement[9] = { // @ G0448_as_Graphic561_SecondaryMouseInput_Movement[9] +MouseInput gSecondaryMouseInput_Movement[9] = { // @ G0448_as_Graphic561_SecondaryMouseInput_Movement[9] /* { Command, Box.X1, Box.X2, Box.Y1, Box.Y2, Button } */ MouseInput(kCommandTurnLeft, 234, 261, 125, 145, kLeftMouseButton), MouseInput(kCommandMoveForward, 263, 289, 125, 145, kLeftMouseButton), @@ -53,7 +53,7 @@ MouseInput DM::gSecondaryMouseInput_Movement[9] = { // @ G0448_as_Graphic561_Sec MouseInput(kCommandClickInDungeonView, 0, 223, 33, 168, kLeftMouseButton), MouseInput(kCommandToggleInventoryLeader, 0, 319, 33, 199, kRightMouseButton), MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gSecondaryMouseInput_ChampionInventory[38] = { // @ G0449_as_Graphic561_SecondaryMouseInput_ChampionInventory[38] +MouseInput gSecondaryMouseInput_ChampionInventory[38] = { // @ G0449_as_Graphic561_SecondaryMouseInput_ChampionInventory[38] /* { Command, Box.X1, Box.X2, Box.Y1, Box.Y2, Button } */ MouseInput(kCommandCloseInventory, 0, 319, 0, 199, kRightMouseButton), MouseInput(kCommandSaveGame, 174, 182, 36, 44, kLeftMouseButton), @@ -93,31 +93,31 @@ MouseInput DM::gSecondaryMouseInput_ChampionInventory[38] = { // @ G0449_as_Grap MouseInput(kCommandClickOnSlotBoxInventoryBackpackLine_1_9, 202, 217, 66, 81, kLeftMouseButton), MouseInput(kCommandClickInPanel, 96, 223, 83, 167, kLeftMouseButton), MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gPrimaryMouseInput_PartySleeping[3] = { // @ G0450_as_Graphic561_PrimaryMouseInput_PartySleeping[3] +MouseInput gPrimaryMouseInput_PartySleeping[3] = { // @ G0450_as_Graphic561_PrimaryMouseInput_PartySleeping[3] /* { Command, Box.X1, Box.X2, Box.Y1, Box.Y2, Button } */ MouseInput(kCommandWakeUp, 0, 223, 33, 168, kLeftMouseButton), MouseInput(kCommandWakeUp, 0, 223, 33, 168, kRightMouseButton), MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gPrimaryMouseInput_FrozenGame[3] = { // @ G0451_as_Graphic561_PrimaryMouseInput_FrozenGame[3] +MouseInput gPrimaryMouseInput_FrozenGame[3] = { // @ G0451_as_Graphic561_PrimaryMouseInput_FrozenGame[3] /* { Command, Box.X1, Box.X2, Box.Y1, Box.Y2, Button } */ MouseInput(kCommandUnfreezeGame, 0, 319, 0, 199, kLeftMouseButton), MouseInput(kCommandUnfreezeGame, 0, 319, 0, 199, kRightMouseButton), MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gMouseInput_ActionAreaNames[5] = { // @ G0452_as_Graphic561_MouseInput_ActionAreaNames[5] +MouseInput gMouseInput_ActionAreaNames[5] = { // @ G0452_as_Graphic561_MouseInput_ActionAreaNames[5] /* { Command, Box.X1, Box.X2, Box.Y1, Box.Y2, Button } */ MouseInput(kCommandClickInActionAreaPass, 285, 318, 77, 83, kLeftMouseButton), MouseInput(kCommandClickInActionAreaAction_0, 234, 318, 86, 96, kLeftMouseButton), MouseInput(kCommandClickInActionAreaAction_1, 234, 318, 98, 108, kLeftMouseButton), MouseInput(kCommandClickInActionAreaAction_2, 234, 318, 110, 120, kLeftMouseButton), MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gMouseInput_ActionAreaIcons[5] = { // @ G0453_as_Graphic561_MouseInput_ActionAreaIcons[5] +MouseInput gMouseInput_ActionAreaIcons[5] = { // @ G0453_as_Graphic561_MouseInput_ActionAreaIcons[5] /* { Command, Box.X1, Box.X2, Box.Y1, Box.Y2, Button } */ MouseInput(kCommandClickInActionAreaChampion_0_Action, 233, 252, 86, 120, kLeftMouseButton), MouseInput(kCommandClickInActionAreaChampion_1_Action, 255, 274, 86, 120, kLeftMouseButton), MouseInput(kCommandClickInActionAreaChampion_2_Action, 277, 296, 86, 120, kLeftMouseButton), MouseInput(kCommandClickInActionAreaChampion_3_Action, 299, 318, 86, 120, kLeftMouseButton), MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gMouseInput_SpellArea[9] = { // @ G0454_as_Graphic561_MouseInput_SpellArea[9] +MouseInput gMouseInput_SpellArea[9] = { // @ G0454_as_Graphic561_MouseInput_SpellArea[9] /* { Command, Box.X1, Box.X2, Box.Y1, Box.Y2, Button } */ MouseInput(kCommandClickInSpellAreaSymbol_1, 235, 247, 51, 61, kLeftMouseButton), MouseInput(kCommandClickInSpellAreaSymbol_2, 249, 261, 51, 61, kLeftMouseButton), @@ -128,7 +128,7 @@ MouseInput DM::gMouseInput_SpellArea[9] = { // @ G0454_as_Graphic561_MouseInput_ MouseInput(kCommandClickInSpeallAreaCastSpell, 234, 303, 63, 73, kLeftMouseButton), MouseInput(kCommandClickInSpellAreaRecantSymbol, 305, 318, 63, 73, kLeftMouseButton), MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gMouseInput_ChampionNamesHands[13] = { // @ G0455_as_Graphic561_MouseInput_ChampionNamesHands[13] +MouseInput gMouseInput_ChampionNamesHands[13] = { // @ G0455_as_Graphic561_MouseInput_ChampionNamesHands[13] /* { Command, Box.X1, Box.X2, Box.Y1, Box.Y2, Button } */ MouseInput(kCommandSetLeaderChampion_0, 0, 42, 0, 6, kLeftMouseButton), MouseInput(kCommandSetLeaderChampion_1, 69, 111, 0, 6, kLeftMouseButton), @@ -143,7 +143,7 @@ MouseInput DM::gMouseInput_ChampionNamesHands[13] = { // @ G0455_as_Graphic561_M MouseInput(kCommandClickOnSlotBoxChampion_3_StatusBoxReadyHand, 211, 226, 10, 25, kLeftMouseButton), MouseInput(kCommandClickOnSlotBoxChampion_3_StatusBoxActionHand, 231, 246, 10, 25, kLeftMouseButton), MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gMouseInput_PanelChest[9] = { // @ G0456_as_Graphic561_MouseInput_PanelChest[9] +MouseInput gMouseInput_PanelChest[9] = { // @ G0456_as_Graphic561_MouseInput_PanelChest[9] /* { Command, Box.X1, Box.X2, Box.Y1, Box.Y2, Button } */ MouseInput(kCommandClickOnSlotBoxChest_1, 117, 132, 92, 107, kLeftMouseButton), MouseInput(kCommandClickOnSlotBoxChest_2, 106, 121, 109, 124, kLeftMouseButton), @@ -154,7 +154,7 @@ MouseInput DM::gMouseInput_PanelChest[9] = { // @ G0456_as_Graphic561_MouseInput MouseInput(kCommandClickOnSlotBoxChest_7, 179, 194, 137, 152, kLeftMouseButton), MouseInput(kCommandClickOnSlotBoxChest_8, 196, 211, 138, 153, kLeftMouseButton), MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gMouseInput_PanelResurrectReincarnateCancel[4] = { // @ G0457_as_Graphic561_MouseInput_PanelResurrectReincarnateCancel[4] +MouseInput gMouseInput_PanelResurrectReincarnateCancel[4] = { // @ G0457_as_Graphic561_MouseInput_PanelResurrectReincarnateCancel[4] /* { Command, Box.X1, Box.X2, Box.Y1, Box.Y2, Button } */ MouseInput(kCommandClickInPanelResurrect, 108, 158, 90, 138, kLeftMouseButton), /* Atari ST: Box = 104, 158, 86, 142 */ MouseInput(kCommandClickInPanelReincarnate, 161, 211, 90, 138, kLeftMouseButton), /* Atari ST: Box = 163, 217, 86, 142 */ @@ -162,44 +162,44 @@ MouseInput DM::gMouseInput_PanelResurrectReincarnateCancel[4] = { // @ G0457_as_ MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gPrimaryMouseInput_ViewportDialog1Choice[2] = { // @ G0471_as_Graphic561_PrimaryMouseInput_ViewportDialog1Choice[2] +MouseInput gPrimaryMouseInput_ViewportDialog1Choice[2] = { // @ G0471_as_Graphic561_PrimaryMouseInput_ViewportDialog1Choice[2] MouseInput(kCommandClickOnDialogChoice_1, 16, 207, 138, 152, kLeftMouseButton), /* Bottom button */ MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gPrimaryMouseInput_ViewportDialog2Choices[3] = { // @ G0472_as_Graphic561_PrimaryMouseInput_ViewportDialog2Choices[3] +MouseInput gPrimaryMouseInput_ViewportDialog2Choices[3] = { // @ G0472_as_Graphic561_PrimaryMouseInput_ViewportDialog2Choices[3] MouseInput(kCommandClickOnDialogChoice_1, 16, 207, 101, 115, kLeftMouseButton), /* Top button */ MouseInput(kCommandClickOnDialogChoice_2, 16, 207, 138, 152, kLeftMouseButton), /* Bottom button */ MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gPrimaryMouseInput_ViewportDialog3Choices[4] = { // @ G0473_as_Graphic561_PrimaryMouseInput_ViewportDialog3Choices[4] +MouseInput gPrimaryMouseInput_ViewportDialog3Choices[4] = { // @ G0473_as_Graphic561_PrimaryMouseInput_ViewportDialog3Choices[4] MouseInput(kCommandClickOnDialogChoice_1, 16, 207, 101, 115, kLeftMouseButton), /* Top button */ MouseInput(kCommandClickOnDialogChoice_2, 16, 101, 138, 152, kLeftMouseButton), /* Lower left button */ MouseInput(kCommandClickOnDialogChoice_3, 123, 207, 138, 152, kLeftMouseButton), /* Lower right button */ MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gPrimaryMouseInput_ViewportDialog4Choices[5] = { // @ G0474_as_Graphic561_PrimaryMouseInput_ViewportDialog4Choices[5] +MouseInput gPrimaryMouseInput_ViewportDialog4Choices[5] = { // @ G0474_as_Graphic561_PrimaryMouseInput_ViewportDialog4Choices[5] MouseInput(kCommandClickOnDialogChoice_1, 16, 101, 101, 115, kLeftMouseButton), /* Top left button */ MouseInput(kCommandClickOnDialogChoice_2, 123, 207, 101, 115, kLeftMouseButton), /* Top right button */ MouseInput(kCommandClickOnDialogChoice_3, 16, 101, 138, 152, kLeftMouseButton), /* Lower left button */ MouseInput(kCommandClickOnDialogChoice_4, 123, 207, 138, 152, kLeftMouseButton), /* Lower right button */ MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gPrimaryMouseInput_ScreenDialog1Choice[2] = { // @ G0475_as_Graphic561_PrimaryMouseInput_ScreenDialog1Choice[2] +MouseInput gPrimaryMouseInput_ScreenDialog1Choice[2] = { // @ G0475_as_Graphic561_PrimaryMouseInput_ScreenDialog1Choice[2] MouseInput(kCommandClickOnDialogChoice_1, 63, 254, 138, 152, kLeftMouseButton), /* Bottom button */ MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gPrimaryMouseInput_ScreenDialog2Choices[3] = { // @ G0476_as_Graphic561_PrimaryMouseInput_ScreenDialog2Choices[3] +MouseInput gPrimaryMouseInput_ScreenDialog2Choices[3] = { // @ G0476_as_Graphic561_PrimaryMouseInput_ScreenDialog2Choices[3] MouseInput(kCommandClickOnDialogChoice_1, 63, 254, 101, 115, kLeftMouseButton), /* Top button */ MouseInput(kCommandClickOnDialogChoice_2, 63, 254, 138, 152, kLeftMouseButton), /* Bottom button */ MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gPrimaryMouseInput_ScreenDialog3Choices[4] = { // @ G0477_as_Graphic561_PrimaryMouseInput_ScreenDialog3Choices[4] +MouseInput gPrimaryMouseInput_ScreenDialog3Choices[4] = { // @ G0477_as_Graphic561_PrimaryMouseInput_ScreenDialog3Choices[4] MouseInput(kCommandClickOnDialogChoice_1, 63, 254, 101, 115, kLeftMouseButton), /* Top button */ MouseInput(kCommandClickOnDialogChoice_2, 63, 148, 138, 152, kLeftMouseButton), /* Lower left button */ MouseInput(kCommandClickOnDialogChoice_3, 170, 254, 138, 152, kLeftMouseButton), /* Lower right button */ MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput DM::gPrimaryMouseInput_ScreenDialog4Choices[5] = { // @ G0478_as_Graphic561_PrimaryMouseInput_ScreenDialog4Choices[5] +MouseInput gPrimaryMouseInput_ScreenDialog4Choices[5] = { // @ G0478_as_Graphic561_PrimaryMouseInput_ScreenDialog4Choices[5] MouseInput(kCommandClickOnDialogChoice_1, 63, 148, 101, 115, kLeftMouseButton), /* Top left button */ MouseInput(kCommandClickOnDialogChoice_2, 170, 254, 101, 115, kLeftMouseButton), /* Top right button */ MouseInput(kCommandClickOnDialogChoice_3, 63, 148, 138, 152, kLeftMouseButton), /* Lower left button */ MouseInput(kCommandClickOnDialogChoice_4, 170, 254, 138, 152, kLeftMouseButton), /* Lower right button */ MouseInput(kCommandNone, 0, 0, 0, 0, kNoneMouseButton)}; -MouseInput* DM::gPrimaryMouseInput_DialogSets[2][4] = { // @ G0480_aaps_PrimaryMouseInput_DialogSets +MouseInput* gPrimaryMouseInput_DialogSets[2][4] = { // @ G0480_aaps_PrimaryMouseInput_DialogSets {gPrimaryMouseInput_ViewportDialog1Choice, gPrimaryMouseInput_ViewportDialog2Choices, gPrimaryMouseInput_ViewportDialog3Choices, @@ -211,7 +211,13 @@ MouseInput* DM::gPrimaryMouseInput_DialogSets[2][4] = { // @ G0480_aaps_PrimaryM EventManager::EventManager(DMEngine *vm) : _vm(vm) { - _dummyMapIndex = 0; + _primaryMouseInput = nullptr; + _secondaryMouseInput = nullptr; + + _pendingClickPresent = false; + _isCommandQueueLocked = true; + + _dummyMapIndex = 0; } @@ -242,7 +248,7 @@ void EventManager::initMouse() { CursorMan.pushCursor(mouseData, MOUSE_WIDTH, MOUSE_HEIGHT, 0, 0, 0); CursorMan.showMouse(false); - setMousePos(Common::Point(320/2, 200/2)); + setMousePos(Common::Point(320 / 2, 200 / 2)); // TODO: add cursor creatin, set to hidden } @@ -261,7 +267,11 @@ void EventManager::processInput() { Common::Event event; while (_vm->_system->getEventManager()->pollEvent(event)) { - if (event.type == Common::EVENT_KEYDOWN && !event.synthetic) { + switch (event.type) { + case Common::EVENT_KEYDOWN: + if (event.synthetic) + break; + switch (event.kbd.keycode) { case Common::KEYCODE_w: dungeonMan.mapCoordsAfterRelMovement(dungeonMan._currMap.partyDir, 1, 0, currMap.partyPosX, currMap.partyPosY); @@ -290,8 +300,51 @@ void EventManager::processInput() { dungeonMan.setCurrentMapAndPartyMap(--_dummyMapIndex); break; } - } else if (event.type == Common::EVENT_MOUSEMOVE) { + case Common::EVENT_MOUSEMOVE: _mousePos = event.mouse; + break; + case Common::EVENT_LBUTTONUP: + case Common::EVENT_RBUTTONUP: + _pendingClickPresent = true; + _pendingClickPos = _mousePos; + _pendingClickButton = (event.type == Common::EVENT_LBUTTONUP) ? kLeftMouseButton : kRightMouseButton; + break; } } } + +void EventManager::processPendingClick() { + if (_pendingClickPresent) { + _pendingClickPresent = false; + processClick(_pendingClickPos, _pendingClickButton); + } +} + +void EventManager::processClick(Common::Point mousePos, MouseButton button) { + CommandType commandType; + + commandType = getCommandTypeFromMouseInput(_primaryMouseInput, mousePos, button); + if (commandType == kCommandNone) + commandType = getCommandTypeFromMouseInput(_secondaryMouseInput, mousePos, button); + + if (commandType != kCommandNone) + _commandQueue.push(Command(mousePos, commandType)); + + _isCommandQueueLocked = false; +} + +CommandType EventManager::getCommandTypeFromMouseInput(MouseInput *input, Common::Point mousePos, MouseButton button) { + if (!input) + return kCommandNone; + CommandType commandType = kCommandNone; + + while ((commandType = input->commandTypeToIssue) != kCommandNone) { + if (input->hitbox.isPointInside(mousePos) && input->button == button) + break; + input++; + } + return commandType; +} + + +}; // end of namespace DM diff --git a/engines/dm/eventman.h b/engines/dm/eventman.h index ae3eb90b35..c52cf6d95c 100644 --- a/engines/dm/eventman.h +++ b/engines/dm/eventman.h @@ -2,6 +2,7 @@ #define DM_EVENTMAN_H #include "common/events.h" +#include "common/queue.h" #include "gfx.h" @@ -127,10 +128,10 @@ enum CommandType { class Command { public: - int16 posX, posY; + Common::Point pos; CommandType type; - Command(int16 x, int16 y, CommandType commandType): posX(x), posY(y), type(type) {} + Command(Common::Point position, CommandType commandType): pos(position), type(type) {} }; // @ COMMAND @@ -141,7 +142,7 @@ public: MouseButton button; MouseInput(CommandType type, uint16 x1, uint16 x2, uint16 y1, uint16 y2, MouseButton mouseButton) - : commandTypeToIssue(type), hitbox(x1, x2, y1, y2), button(mouseButton) {} + : commandTypeToIssue(type), hitbox(x1, x2 + 1, y1, y2 + 1), button(mouseButton) {} }; // @ MOUSE_INPUT extern MouseInput gPrimaryMouseInput_Entrance[4]; // @ G0445_as_Graphic561_PrimaryMouseInput_Entrance[4] @@ -183,13 +184,26 @@ class EventManager { Common::Point _mousePos; uint16 _dummyMapIndex; + + bool _pendingClickPresent; // G0436_B_PendingClickPresent + Common::Point _pendingClickPos; // @ G0437_i_PendingClickX, G0438_i_PendingClickY + MouseButton _pendingClickButton; // @ G0439_i_PendingClickButtonsStatus + + bool _isCommandQueueLocked; + Common::Queue<Command> _commandQueue; public: + MouseInput* _primaryMouseInput;// @ G0441_ps_PrimaryMouseInput + MouseInput* _secondaryMouseInput;// @ G0442_ps_SecondaryMouseInput + EventManager(DMEngine *vm); void initMouse(); void showMouse(bool visibility); void setMousePos(Common::Point pos); void processInput(); + void processPendingClick(); // @ F0360_COMMAND_ProcessPendingClick + void processClick(Common::Point mousePos, MouseButton button); // @ F0359_COMMAND_ProcessClick_CPSC + CommandType getCommandTypeFromMouseInput(MouseInput *input, Common::Point mousePos, MouseButton button); // @ F0358_COMMAND_GetCommandFromMouseInput_CPSC }; } diff --git a/engines/dm/gfx.cpp b/engines/dm/gfx.cpp index 1c820a9467..3042d8f03e 100644 --- a/engines/dm/gfx.cpp +++ b/engines/dm/gfx.cpp @@ -622,7 +622,7 @@ DisplayMan::DisplayMan(DMEngine *dmEngine) : _vm(dmEngine) { for (int i = 0; i < 18; i++) _currMapDoorOrnIndices[i] = 0; - Thing _inscriptionThing = Thing::thingNone; + _inscriptionThing = Thing::thingNone; } DisplayMan::~DisplayMan() { diff --git a/engines/dm/gfx.h b/engines/dm/gfx.h index 9790517507..50171feaa3 100644 --- a/engines/dm/gfx.h +++ b/engines/dm/gfx.h @@ -2,6 +2,7 @@ #define GFX_H #include "common/scummsys.h" +#include "common/rect.h" #include "dm.h" namespace DM { @@ -20,6 +21,9 @@ public: uint16 Y2; Box(uint16 x1, uint16 x2, uint16 y1, uint16 y2): X1(x1), X2(x2), Y1(y1), Y2(y2) {} + bool isPointInside(Common::Point point) { + return (X1 <= point.x) && (point.x < X2) && (Y1 <= point.y) && (point.y < Y2); + } }; // @ BOX_BYTE, BOX_WORD // The frames in the original sources contain inclusive boundaries and byte widths, not pixel widths |