- Added/updated skill gems and bases - Fixed curse stats with wrong sign - Fixed wrong sources on quality mods
130 lines
3.0 KiB
Lua
130 lines
3.0 KiB
Lua
-- Path of Building
|
|
--
|
|
-- Class: Tooltip
|
|
-- Tooltip
|
|
--
|
|
local ipairs = ipairs
|
|
local t_insert = table.insert
|
|
local m_max = math.max
|
|
local m_floor = math.floor
|
|
local s_gmatch = string.gmatch
|
|
|
|
local TooltipClass = newClass("Tooltip", function(self)
|
|
self.lines = { }
|
|
self:Clear()
|
|
end)
|
|
|
|
function TooltipClass:Clear()
|
|
wipeTable(self.lines)
|
|
if self.updateParams then
|
|
wipeTable(self.updateParams)
|
|
end
|
|
self.center = false
|
|
self.color = { 0.5, 0.3, 0 }
|
|
end
|
|
|
|
function TooltipClass:CheckForUpdate(...)
|
|
local doUpdate = false
|
|
if not self.updateParams then
|
|
self.updateParams = { }
|
|
end
|
|
for i = 1, select('#', ...) do
|
|
if self.updateParams[i] ~= select(i, ...) then
|
|
doUpdate = true
|
|
break
|
|
end
|
|
end
|
|
if doUpdate then
|
|
self:Clear()
|
|
for i = 1, select('#', ...) do
|
|
self.updateParams[i] = select(i, ...)
|
|
end
|
|
return true
|
|
end
|
|
end
|
|
|
|
function TooltipClass:AddLine(size, text)
|
|
if text then
|
|
for line in s_gmatch(text .. "\n", "([^\n]*)\n") do
|
|
if self.maxWidth then
|
|
for _, line in ipairs(main:WrapString(line, size, self.maxWidth - 12)) do
|
|
t_insert(self.lines, { size = size, text = line })
|
|
end
|
|
else
|
|
t_insert(self.lines, { size = size, text = line })
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function TooltipClass:AddSeparator(size)
|
|
t_insert(self.lines, { size = size })
|
|
end
|
|
|
|
function TooltipClass:GetSize()
|
|
local ttW, ttH = 0, 0
|
|
for i, data in ipairs(self.lines) do
|
|
if data.text or (self.lines[i - 1] and self.lines[i + 1] and self.lines[i + 1].text) then
|
|
ttH = ttH + data.size + 2
|
|
end
|
|
if data.text then
|
|
ttW = m_max(ttW, DrawStringWidth(data.size, "VAR", data.text))
|
|
end
|
|
end
|
|
return ttW + 12, ttH + 10
|
|
end
|
|
|
|
function TooltipClass:Draw(x, y, w, h, viewPort)
|
|
if #self.lines == 0 then
|
|
return
|
|
end
|
|
local ttW, ttH = self:GetSize()
|
|
local ttX = x
|
|
local ttY = y
|
|
if w and h then
|
|
ttX = ttX + w + 5
|
|
if ttX + ttW > viewPort.x + viewPort.width then
|
|
ttX = m_max(viewPort.x, x - 5 - ttW)
|
|
if ttX + ttW > x then
|
|
ttY = ttY + h
|
|
end
|
|
end
|
|
if ttY + ttH > viewPort.y + viewPort.height then
|
|
ttY = m_max(viewPort.y, y + h - ttH)
|
|
end
|
|
elseif self.center then
|
|
ttX = m_floor(x - ttW/2)
|
|
end
|
|
if type(self.color) == "string" then
|
|
SetDrawColor(self.color)
|
|
else
|
|
SetDrawColor(unpack(self.color))
|
|
end
|
|
DrawImage(nil, ttX, ttY, ttW, 3)
|
|
DrawImage(nil, ttX, ttY, 3, ttH)
|
|
DrawImage(nil, ttX, ttY + ttH - 3, ttW, 3)
|
|
DrawImage(nil, ttX + ttW - 3, ttY, 3, ttH)
|
|
SetDrawColor(0, 0, 0, 0.75)
|
|
DrawImage(nil, ttX + 3, ttY + 3, ttW - 6, ttH - 6)
|
|
SetDrawColor(1, 1, 1)
|
|
local y = ttY + 6
|
|
for i, data in ipairs(self.lines) do
|
|
if data.text then
|
|
if self.center then
|
|
DrawString(ttX + ttW/2, y, "CENTER_X", data.size, "VAR", data.text)
|
|
else
|
|
DrawString(ttX + 6, y, "LEFT", data.size, "VAR", data.text)
|
|
end
|
|
y = y + data.size + 2
|
|
elseif self.lines[i + 1] and self.lines[i - 1] and self.lines[i + 1].text then
|
|
if type(self.color) == "string" then
|
|
SetDrawColor(self.color)
|
|
else
|
|
SetDrawColor(unpack(self.color))
|
|
end
|
|
DrawImage(nil, ttX + 3, y - 1 + data.size / 2, ttW - 6, 2)
|
|
y = y + data.size + 2
|
|
end
|
|
end
|
|
return ttW, ttH
|
|
end |