mirror of
https://github.com/edubart/otclient.git
synced 2025-10-14 11:34:54 +02:00
Improve minimap
This commit is contained in:
@@ -4,7 +4,7 @@ Minimap = {}
|
||||
local minimapWidget
|
||||
local minimapButton
|
||||
local minimapWindow
|
||||
local DEFAULT_ZOOM = 45
|
||||
local DEFAULT_ZOOM = 60
|
||||
minimapFirstLoad = true
|
||||
|
||||
-- private functions
|
||||
@@ -31,15 +31,15 @@ function onMinimapMouseWheel(self, mousePos, direction)
|
||||
end
|
||||
|
||||
--[[
|
||||
Known Issue (TODO):
|
||||
If you move the minimap compass directions and
|
||||
Known Issue (TODO):
|
||||
If you move the minimap compass directions and
|
||||
you change floor it will not update the minimap.
|
||||
]]
|
||||
-- public functions
|
||||
function Minimap.init()
|
||||
connect(g_game, { onGameStart = Minimap.reset,
|
||||
onForceWalk = Minimap.center })
|
||||
|
||||
|
||||
g_keyboard.bindKeyDown('Ctrl+M', Minimap.toggle)
|
||||
|
||||
minimapButton = TopMenu.addRightGameToggleButton('minimapButton', tr('Minimap') .. ' (Ctrl+M)', 'minimap.png', Minimap.toggle)
|
||||
@@ -79,7 +79,7 @@ end
|
||||
function Minimap.terminate()
|
||||
disconnect(g_game, { onGameStart = Minimap.reset,
|
||||
onForceWalk = Minimap.center })
|
||||
|
||||
|
||||
g_keyboard.unbindKeyDown('Ctrl+M')
|
||||
|
||||
minimapButton:destroy()
|
||||
@@ -105,30 +105,28 @@ function Minimap.onMiniWindowClose()
|
||||
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)
|
||||
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}
|
||||
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}
|
||||
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
|
||||
break
|
||||
end
|
||||
end
|
||||
local px = mousePos.x - self:getX()
|
||||
local py = mousePos.y - self:getY()
|
||||
local dx = px - self:getWidth()/2
|
||||
local dy = -(py - self:getHeight()/2)
|
||||
local radius = math.sqrt(dx*dx+dy*dy)
|
||||
local movex=0
|
||||
local movey=0
|
||||
dx = dx/radius
|
||||
dy = dy/radius
|
||||
|
||||
if dx > 0.5 then movex = 1 end
|
||||
if dx < -0.5 then movex = -1 end
|
||||
if dy > 0.5 then movey = -1 end
|
||||
if dy < -0.5 then movey = 1 end
|
||||
|
||||
local cameraPos = minimapWidget:getCameraPosition()
|
||||
local pos = {x = cameraPos.x + move.x, y = cameraPos.y + move.y, z = cameraPos.z}
|
||||
local pos = {x = cameraPos.x + movex, y = cameraPos.y + movey, z = cameraPos.z}
|
||||
minimapWidget:setCameraPosition(pos)
|
||||
end
|
||||
|
||||
|
@@ -1,27 +1,24 @@
|
||||
MapControl < Button
|
||||
size: 16 16
|
||||
size: 20 20
|
||||
|
||||
$pressed:
|
||||
image-clip: 0 0 16 16
|
||||
icon-clip: 0 0 16 16
|
||||
|
||||
$hover !pressed:
|
||||
image-clip: 0 16 16 16
|
||||
icon-clip: 0 16 16 16
|
||||
|
||||
$!pressed !hover:
|
||||
image-clip: 0 32 16 16
|
||||
|
||||
$disabled:
|
||||
image-color: #ffffff88
|
||||
icon-clip: 0 32 16 16
|
||||
|
||||
FloorUpControl < MapControl
|
||||
image-source: /game_minimap/floor_up.png
|
||||
|
||||
icon-source: /game_minimap/floor_up.png
|
||||
|
||||
FloorDownControl < MapControl
|
||||
image-source: /game_minimap/floor_down.png
|
||||
|
||||
icon-source: /game_minimap/floor_down.png
|
||||
|
||||
//ZoomOutControl < MapControl
|
||||
//image-source: /game_minimap/zoom_out.png
|
||||
|
||||
|
||||
//ZoomInControl < MapControl
|
||||
//image-source: /game_minimap/zoom_in.png
|
||||
|
||||
@@ -37,81 +34,78 @@ MiniWindow
|
||||
padding: 3
|
||||
UIMap
|
||||
id: minimap
|
||||
anchors.left: parent.left
|
||||
anchors.top: parent.top
|
||||
size: 110 110
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
UIButton
|
||||
id: compass
|
||||
image-source: /game_minimap/compass.png
|
||||
image-smooth: true
|
||||
color: #ffffff
|
||||
anchors.left: minimap.right
|
||||
anchors.top: minimap.top
|
||||
size: 60 60
|
||||
margin-top: 3
|
||||
margin-left: 5
|
||||
anchors.left: parent.left
|
||||
anchors.top: parent.top
|
||||
size: 48 48
|
||||
margin-top: 4
|
||||
margin-left: 4
|
||||
@onClick: function(...) Minimap.compassClick(...) end
|
||||
|
||||
|
||||
UIButton
|
||||
id: compassReset
|
||||
text: Reset
|
||||
text: R
|
||||
font: verdana-11px-rounded
|
||||
anchors.left: compass.left
|
||||
anchors.top: compass.top
|
||||
margin-top: 25
|
||||
margin-left: 14
|
||||
anchors.centerIn: compass
|
||||
margin-top: 2
|
||||
margin-right: 1
|
||||
@onClick: function(...) Minimap.center(...) end
|
||||
$pressed:
|
||||
color: #eb9f4f88
|
||||
margin-top: 26
|
||||
margin-left: 15
|
||||
|
||||
$hover !pressed:
|
||||
color: #eb9f4f
|
||||
|
||||
$!pressed !hover:
|
||||
color: #ffffff
|
||||
margin-top: 25
|
||||
margin-left: 14
|
||||
|
||||
$disabled:
|
||||
image-color: #ffffff88
|
||||
|
||||
|
||||
FloorUpControl
|
||||
id: floorUp
|
||||
anchors.left: minimap.right
|
||||
anchors.top: compass.bottom
|
||||
margin-top: 10
|
||||
margin-left: 15
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
margin-right: 28
|
||||
margin-bottom: 28
|
||||
enabled: true
|
||||
@onClick: Minimap.onButtonClick(self:getId())
|
||||
|
||||
|
||||
FloorDownControl
|
||||
id: floorDown
|
||||
anchors.left: floorUp.left
|
||||
anchors.top: floorUp.bottom
|
||||
margin-top: 4
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
margin-right: 28
|
||||
margin-bottom: 4
|
||||
enabled: true
|
||||
@onClick: Minimap.onButtonClick(self:getId())
|
||||
|
||||
|
||||
Button
|
||||
id: zoomIn
|
||||
text: +
|
||||
size: 16 16
|
||||
anchors.left: floorUp.right
|
||||
anchors.top: floorUp.top
|
||||
margin-left: 10
|
||||
size: 20 20
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
margin-right: 4
|
||||
margin-bottom: 28
|
||||
enabled: true
|
||||
@onClick: Minimap.onButtonClick(self:getId())
|
||||
|
||||
|
||||
Button
|
||||
id: zoomOut
|
||||
text: -
|
||||
font: terminus-14px-bold
|
||||
size: 16 16
|
||||
anchors.left: floorDown.right
|
||||
anchors.top: floorDown.top
|
||||
margin-left: 10
|
||||
size: 20 20
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
margin-right: 4
|
||||
margin-bottom: 4
|
||||
enabled: true
|
||||
@onClick: Minimap.onButtonClick(self:getId())
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user