mirror of
https://github.com/OTCv8/otclientv8.git
synced 2025-04-29 18:59:20 +02:00
165 lines
4.3 KiB
Lua
165 lines
4.3 KiB
Lua
minimapWidget = nil
|
|
minimapButton = nil
|
|
minimapWindow = nil
|
|
fullmapView = false
|
|
loaded = false
|
|
oldZoom = nil
|
|
oldPos = nil
|
|
|
|
function init()
|
|
minimapWindow = g_ui.loadUI('minimap', modules.game_interface.getRightPanel())
|
|
minimapWindow:setContentMinimumHeight(64)
|
|
|
|
if not minimapWindow.forceOpen then
|
|
minimapButton = modules.client_topmenu.addRightGameToggleButton('minimapButton',
|
|
tr('Minimap') .. ' (Ctrl+M)', '/images/topbuttons/minimap', toggle)
|
|
minimapButton:setOn(true)
|
|
end
|
|
|
|
minimapWidget = minimapWindow:recursiveGetChildById('minimap')
|
|
|
|
local gameRootPanel = modules.game_interface.getRootPanel()
|
|
g_keyboard.bindKeyPress('Alt+Left', function() minimapWidget:move(1,0) end, gameRootPanel)
|
|
g_keyboard.bindKeyPress('Alt+Right', function() minimapWidget:move(-1,0) end, gameRootPanel)
|
|
g_keyboard.bindKeyPress('Alt+Up', function() minimapWidget:move(0,1) end, gameRootPanel)
|
|
g_keyboard.bindKeyPress('Alt+Down', function() minimapWidget:move(0,-1) end, gameRootPanel)
|
|
g_keyboard.bindKeyDown('Ctrl+M', toggle)
|
|
g_keyboard.bindKeyDown('Ctrl+Shift+M', toggleFullMap)
|
|
|
|
minimapWindow:setup()
|
|
|
|
connect(g_game, {
|
|
onGameStart = online,
|
|
onGameEnd = offline,
|
|
})
|
|
|
|
connect(LocalPlayer, {
|
|
onPositionChange = updateCameraPosition
|
|
})
|
|
|
|
if g_game.isOnline() then
|
|
online()
|
|
end
|
|
end
|
|
|
|
function terminate()
|
|
if g_game.isOnline() then
|
|
saveMap()
|
|
end
|
|
|
|
disconnect(g_game, {
|
|
onGameStart = online,
|
|
onGameEnd = offline,
|
|
})
|
|
|
|
disconnect(LocalPlayer, {
|
|
onPositionChange = updateCameraPosition
|
|
})
|
|
|
|
local gameRootPanel = modules.game_interface.getRootPanel()
|
|
g_keyboard.unbindKeyPress('Alt+Left', gameRootPanel)
|
|
g_keyboard.unbindKeyPress('Alt+Right', gameRootPanel)
|
|
g_keyboard.unbindKeyPress('Alt+Up', gameRootPanel)
|
|
g_keyboard.unbindKeyPress('Alt+Down', gameRootPanel)
|
|
g_keyboard.unbindKeyDown('Ctrl+M')
|
|
g_keyboard.unbindKeyDown('Ctrl+Shift+M')
|
|
|
|
minimapWindow:destroy()
|
|
if minimapButton then
|
|
minimapButton:destroy()
|
|
end
|
|
end
|
|
|
|
function toggle()
|
|
if not minimapButton then return end
|
|
if minimapButton:isOn() then
|
|
minimapWindow:close()
|
|
minimapButton:setOn(false)
|
|
else
|
|
minimapWindow:open()
|
|
minimapButton:setOn(true)
|
|
end
|
|
end
|
|
|
|
function onMiniWindowClose()
|
|
if minimapButton then
|
|
minimapButton:setOn(false)
|
|
end
|
|
end
|
|
|
|
function online()
|
|
loadMap()
|
|
updateCameraPosition()
|
|
end
|
|
|
|
function offline()
|
|
saveMap()
|
|
end
|
|
|
|
function loadMap()
|
|
local clientVersion = g_game.getClientVersion()
|
|
|
|
g_minimap.clean()
|
|
loaded = false
|
|
|
|
local minimapFile = '/minimap.otmm'
|
|
local dataMinimapFile = '/data' .. minimapFile
|
|
local versionedMinimapFile = '/minimap' .. clientVersion .. '.otmm'
|
|
if g_resources.fileExists(dataMinimapFile) then
|
|
loaded = g_minimap.loadOtmm(dataMinimapFile)
|
|
end
|
|
if not loaded and g_resources.fileExists(versionedMinimapFile) then
|
|
loaded = g_minimap.loadOtmm(versionedMinimapFile)
|
|
end
|
|
if not loaded and g_resources.fileExists(minimapFile) then
|
|
loaded = g_minimap.loadOtmm(minimapFile)
|
|
end
|
|
if not loaded then
|
|
print("Minimap couldn't be loaded, file missing?")
|
|
end
|
|
minimapWidget:load()
|
|
end
|
|
|
|
function saveMap()
|
|
local clientVersion = g_game.getClientVersion()
|
|
local minimapFile = '/minimap' .. clientVersion .. '.otmm'
|
|
g_minimap.saveOtmm(minimapFile)
|
|
minimapWidget:save()
|
|
end
|
|
|
|
function updateCameraPosition()
|
|
local player = g_game.getLocalPlayer()
|
|
if not player then return end
|
|
local pos = player:getPosition()
|
|
if not pos then return end
|
|
if not minimapWidget:isDragging() then
|
|
if not fullmapView then
|
|
minimapWidget:setCameraPosition(player:getPosition())
|
|
end
|
|
minimapWidget:setCrossPosition(player:getPosition())
|
|
end
|
|
end
|
|
|
|
function toggleFullMap()
|
|
if not fullmapView then
|
|
fullmapView = true
|
|
minimapWindow:hide()
|
|
minimapWidget:setParent(modules.game_interface.getRootPanel())
|
|
minimapWidget:fill('parent')
|
|
minimapWidget:setAlternativeWidgetsVisible(true)
|
|
else
|
|
fullmapView = false
|
|
minimapWidget:setParent(minimapWindow:getChildById('contentsPanel'))
|
|
minimapWidget:fill('parent')
|
|
minimapWindow:show()
|
|
minimapWidget:setAlternativeWidgetsVisible(false)
|
|
end
|
|
|
|
local zoom = oldZoom or 0
|
|
local pos = oldPos or minimapWidget:getCameraPosition()
|
|
oldZoom = minimapWidget:getZoom()
|
|
oldPos = minimapWidget:getCameraPosition()
|
|
minimapWidget:setZoom(zoom)
|
|
minimapWidget:setCameraPosition(pos)
|
|
end
|