mirror of
https://github.com/edubart/otclient.git
synced 2025-04-29 17:19:20 +02:00

Now otclient have lights! This code was originally made by @Tarjei400, I have improved it and merged into otclient master. Many thanks for tarjei for the contribution. Warning, this still experimental, fixes may come in the next days.
111 lines
2.8 KiB
Lua
111 lines
2.8 KiB
Lua
UIGameMap = extends(UIMap)
|
|
|
|
function UIGameMap.create()
|
|
local gameMap = UIGameMap.internalCreate()
|
|
gameMap:setKeepAspectRatio(true)
|
|
gameMap:setVisibleDimension({width = 15, height = 11})
|
|
gameMap:setDrawLights(true)
|
|
return gameMap
|
|
end
|
|
|
|
function UIGameMap:onDragEnter(mousePos)
|
|
local tile = self:getTile(mousePos)
|
|
if not tile then return false end
|
|
|
|
local thing = tile:getTopMoveThing()
|
|
if not thing then return false end
|
|
|
|
self.currentDragThing = thing
|
|
g_mouse.setTargetCursor()
|
|
return true
|
|
end
|
|
|
|
function UIGameMap:onDragLeave(droppedWidget, mousePos)
|
|
self.currentDragThing = nil
|
|
self.hoveredWho = nil
|
|
g_mouse.restoreCursor()
|
|
return true
|
|
end
|
|
|
|
function UIGameMap:onDrop(widget, mousePos)
|
|
if not self:canAcceptDrop(widget, mousePos) then return false end
|
|
|
|
local tile = self:getTile(mousePos)
|
|
if not tile then return false end
|
|
|
|
local thing = widget.currentDragThing
|
|
local toPos = tile:getPosition()
|
|
|
|
local thingPos = thing:getPosition()
|
|
if thingPos.x == toPos.x and thingPos.y == toPos.y and thingPos.z == toPos.z then return false end
|
|
|
|
if thing:isItem() and thing:getCount() > 1 then
|
|
modules.game_interface.moveStackableItem(thing, toPos)
|
|
else
|
|
g_game.move(thing, toPos, 1)
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
function UIGameMap:onMousePress()
|
|
self.cancelNextRelease = false
|
|
end
|
|
|
|
function UIGameMap:onMouseRelease(mousePosition, mouseButton)
|
|
if self.cancelNextRelease then
|
|
self.cancelNextRelease = false
|
|
return true
|
|
end
|
|
|
|
local autoWalkPos = self:getPosition(mousePosition)
|
|
|
|
-- happens when clicking outside of map boundaries
|
|
if not autoWalkPos then return false end
|
|
|
|
local localPlayerPos = g_game.getLocalPlayer():getPosition()
|
|
if autoWalkPos.z ~= localPlayerPos.z then
|
|
local dz = autoWalkPos.z - localPlayerPos.z
|
|
autoWalkPos.x = autoWalkPos.x + dz
|
|
autoWalkPos.y = autoWalkPos.y + dz
|
|
autoWalkPos.z = localPlayerPos.z
|
|
end
|
|
|
|
local lookThing
|
|
local useThing
|
|
local creatureThing
|
|
local multiUseThing
|
|
|
|
local tile = self:getTile(mousePosition)
|
|
if tile then
|
|
lookThing = tile:getTopLookThing()
|
|
useThing = tile:getTopUseThing()
|
|
creatureThing = tile:getTopCreature()
|
|
multiUseThing = tile:getTopMultiUseThing()
|
|
end
|
|
|
|
local ret = modules.game_interface.processMouseAction(mousePosition, mouseButton, autoWalkPos, lookThing, useThing, creatureThing, multiUseThing)
|
|
if ret then
|
|
self.cancelNextRelease = true
|
|
end
|
|
|
|
return ret
|
|
end
|
|
|
|
function UIGameMap:canAcceptDrop(widget, mousePos)
|
|
if not widget or not widget.currentDragThing then return false end
|
|
|
|
local children = rootWidget:recursiveGetChildrenByPos(mousePos)
|
|
for i=1,#children do
|
|
local child = children[i]
|
|
if child == self then
|
|
return true
|
|
elseif not child:isPhantom() then
|
|
return false
|
|
end
|
|
end
|
|
|
|
error('Widget ' .. self:getId() .. ' not in drop list.')
|
|
return false
|
|
end
|