mirror of
https://github.com/edubart/otclient.git
synced 2025-10-15 12:04:55 +02:00
improving minimap
This commit is contained in:
@@ -22,7 +22,6 @@ function onMinimapMouseRelease(self, mousePosition, mouseButton)
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
function onMinimapMouseWheel(self, mousePos, direction)
|
||||
if direction == MouseWheelUp then
|
||||
self:zoomIn()
|
||||
@@ -48,8 +47,8 @@ function Minimap.init()
|
||||
minimapWidget:setMultifloor(false)
|
||||
minimapWidget:setKeepAspectRatio(false)
|
||||
minimapWidget.onMouseRelease = onMinimapMouseRelease
|
||||
minimapWidget.onMouseWheel = onMinimapMouseWheel
|
||||
|
||||
minimapWidget.onMouseWheel = onMinimapMouseWheel
|
||||
|
||||
Minimap.reset()
|
||||
|
||||
-- load only the first time (avoid load/save between reloads)
|
||||
@@ -103,3 +102,55 @@ function Minimap.reset()
|
||||
minimapWidget:setZoom(DEFAULT_ZOOM)
|
||||
end
|
||||
|
||||
function Minimap.isClickInRange(position, fromPosition, toPosition)
|
||||
return (position.x >= fromPosition.x and position.y >= fromPosition.y and position.x <= toPosition.x and position.y <= toPosition.y)
|
||||
end
|
||||
-- hooked functions
|
||||
local compassZones = {}
|
||||
compassZones.west = {x = 0, y = 30, posx = -1, posy = 0}
|
||||
compassZones.north = {x = 30, y = 0, posx = 0, posy = -1}
|
||||
compassZones.south = {x = 30, y = 57, posx = 0, posy = 1}
|
||||
compassZones.east = {x = 57, y = 30, posx = 1, posy = 0}
|
||||
compassZones.center = {x = 30, y = 30, posx = 0, posy = 0, center = true}
|
||||
function Minimap.compassClick(self, mousePos)
|
||||
local compassPos = self:getRect()
|
||||
local pos = {x = mousePos.x-compassPos.x, y = mousePos.y-compassPos.y}
|
||||
local move = {x = 0, y = 0}
|
||||
local center = false
|
||||
for i,v in pairs(compassZones) do
|
||||
local lowPos = {x = v.x-15, y = v.y-15}
|
||||
local highPos = {x = v.x+15, y = v.y+15}
|
||||
if Minimap.isClickInRange(pos, lowPos, highPos) then
|
||||
move.x = move.x + v.posx * minimapWidget:getZoom()/10
|
||||
move.y = move.y + v.posy * minimapWidget:getZoom()/10
|
||||
if v.center then center = true end
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if center then
|
||||
local player = g_game.getLocalPlayer()
|
||||
if not player then return end
|
||||
minimapWidget:followCreature(player)
|
||||
else
|
||||
local cameraPos = minimapWidget:getCameraPosition()
|
||||
local pos = {x = cameraPos.x + move.x, y = cameraPos.y + move.y, z = cameraPos.z}
|
||||
minimapWidget:setCameraPosition(pos)
|
||||
end
|
||||
end
|
||||
|
||||
function Minimap.onButtonClick(id)
|
||||
if id == "zoomIn" then
|
||||
minimapWidget:setZoom(math.max(minimapWidget:getMaxZoomIn(), minimapWidget:getZoom()-15))
|
||||
elseif id == "zoomOut" then
|
||||
minimapWidget:setZoom(math.min(minimapWidget:getMaxZoomOut(), minimapWidget:getZoom()+15))
|
||||
elseif id == "levelUp" then
|
||||
local pos = minimapWidget:getCameraPosition()
|
||||
pos.z = pos.z - 1
|
||||
minimapWidget:setCameraPosition(pos)
|
||||
elseif id == "levelDown" then
|
||||
local pos = minimapWidget:getCameraPosition()
|
||||
pos.z = pos.z + 1
|
||||
minimapWidget:setCameraPosition(pos)
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user