From af6a32263ca2c7c510482382bc757f47d0004c22 Mon Sep 17 00:00:00 2001 From: Samuel Date: Mon, 8 Oct 2012 21:32:25 +0200 Subject: [PATCH] Spell Cooldowns for 8.70+ - Moved SpelllistSettings to spells.lua - Added cooldownbar for 8.70+ --- modules/game_interface/gameinterface.lua | 34 ++++++++ modules/game_interface/gameinterface.otui | 79 +++++++++++++++++- .../game_spelllist/icons/cooldownIcons.png | Bin 0 -> 5840 bytes modules/game_spelllist/spelllist.lua | 37 ++++---- modules/gamelib/spells.lua | 20 ++++- 5 files changed, 150 insertions(+), 20 deletions(-) create mode 100644 modules/game_spelllist/icons/cooldownIcons.png diff --git a/modules/game_interface/gameinterface.lua b/modules/game_interface/gameinterface.lua index 914c0bd1..fa9de4d6 100644 --- a/modules/game_interface/gameinterface.lua +++ b/modules/game_interface/gameinterface.lua @@ -10,6 +10,7 @@ mouseGrabberWidget = nil countWindow = nil logoutWindow = nil exitWindow = nil +cooldownPanel = nil function init() g_ui.importStyle('styles/countwindow.otui') @@ -22,6 +23,8 @@ function init() gameRootPanel:hide() gameRootPanel:lower() + cooldownPanel = gameRootPanel:getChildById('spellPanel') + mouseGrabberWidget = gameRootPanel:getChildById('mouseGrabber') mouseGrabberWidget.onMouseRelease = onMouseGrabberRelease @@ -79,6 +82,8 @@ function terminate() onLoginAdvice = onLoginAdvice }) disconnect(gameLeftPanel, { onVisibilityChange = onLeftPanelVisibilityChange }) + cooldownPanel:destroy() + logoutButton:destroy() gameRootPanel:destroy() end @@ -90,6 +95,8 @@ function show() gameRootPanel:show() gameRootPanel:focus() gameMapPanel:followCreature(g_game.getLocalPlayer()) + + cooldownPanel:setVisible((g_game.getClientVersion() >= 870)) end function hide() @@ -545,3 +552,30 @@ function onLeftPanelVisibilityChange(leftPanel, visible) end end end + +function setGroupCooldown(groupId, duration) + if not SpellGroups[groupId] then return end + + local icon = gameRootPanel:getChildById('groupIcon' .. SpellGroups[groupId]) + if icon then + icon:setOn(true) + removeEvent(icon.event) + icon.event = scheduleEvent(function() icon:setOn(false) end, duration) + end +end + +function setCooldown(iconFile, iconId, spellformula, duration) + local icon = cooldownPanel:getChildById(spellformula) + + if icon then + removeEvent(icon.event) + icon.event = scheduleEvent(function() icon:destroy() end, duration) + else + icon = g_ui.createWidget('SpellIcon', cooldownPanel) + icon:setId(spellformula) + icon:setImageSource('/game_spelllist/icons/' .. iconFile) + icon:setTooltip(spellformula) + icon:setImageClip(modules.game_spelllist.getIconImageClip(iconId)) + icon.event = scheduleEvent(function() icon:destroy() end, duration) + end +end diff --git a/modules/game_interface/gameinterface.otui b/modules/game_interface/gameinterface.otui index 7db4b684..220955d9 100644 --- a/modules/game_interface/gameinterface.otui +++ b/modules/game_interface/gameinterface.otui @@ -1,3 +1,19 @@ +SpellGroupIcon < UIWidget + size: 22 22 + image-size: 22 22 + image-source: /game_spelllist/icons/cooldownIcons.png + focusable: false + +SpellIcon < UIWidget + size: 22 22 + image-size: 22 22 + margin-right: 3 + margin-top: 6 + margin-left: 3 + focusable: false + $first: + margin-left: 100 + GameSidePanel < UIMiniWindowContainer image-source: /images/sidepanel.png image-border: 4 @@ -55,6 +71,67 @@ UIWidget focusable: false on: true + Panel + id: spellPanel + layout: + type: horizontalBox + height: 32 + width: 250 + anchors.left: gameLeftPanel.right + anchors.bottom: parent.bottom + relative-margin: bottom + margin-bottom: 187 + margin-left: 10 + border-width: 1 + border-color: #00000077 + background-color: #ffffff11 + focusable: false + + SpellGroupIcon + id: groupIconAttack + parent: spellPanel + image-clip: 0 32 32 32 + anchors.top: spellPanel.top + anchors.left: spellPanel.left + !tooltip: tr('Attack') + margin-top: 3 + margin-left: 3 + $on: + image-clip: 0 0 32 32 + + SpellGroupIcon + id: groupIconHealing + image-clip: 32 32 32 32 + anchors.top: spellPanel.top + anchors.left: groupIconAttack.right + !tooltip: tr('Healing') + margin-top: 3 + margin-left: 3 + $on: + image-clip: 32 0 32 32 + + SpellGroupIcon + id: groupIconSupport + image-clip: 64 32 32 32 + anchors.top: spellPanel.top + anchors.left: groupIconHealing.right + !tooltip: tr('Support') + margin-top: 3 + margin-left: 3 + $on: + image-clip: 64 0 32 32 + + SpellGroupIcon + id: groupIconSpecial + image-clip: 96 32 32 32 + anchors.top: spellPanel.top + anchors.left: groupIconSupport.right + !tooltip: tr('Special') + margin-top: 3 + margin-left: 3 + $on: + image-clip: 96 0 32 32 + Splitter id: bottomSplitter anchors.left: gameLeftPanel.right @@ -63,7 +140,7 @@ UIWidget relative-margin: bottom margin-bottom: 172 @canUpdateMargin: function(self, newMargin) return math.max(math.min(newMargin, self:getParent():getHeight() - 300), 100) end - @onGeometryChange: function(self) self:setMarginBottom(math.min(math.max(self:getParent():getHeight() - 300, 100), self:getMarginBottom())) end + @onGeometryChange: function(self) self:setMarginBottom(math.min(math.max(self:getParent():getHeight() - 300, 100), self:getMarginBottom())) self:getParent():getChildById('spellPanel'):setMarginBottom(15 + math.min(math.max(self:getParent():getHeight() - 300, 100), self:getMarginBottom())) end UIWidget id: mouseGrabber diff --git a/modules/game_spelllist/icons/cooldownIcons.png b/modules/game_spelllist/icons/cooldownIcons.png new file mode 100644 index 0000000000000000000000000000000000000000..16ed3de6f6aba7d1cc61cdf5d9650c8c17d3bc0b GIT binary patch literal 5840 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