Buffer condition/cooldown icons on module init

* This should hopefully avoid some lag with slow hdd computers
This commit is contained in:
BeniS 2013-02-23 18:53:27 +13:00
parent 035ce26728
commit f4f9e319d8
4 changed files with 58 additions and 22 deletions

View File

@ -6,7 +6,7 @@ local ProgressCallback = {
cooldownWindow = nil cooldownWindow = nil
cooldownButton = nil cooldownButton = nil
contentsPanel = nil contentsPanel = nil
spellCooldownPanel = nil cooldownPanel = nil
lastPlayer = nil lastPlayer = nil
function init() function init()
@ -23,7 +23,13 @@ function init()
cooldownWindow:setup() cooldownWindow:setup()
contentsPanel = cooldownWindow:getChildById('contentsPanel') contentsPanel = cooldownWindow:getChildById('contentsPanel')
spellCooldownPanel = contentsPanel:getChildById('spellCooldownPanel') cooldownPanel = contentsPanel:getChildById('cooldownPanel')
-- load cooldown icons
local iconIds = Spells.getSpellIconIds()
for k,id in pairs(iconIds) do
loadIcon(id):destroy()
end
if g_game.isOnline() then if g_game.isOnline() then
online() online()
@ -39,6 +45,24 @@ function terminate()
cooldownButton:destroy() cooldownButton:destroy()
end end
function loadIcon(iconId)
local spell, profile, spellName = Spells.getSpellByIcon(iconId)
if not spellName then return end
clientIconId = Spells.getClientId(spellName)
if not clientIconId then return end
local icon = cooldownPanel:getChildById(iconId)
if not icon then
icon = g_ui.createWidget('SpellIcon')
icon:setId(iconId)
end
icon:setImageSource('/images/game/spells/' .. SpelllistSettings[profile].iconFile)
icon:setImageClip(Spells.getImageClip(clientIconId, profile))
return icon
end
function onMiniWindowClose() function onMiniWindowClose()
cooldownButton:setOn(false) cooldownButton:setOn(false)
end end
@ -68,7 +92,7 @@ function online()
end end
function refresh() function refresh()
spellCooldownPanel:destroyChildren() cooldownPanel:destroyChildren()
end end
function removeCooldown(progressRect) function removeCooldown(progressRect)
@ -117,24 +141,16 @@ function updateCooldown(progressRect, interval)
end end
function onSpellCooldown(iconId, duration) function onSpellCooldown(iconId, duration)
local spell, profile, spellName = Spells.getSpellByIcon(iconId) local icon = loadIcon(iconId)
if not spellName then return end
clientIconId = Spells.getClientId(spellName)
if not clientIconId then return end
local icon = spellCooldownPanel:getChildById(spellName)
if not icon then if not icon then
icon = g_ui.createWidget('SpellIcon', spellCooldownPanel) return
icon:setId(spellName)
end end
icon:setImageSource('/images/game/spells/' .. SpelllistSettings[profile].iconFile) icon:setParent(cooldownPanel)
icon:setImageClip(Spells.getImageClip(clientIconId, profile))
local progressRect = icon:getChildById(spellName) local progressRect = icon:getChildById(iconId)
if not progressRect then if not progressRect then
progressRect = g_ui.createWidget('SpellProgressRect', icon) progressRect = g_ui.createWidget('SpellProgressRect', icon)
progressRect:setId(spellName) progressRect:setId(iconId)
progressRect.icon = icon progressRect.icon = icon
progressRect:fill('parent') progressRect:fill('parent')
else else

View File

@ -87,7 +87,7 @@ MiniWindow
!tooltip: tr('Special') !tooltip: tr('Special')
Panel Panel
id: spellCooldownPanel id: cooldownPanel
layout: layout:
type: horizontalBox type: horizontalBox
height: 30 height: 30
@ -98,4 +98,3 @@ MiniWindow
anchors.right: parent.right anchors.right: parent.right
background-color: #ffffff11 background-color: #ffffff11

View File

@ -48,6 +48,11 @@ function init()
soulLabel = healthInfoWindow:recursiveGetChildById('soulLabel') soulLabel = healthInfoWindow:recursiveGetChildById('soulLabel')
capLabel = healthInfoWindow:recursiveGetChildById('capLabel') capLabel = healthInfoWindow:recursiveGetChildById('capLabel')
-- load condition icons
for k,v in pairs(Icons) do
loadIcon(k):destroy()
end
if g_game.isOnline() then if g_game.isOnline() then
local localPlayer = g_game.getLocalPlayer() local localPlayer = g_game.getLocalPlayer()
onHealthChange(localPlayer, localPlayer:getHealth(), localPlayer:getMaxHealth()) onHealthChange(localPlayer, localPlayer:getHealth(), localPlayer:getMaxHealth())
@ -92,13 +97,19 @@ function toggleIcon(bitChanged)
if icon then if icon then
icon:destroy() icon:destroy()
else else
icon = g_ui.createWidget('ConditionWidget', content) icon = loadIcon(bitChanged)
icon:setId(Icons[bitChanged].id) icon:setParent(content)
icon:setImageSource(Icons[bitChanged].path)
icon:setTooltip(Icons[bitChanged].tooltip)
end end
end end
function loadIcon(bitChanged)
local icon = g_ui.createWidget('ConditionWidget', content)
icon:setId(Icons[bitChanged].id)
icon:setImageSource(Icons[bitChanged].path)
icon:setTooltip(Icons[bitChanged].tooltip)
return icon
end
function offline() function offline()
healthInfoWindow:recursiveGetChildById('conditionPanel'):destroyChildren() healthInfoWindow:recursiveGetChildById('conditionPanel'):destroyChildren()
end end

View File

@ -361,6 +361,16 @@ function Spells.getSpellByIcon(iconId)
return nil return nil
end end
function Spells.getSpellIconIds()
local ids = {}
for profile,data in pairs(SpellInfo) do
for k,spell in pairs(data) do
table.insert(ids, spell.id)
end
end
return ids
end
function Spells.getSpellProfileByWords(words) function Spells.getSpellProfileByWords(words)
for profile,data in pairs(SpellInfo) do for profile,data in pairs(SpellInfo) do
for k,spell in pairs(data) do for k,spell in pairs(data) do