Improve minimap
This commit is contained in:
parent
1f6cd33109
commit
c0c2411854
|
@ -4,7 +4,7 @@ Minimap = {}
|
||||||
local minimapWidget
|
local minimapWidget
|
||||||
local minimapButton
|
local minimapButton
|
||||||
local minimapWindow
|
local minimapWindow
|
||||||
local DEFAULT_ZOOM = 45
|
local DEFAULT_ZOOM = 60
|
||||||
minimapFirstLoad = true
|
minimapFirstLoad = true
|
||||||
|
|
||||||
-- private functions
|
-- private functions
|
||||||
|
@ -31,15 +31,15 @@ function onMinimapMouseWheel(self, mousePos, direction)
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
Known Issue (TODO):
|
Known Issue (TODO):
|
||||||
If you move the minimap compass directions and
|
If you move the minimap compass directions and
|
||||||
you change floor it will not update the minimap.
|
you change floor it will not update the minimap.
|
||||||
]]
|
]]
|
||||||
-- public functions
|
-- public functions
|
||||||
function Minimap.init()
|
function Minimap.init()
|
||||||
connect(g_game, { onGameStart = Minimap.reset,
|
connect(g_game, { onGameStart = Minimap.reset,
|
||||||
onForceWalk = Minimap.center })
|
onForceWalk = Minimap.center })
|
||||||
|
|
||||||
g_keyboard.bindKeyDown('Ctrl+M', Minimap.toggle)
|
g_keyboard.bindKeyDown('Ctrl+M', Minimap.toggle)
|
||||||
|
|
||||||
minimapButton = TopMenu.addRightGameToggleButton('minimapButton', tr('Minimap') .. ' (Ctrl+M)', 'minimap.png', Minimap.toggle)
|
minimapButton = TopMenu.addRightGameToggleButton('minimapButton', tr('Minimap') .. ' (Ctrl+M)', 'minimap.png', Minimap.toggle)
|
||||||
|
@ -79,7 +79,7 @@ end
|
||||||
function Minimap.terminate()
|
function Minimap.terminate()
|
||||||
disconnect(g_game, { onGameStart = Minimap.reset,
|
disconnect(g_game, { onGameStart = Minimap.reset,
|
||||||
onForceWalk = Minimap.center })
|
onForceWalk = Minimap.center })
|
||||||
|
|
||||||
g_keyboard.unbindKeyDown('Ctrl+M')
|
g_keyboard.unbindKeyDown('Ctrl+M')
|
||||||
|
|
||||||
minimapButton:destroy()
|
minimapButton:destroy()
|
||||||
|
@ -105,30 +105,28 @@ function Minimap.onMiniWindowClose()
|
||||||
end
|
end
|
||||||
|
|
||||||
function Minimap.isClickInRange(position, fromPosition, toPosition)
|
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
|
end
|
||||||
|
|
||||||
-- hooked functions
|
-- 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)
|
function Minimap.compassClick(self, mousePos)
|
||||||
local compassPos = self:getRect()
|
local px = mousePos.x - self:getX()
|
||||||
local pos = {x = mousePos.x-compassPos.x, y = mousePos.y-compassPos.y}
|
local py = mousePos.y - self:getY()
|
||||||
local move = {x = 0, y = 0}
|
local dx = px - self:getWidth()/2
|
||||||
for i,v in pairs(compassZones) do
|
local dy = -(py - self:getHeight()/2)
|
||||||
local lowPos = {x = v.x-15, y = v.y-15}
|
local radius = math.sqrt(dx*dx+dy*dy)
|
||||||
local highPos = {x = v.x+15, y = v.y+15}
|
local movex=0
|
||||||
if Minimap.isClickInRange(pos, lowPos, highPos) then
|
local movey=0
|
||||||
move.x = move.x + v.posx * minimapWidget:getZoom()/10
|
dx = dx/radius
|
||||||
move.y = move.y + v.posy * minimapWidget:getZoom()/10
|
dy = dy/radius
|
||||||
break
|
|
||||||
end
|
if dx > 0.5 then movex = 1 end
|
||||||
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 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)
|
minimapWidget:setCameraPosition(pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,27 +1,24 @@
|
||||||
MapControl < Button
|
MapControl < Button
|
||||||
size: 16 16
|
size: 20 20
|
||||||
|
|
||||||
$pressed:
|
$pressed:
|
||||||
image-clip: 0 0 16 16
|
icon-clip: 0 0 16 16
|
||||||
|
|
||||||
$hover !pressed:
|
$hover !pressed:
|
||||||
image-clip: 0 16 16 16
|
icon-clip: 0 16 16 16
|
||||||
|
|
||||||
$!pressed !hover:
|
$!pressed !hover:
|
||||||
image-clip: 0 32 16 16
|
icon-clip: 0 32 16 16
|
||||||
|
|
||||||
$disabled:
|
|
||||||
image-color: #ffffff88
|
|
||||||
|
|
||||||
FloorUpControl < MapControl
|
FloorUpControl < MapControl
|
||||||
image-source: /game_minimap/floor_up.png
|
icon-source: /game_minimap/floor_up.png
|
||||||
|
|
||||||
FloorDownControl < MapControl
|
FloorDownControl < MapControl
|
||||||
image-source: /game_minimap/floor_down.png
|
icon-source: /game_minimap/floor_down.png
|
||||||
|
|
||||||
//ZoomOutControl < MapControl
|
//ZoomOutControl < MapControl
|
||||||
//image-source: /game_minimap/zoom_out.png
|
//image-source: /game_minimap/zoom_out.png
|
||||||
|
|
||||||
//ZoomInControl < MapControl
|
//ZoomInControl < MapControl
|
||||||
//image-source: /game_minimap/zoom_in.png
|
//image-source: /game_minimap/zoom_in.png
|
||||||
|
|
||||||
|
@ -37,81 +34,78 @@ MiniWindow
|
||||||
padding: 3
|
padding: 3
|
||||||
UIMap
|
UIMap
|
||||||
id: minimap
|
id: minimap
|
||||||
anchors.left: parent.left
|
anchors.fill: parent
|
||||||
anchors.top: parent.top
|
|
||||||
size: 110 110
|
|
||||||
|
|
||||||
UIButton
|
UIButton
|
||||||
id: compass
|
id: compass
|
||||||
image-source: /game_minimap/compass.png
|
image-source: /game_minimap/compass.png
|
||||||
|
image-smooth: true
|
||||||
color: #ffffff
|
color: #ffffff
|
||||||
anchors.left: minimap.right
|
anchors.left: parent.left
|
||||||
anchors.top: minimap.top
|
anchors.top: parent.top
|
||||||
size: 60 60
|
size: 48 48
|
||||||
margin-top: 3
|
margin-top: 4
|
||||||
margin-left: 5
|
margin-left: 4
|
||||||
@onClick: function(...) Minimap.compassClick(...) end
|
@onClick: function(...) Minimap.compassClick(...) end
|
||||||
|
|
||||||
UIButton
|
UIButton
|
||||||
id: compassReset
|
id: compassReset
|
||||||
text: Reset
|
text: R
|
||||||
font: verdana-11px-rounded
|
font: verdana-11px-rounded
|
||||||
anchors.left: compass.left
|
anchors.centerIn: compass
|
||||||
anchors.top: compass.top
|
margin-top: 2
|
||||||
margin-top: 25
|
margin-right: 1
|
||||||
margin-left: 14
|
|
||||||
@onClick: function(...) Minimap.center(...) end
|
@onClick: function(...) Minimap.center(...) end
|
||||||
$pressed:
|
$pressed:
|
||||||
color: #eb9f4f88
|
color: #eb9f4f88
|
||||||
margin-top: 26
|
|
||||||
margin-left: 15
|
|
||||||
|
|
||||||
$hover !pressed:
|
$hover !pressed:
|
||||||
color: #eb9f4f
|
color: #eb9f4f
|
||||||
|
|
||||||
$!pressed !hover:
|
$!pressed !hover:
|
||||||
color: #ffffff
|
color: #ffffff
|
||||||
margin-top: 25
|
|
||||||
margin-left: 14
|
|
||||||
|
|
||||||
$disabled:
|
$disabled:
|
||||||
image-color: #ffffff88
|
image-color: #ffffff88
|
||||||
|
|
||||||
FloorUpControl
|
FloorUpControl
|
||||||
id: floorUp
|
id: floorUp
|
||||||
anchors.left: minimap.right
|
anchors.right: parent.right
|
||||||
anchors.top: compass.bottom
|
anchors.bottom: parent.bottom
|
||||||
margin-top: 10
|
margin-right: 28
|
||||||
margin-left: 15
|
margin-bottom: 28
|
||||||
enabled: true
|
enabled: true
|
||||||
@onClick: Minimap.onButtonClick(self:getId())
|
@onClick: Minimap.onButtonClick(self:getId())
|
||||||
|
|
||||||
FloorDownControl
|
FloorDownControl
|
||||||
id: floorDown
|
id: floorDown
|
||||||
anchors.left: floorUp.left
|
anchors.right: parent.right
|
||||||
anchors.top: floorUp.bottom
|
anchors.bottom: parent.bottom
|
||||||
margin-top: 4
|
margin-right: 28
|
||||||
|
margin-bottom: 4
|
||||||
enabled: true
|
enabled: true
|
||||||
@onClick: Minimap.onButtonClick(self:getId())
|
@onClick: Minimap.onButtonClick(self:getId())
|
||||||
|
|
||||||
Button
|
Button
|
||||||
id: zoomIn
|
id: zoomIn
|
||||||
text: +
|
text: +
|
||||||
size: 16 16
|
size: 20 20
|
||||||
anchors.left: floorUp.right
|
anchors.right: parent.right
|
||||||
anchors.top: floorUp.top
|
anchors.bottom: parent.bottom
|
||||||
margin-left: 10
|
margin-right: 4
|
||||||
|
margin-bottom: 28
|
||||||
enabled: true
|
enabled: true
|
||||||
@onClick: Minimap.onButtonClick(self:getId())
|
@onClick: Minimap.onButtonClick(self:getId())
|
||||||
|
|
||||||
Button
|
Button
|
||||||
id: zoomOut
|
id: zoomOut
|
||||||
text: -
|
text: -
|
||||||
font: terminus-14px-bold
|
font: terminus-14px-bold
|
||||||
size: 16 16
|
size: 20 20
|
||||||
anchors.left: floorDown.right
|
anchors.right: parent.right
|
||||||
anchors.top: floorDown.top
|
anchors.bottom: parent.bottom
|
||||||
margin-left: 10
|
margin-right: 4
|
||||||
|
margin-bottom: 4
|
||||||
enabled: true
|
enabled: true
|
||||||
@onClick: Minimap.onButtonClick(self:getId())
|
@onClick: Minimap.onButtonClick(self:getId())
|
||||||
|
|
||||||
|
|
|
@ -218,6 +218,7 @@ void Application::registerLuaFunctions()
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setIconHeight", &UIWidget::setIconHeight);
|
g_lua.bindClassMemberFunction<UIWidget>("setIconHeight", &UIWidget::setIconHeight);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setIconSize", &UIWidget::setIconSize);
|
g_lua.bindClassMemberFunction<UIWidget>("setIconSize", &UIWidget::setIconSize);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setIconRect", &UIWidget::setIconRect);
|
g_lua.bindClassMemberFunction<UIWidget>("setIconRect", &UIWidget::setIconRect);
|
||||||
|
g_lua.bindClassMemberFunction<UIWidget>("setIconClip", &UIWidget::setIconClip);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setBorderWidth", &UIWidget::setBorderWidth);
|
g_lua.bindClassMemberFunction<UIWidget>("setBorderWidth", &UIWidget::setBorderWidth);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setBorderWidthTop", &UIWidget::setBorderWidthTop);
|
g_lua.bindClassMemberFunction<UIWidget>("setBorderWidthTop", &UIWidget::setBorderWidthTop);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("setBorderWidthRight", &UIWidget::setBorderWidthRight);
|
g_lua.bindClassMemberFunction<UIWidget>("setBorderWidthRight", &UIWidget::setBorderWidthRight);
|
||||||
|
@ -267,6 +268,7 @@ void Application::registerLuaFunctions()
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("getIconHeight", &UIWidget::getIconHeight);
|
g_lua.bindClassMemberFunction<UIWidget>("getIconHeight", &UIWidget::getIconHeight);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("getIconSize", &UIWidget::getIconSize);
|
g_lua.bindClassMemberFunction<UIWidget>("getIconSize", &UIWidget::getIconSize);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("getIconRect", &UIWidget::getIconRect);
|
g_lua.bindClassMemberFunction<UIWidget>("getIconRect", &UIWidget::getIconRect);
|
||||||
|
g_lua.bindClassMemberFunction<UIWidget>("getIconClip", &UIWidget::getIconClip);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("getBorderTopColor", &UIWidget::getBorderTopColor);
|
g_lua.bindClassMemberFunction<UIWidget>("getBorderTopColor", &UIWidget::getBorderTopColor);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("getBorderRightColor", &UIWidget::getBorderRightColor);
|
g_lua.bindClassMemberFunction<UIWidget>("getBorderRightColor", &UIWidget::getBorderRightColor);
|
||||||
g_lua.bindClassMemberFunction<UIWidget>("getBorderBottomColor", &UIWidget::getBorderBottomColor);
|
g_lua.bindClassMemberFunction<UIWidget>("getBorderBottomColor", &UIWidget::getBorderBottomColor);
|
||||||
|
|
|
@ -278,6 +278,7 @@ protected:
|
||||||
TexturePtr m_icon;
|
TexturePtr m_icon;
|
||||||
Color m_iconColor;
|
Color m_iconColor;
|
||||||
Rect m_iconRect;
|
Rect m_iconRect;
|
||||||
|
Rect m_iconClipRect;
|
||||||
EdgeGroup<Color> m_borderColor;
|
EdgeGroup<Color> m_borderColor;
|
||||||
EdgeGroup<int> m_borderWidth;
|
EdgeGroup<int> m_borderWidth;
|
||||||
EdgeGroup<int> m_margin;
|
EdgeGroup<int> m_margin;
|
||||||
|
@ -311,6 +312,7 @@ public:
|
||||||
void setIconHeight(int height) { m_iconRect.setHeight(height); }
|
void setIconHeight(int height) { m_iconRect.setHeight(height); }
|
||||||
void setIconSize(const Size& size) { m_iconRect.resize(size); }
|
void setIconSize(const Size& size) { m_iconRect.resize(size); }
|
||||||
void setIconRect(const Rect& rect) { m_iconRect = rect; }
|
void setIconRect(const Rect& rect) { m_iconRect = rect; }
|
||||||
|
void setIconClip(const Rect& rect) { m_iconClipRect = rect; }
|
||||||
void setBorderWidth(int width) { m_borderWidth.set(width); updateLayout(); }
|
void setBorderWidth(int width) { m_borderWidth.set(width); updateLayout(); }
|
||||||
void setBorderWidthTop(int width) { m_borderWidth.top = width; }
|
void setBorderWidthTop(int width) { m_borderWidth.top = width; }
|
||||||
void setBorderWidthRight(int width) { m_borderWidth.right = width; }
|
void setBorderWidthRight(int width) { m_borderWidth.right = width; }
|
||||||
|
@ -361,6 +363,7 @@ public:
|
||||||
int getIconHeight() { return m_iconRect.height(); }
|
int getIconHeight() { return m_iconRect.height(); }
|
||||||
Size getIconSize() { return m_iconRect.size(); }
|
Size getIconSize() { return m_iconRect.size(); }
|
||||||
Rect getIconRect() { return m_iconRect; }
|
Rect getIconRect() { return m_iconRect; }
|
||||||
|
Rect getIconClip() { return m_iconClipRect; }
|
||||||
Color getBorderTopColor() { return m_borderColor.top; }
|
Color getBorderTopColor() { return m_borderColor.top; }
|
||||||
Color getBorderRightColor() { return m_borderColor.right; }
|
Color getBorderRightColor() { return m_borderColor.right; }
|
||||||
Color getBorderBottomColor() { return m_borderColor.bottom; }
|
Color getBorderBottomColor() { return m_borderColor.bottom; }
|
||||||
|
|
|
@ -100,6 +100,8 @@ void UIWidget::parseBaseStyle(const OTMLNodePtr& styleNode)
|
||||||
setIconSize(node->value<Size>());
|
setIconSize(node->value<Size>());
|
||||||
else if(node->tag() == "icon-rect")
|
else if(node->tag() == "icon-rect")
|
||||||
setIconRect(node->value<Rect>());
|
setIconRect(node->value<Rect>());
|
||||||
|
else if(node->tag() == "icon-clip")
|
||||||
|
setIconClip(node->value<Rect>());
|
||||||
else if(node->tag() == "opacity")
|
else if(node->tag() == "opacity")
|
||||||
setOpacity(node->value<float>());
|
setOpacity(node->value<float>());
|
||||||
else if(node->tag() == "enabled")
|
else if(node->tag() == "enabled")
|
||||||
|
@ -369,15 +371,17 @@ void UIWidget::drawIcon(const Rect& screenCoords)
|
||||||
drawRect.translate(m_iconRect.topLeft());
|
drawRect.translate(m_iconRect.topLeft());
|
||||||
drawRect.resize(m_iconRect.size());
|
drawRect.resize(m_iconRect.size());
|
||||||
} else {
|
} else {
|
||||||
drawRect.resize(m_icon->getSize());
|
drawRect.resize(m_iconClipRect.size());
|
||||||
drawRect.moveCenter(screenCoords.center());
|
drawRect.moveCenter(screenCoords.center());
|
||||||
}
|
}
|
||||||
g_painter->setColor(m_iconColor);
|
g_painter->setColor(m_iconColor);
|
||||||
g_painter->drawTexturedRect(drawRect, m_icon);
|
g_painter->drawTexturedRect(drawRect, m_icon, m_iconClipRect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UIWidget::setIcon(const std::string& iconFile)
|
void UIWidget::setIcon(const std::string& iconFile)
|
||||||
{
|
{
|
||||||
m_icon = g_textures.getTexture(iconFile);
|
m_icon = g_textures.getTexture(iconFile);
|
||||||
|
if(!m_iconClipRect.isValid())
|
||||||
|
m_iconClipRect = Rect(0, 0, m_icon->getSize());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue