From 3ebb997c37ff7980c0e6e728ace85b18c05bcceb Mon Sep 17 00:00:00 2001 From: BeniS Date: Fri, 13 Jul 2012 18:31:05 +1200 Subject: [PATCH] Fixed/Changed Minimap and Game Interface Window Issue. * Changed minimap navigation to hold right click. * Added MAX_FLOOR_UP and MAX_FLOOR_DOWN for floor changing in the minimap. * Fixed issues with exit window, logout window and count window to stop multiple instances of the window. --- modules/corelib/mouse.lua | 8 ++- modules/game_interface/gameinterface.lua | 61 ++++++++++++++++--- .../game_interface/styles/countwindow.otui | 2 - modules/game_interface/styles/exitwindow.otui | 3 +- .../game_interface/styles/logoutwindow.otui | 1 - modules/game_minimap/minimap.lua | 12 +++- modules/game_minimap/minimap.otui | 2 +- 7 files changed, 69 insertions(+), 20 deletions(-) diff --git a/modules/corelib/mouse.lua b/modules/corelib/mouse.lua index 1aa94b76..0d3848dc 100644 --- a/modules/corelib/mouse.lua +++ b/modules/corelib/mouse.lua @@ -32,14 +32,18 @@ function g_mouse.isPressed(button) return g_window.isMouseButtonPressed(button) end -function g_mouse.bindAutoPress(widget, callback, delay) +function g_mouse.bindAutoPress(widget, callback, delay, button) + local button = button or MouseLeftButton connect(widget, { onMousePress = function(widget, mousePos, mouseButton) + if(mouseButton ~= button) then + return false + end local startTime = g_clock.millis() callback(widget, mousePos, mouseButton, 0) periodicalEvent(function() callback(widget, g_window.getMousePosition(), mouseButton, g_clock.millis() - startTime) end, function() - return widget:isPressed() + return g_mouse.isPressed(mouseButton) end, 30, delay) return true end }) diff --git a/modules/game_interface/gameinterface.lua b/modules/game_interface/gameinterface.lua index 5754a9b6..2497446f 100644 --- a/modules/game_interface/gameinterface.lua +++ b/modules/game_interface/gameinterface.lua @@ -9,6 +9,10 @@ local gameBottomPanel local logoutButton local mouseGrabberWidget +local countWindow +local logoutWindow +local exitWindow + local function onLeftPanelVisibilityChange(leftPanel, visible) if not visible then local children = leftPanel:getChildren() @@ -97,6 +101,9 @@ function GameInterface.terminate() gameLeftPanel = nil gameBottomPanel = nil mouseGrabberWidget = nil + countWindow = nil + logoutWindow = nil + exitWindow = nil GameInterface = nil end @@ -125,23 +132,34 @@ function GameInterface.exit() end function GameInterface.tryExit() - local exitWindow = g_ui.createWidget('ExitWindow', rootWidget) + if(exitWindow) then + return true + end + exitWindow = g_ui.createWidget('ExitWindow', rootWidget) local exitButton = exitWindow:getChildById('buttonExit') - local logoutButton = exitWindow:getChildById('buttonLogout') + local logButton = exitWindow:getChildById('buttonLogout') + local cancelButton = exitWindow:getChildById('buttonCancel') local exitFunc = function() GameInterface.exit() exitButton:getParent():destroy() end - local logoutFunc = function() GameInterface.logout() - logoutButton:getParent():destroy() + logButton:getParent():destroy() + exitWindow = nil + end + local cancelFunc = function() + cancelButton:getParent():destroy() + exitWindow = nil end + exitWindow.onEscape = cancelFunc exitWindow.onEnter = logoutFunc + exitButton.onClick = exitFunc - logoutButton.onClick = logoutFunc + logButton.onClick = logoutFunc + cancelButton.onClick = cancelFunc return true -- signal closing end @@ -153,16 +171,28 @@ function GameInterface.logout() end function GameInterface.tryLogout() - local logoutWindow = g_ui.createWidget('LogoutWindow', rootWidget) + if(logoutWindow) then + return + end + logoutWindow = g_ui.createWidget('LogoutWindow', rootWidget) local yesButton = logoutWindow:getChildById('buttonYes') - + local noButton = logoutWindow:getChildById('buttonNo') + local logoutFunc = function() GameInterface.logout() yesButton:getParent():destroy() + logoutWindow = nil + end + local cancelFunc = function() + noButton:getParent():destroy() + logoutWindow = nil end logoutWindow.onEnter = logoutFunc + logoutWindow.onEscape = cancelFunc + yesButton.onClick = logoutFunc + noButton.onClick = cancelFunc end function GameInterface.onMouseGrabberRelease(self, mousePosition, mouseButton) @@ -375,7 +405,8 @@ function GameInterface.processMouseAction(menuPosition, mouseButton, autoWalkPos end else if multiUseThing and keyboardModifiers == KeyboardNoModifier and mouseButton == MouseRightButton and not g_mouse.isPressed(MouseLeftButton) then - if multiUseThing:asCreature() then + local player = g_game.getLocalPlayer() + if multiUseThing:asCreature() and multiUseThing:asCreature() ~= player then g_game.attack(multiUseThing:asCreature()) return true elseif multiUseThing:isContainer() then @@ -422,6 +453,9 @@ function GameInterface.processMouseAction(menuPosition, mouseButton, autoWalkPos end function GameInterface.moveStackableItem(item, toPos) + if(countWindow) then + return + end if g_keyboard.isCtrlPressed() then g_game.move(item, toPos, item:getCount()) return @@ -431,7 +465,7 @@ function GameInterface.moveStackableItem(item, toPos) end local count = item:getCount() - local countWindow = g_ui.createWidget('CountWindow', rootWidget) + countWindow = g_ui.createWidget('CountWindow', rootWidget) local spinbox = countWindow:getChildById('countSpinBox') local scrollbar = countWindow:getChildById('countScrollBar') spinbox:setMaximum(count) @@ -447,10 +481,19 @@ function GameInterface.moveStackableItem(item, toPos) local moveFunc = function() g_game.move(item, toPos, spinbox:getValue()) okButton:getParent():destroy() + countWindow = nil + end + local cancelButton = countWindow:getChildById('buttonCancel') + local cancelFunc = function() + cancelButton:getParent():destroy() + countWindow = nil end countWindow.onEnter = moveFunc + countWindow.onEscape = cancelFunc + okButton.onClick = moveFunc + cancelButton.onClick = cancelFunc end function GameInterface.getRootPanel() diff --git a/modules/game_interface/styles/countwindow.otui b/modules/game_interface/styles/countwindow.otui index 843e1c6c..7f648052 100644 --- a/modules/game_interface/styles/countwindow.otui +++ b/modules/game_interface/styles/countwindow.otui @@ -2,7 +2,6 @@ CountWindow < MainWindow id: countWindow !text: tr('Move Stackable Item') size: 196 112 - @onEscape: self:destroy() Label !text: tr('Amount:') @@ -38,4 +37,3 @@ CountWindow < MainWindow width: 64 anchors.right: parent.right anchors.bottom: parent.bottom - @onClick: self:getParent():destroy() diff --git a/modules/game_interface/styles/exitwindow.otui b/modules/game_interface/styles/exitwindow.otui index a1affa38..60fb5b29 100644 --- a/modules/game_interface/styles/exitwindow.otui +++ b/modules/game_interface/styles/exitwindow.otui @@ -2,7 +2,6 @@ ExitWindow < MainWindow id: exitWindow !text: tr('Exit') size: 550 135 - @onEscape: self:destroy() Label !text: tr('If you shut down the program, you character might stay in the game.') @@ -34,7 +33,7 @@ ExitWindow < MainWindow width: 64 anchors.left: parent.left anchors.bottom: parent.bottom - margin-left: 155 + margin-left: 160 Button id: buttonLogout diff --git a/modules/game_interface/styles/logoutwindow.otui b/modules/game_interface/styles/logoutwindow.otui index 5be1be5f..ab11375f 100644 --- a/modules/game_interface/styles/logoutwindow.otui +++ b/modules/game_interface/styles/logoutwindow.otui @@ -2,7 +2,6 @@ LogoutWindow < MainWindow id: logoutWindow !text: tr('Logout') size: 300 100 - @onEscape: self:destroy() Label !text: tr('Are you sure you want to logout?') diff --git a/modules/game_minimap/minimap.lua b/modules/game_minimap/minimap.lua index 422d6e84..1e669627 100644 --- a/modules/game_minimap/minimap.lua +++ b/modules/game_minimap/minimap.lua @@ -5,6 +5,8 @@ local minimapWidget local minimapButton local minimapWindow local DEFAULT_ZOOM = 60 +local MAX_FLOOR_UP = 0 +local MAX_FLOOR_DOWN = 15 local navigating = false minimapFirstLoad = true @@ -54,7 +56,7 @@ function Minimap.init() minimapWidget = minimapWindow:recursiveGetChildById('minimap') - g_mouse.bindAutoPress(minimapWidget, Minimap.compassClick) + g_mouse.bindAutoPress(minimapWidget, Minimap.compassClick, nil, MouseRightButton) minimapWidget:setAutoViewMode(false) minimapWidget:setViewMode(1) -- mid view minimapWidget:setDrawMinimapColors(true) @@ -148,11 +150,15 @@ function Minimap.onButtonClick(id) elseif id == "floorUp" then local pos = minimapWidget:getCameraPosition() pos.z = pos.z - 1 - minimapWidget:setCameraPosition(pos) + if(pos.z > MAX_FLOOR_UP) then + minimapWidget:setCameraPosition(pos) + end elseif id == "floorDown" then local pos = minimapWidget:getCameraPosition() pos.z = pos.z + 1 - minimapWidget:setCameraPosition(pos) + if(pos.z < MAX_FLOOR_DOWN) then + minimapWidget:setCameraPosition(pos) + end end end diff --git a/modules/game_minimap/minimap.otui b/modules/game_minimap/minimap.otui index 9bb1fab1..aca13288 100644 --- a/modules/game_minimap/minimap.otui +++ b/modules/game_minimap/minimap.otui @@ -34,7 +34,7 @@ MiniWindow text: ? text-align: center phantom: false - !tooltip: tr('Hold left mouse button to navigate\nScroll mouse middle button to zoom') + !tooltip: tr('Hold right mouse button to navigate\nScroll mouse middle button to zoom') anchors.top: minimizeButton.top anchors.right: minimizeButton.left margin-right: 3