--[[-------------------------------------------------------------------- Ovale Spell Priority Copyright (C) 2009, 2010, 2011, 2012 Sidoine Copyright (C) 2012, 2013 Johnny C. Lam This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License in the LICENSE file accompanying this program. --]]-------------------------------------------------------------------- local _, Ovale = ... -- -- local L = Ovale.L local OvaleOptions = Ovale.OvaleOptions local OvaleSpellBook = Ovale.OvaleSpellBook local OvaleState = Ovale.OvaleState local format = string.format local next = next local pairs = pairs local strfind = string.find local strsub = string.sub local tostring = tostring local API_GetTime = GetTime -- local function HasScriptControls() return (next(Ovale.checkBoxWidget) ~= nil or next(Ovale.listWidget) ~= nil) end -- local function SetValue(self, value, actionTexture) self.icone:Show() self.icone:SetTexture(actionTexture); self.icone:SetAlpha(1.0) self.cd:Hide() self.focusText:Hide() self.rangeIndicator:Hide() self.shortcut:Hide() if value then self.actionType = "value" self.actionHelp = nil self.value = value if value < 10 then self.remains:SetFormattedText("%.1f", value) elseif value == math.huge then self.remains:SetFormattedText("inf") else self.remains:SetFormattedText("%d", value) end self.remains:Show() else self.remains:Hide() end self:Show() end local function Update(self, element, startTime, actionTexture, actionInRange, actionCooldownStart, actionCooldownDuration, actionUsable, actionShortcut, actionIsCurrent, actionEnable, actionType, actionId, actionTarget) self.actionType = actionType self.actionId = actionId self.value = nil local now = API_GetTime() local state = OvaleState.state local profile = OvaleOptions:GetProfile() if startTime and actionTexture then -- Cooldown text. if actionTexture ~= self.texture or not self.startTime or (startTime ~= now and startTime > self.startTime + 0.01) or (startTime < self.cooldownEnd - 0.01) then if actionTexture ~= self.texture or not self.startTime or (startTime ~= now and startTime > self.startTime + 0.01) then self.cooldownStart = now end self.texture = actionTexture self.cooldownEnd = startTime if startTime == now then self.cd:Hide() else self.lastSound = nil if self.cdShown then self.cd:Show() self.cd:SetCooldown(self.cooldownStart, self.cooldownEnd - self.cooldownStart); end end end if not profile.apparence.flashIcon and startTime <= now then self.cd:Hide() end self.startTime = startTime -- L'icĂ´ne avec le cooldown self.icone:Show() self.icone:SetTexture(actionTexture) if actionUsable then self.icone:SetAlpha(1.0) else self.icone:SetAlpha(0.33) end -- Icon color overlay (red or not red). local red = false if startTime > actionCooldownStart + actionCooldownDuration + 0.01 and startTime > now and startTime > state.nextCast then red = true end if red then self.icone:SetVertexColor(0.75, 0.2, 0.2) else self.icone:SetVertexColor(1, 1, 1) end -- Action help text. self.actionHelp = element.params.help -- Sound file. if element.params.sound and not self.lastSound then local delay = element.params.soundtime or 0.5 if now >= startTime - delay then self.lastSound = element.params.sound -- print("Play" .. self.lastSound) PlaySoundFile(self.lastSound) end end if not red and startTime > now and profile.apparence.highlightIcon then local lag = 0.6 local newShouldClick = (startTime < now + lag) if self.shouldClick ~= newShouldClick then if newShouldClick then self:SetChecked(1) else self:SetChecked(0) end self.shouldClick = newShouldClick end elseif self.shouldClick then self.shouldClick = false self:SetChecked(0) end -- Remaining time. if (profile.apparence.numeric or self.params.text == "always") and startTime > now then self.remains:SetFormattedText("%.1f", startTime - now) self.remains:Show() else self.remains:Hide() end -- Keyboard shortcut. if profile.apparence.raccourcis then self.shortcut:Show() self.shortcut:SetText(actionShortcut) else self.shortcut:Hide() end -- Range indicator. if actionInRange == 1 then self.rangeIndicator:SetVertexColor(0.6,0.6,0.6) self.rangeIndicator:Show() elseif actionInRange == 0 then self.rangeIndicator:SetVertexColor(1.0,0.1,0.1) self.rangeIndicator:Show() else self.rangeIndicator:Hide() end -- Focus text. if actionTarget and actionTarget~="target" then self.focusText:SetText(actionTarget) self.focusText:Show() else self.focusText:Hide() end self:Show() else self.icone:Hide() self.rangeIndicator:Hide() self.shortcut:Hide() self.remains:Hide() self.focusText:Hide() if profile.apparence.hideEmpty then self:Hide() else self:Show() end if self.shouldClick then self:SetChecked(0) self.shouldClick = false end end return startTime, element end local function SetHelp(self, help) self.help = help end local function SetParams(self, params, secure) self.params = params self.actionButton = false if secure then for k,v in pairs(params) do local f = strfind(k, "spell") if f then local prefix = strsub(k, 1, f-1) local suffix = strsub(k, f + 5) local param Ovale:FormatPrint("%stype%s", prefix, suffix) self:SetAttribute(prefix .. "type" .. suffix, "spell") self:SetAttribute("unit", self.params.target or "target") self:SetAttribute(k, OvaleSpellBook:GetSpellName(v)) self.actionButton = true end end end end local function SetFontScale(self, scale) self.fontScale = scale self.shortcut:SetFont(self.fontName, self.fontHeight * self.fontScale, self.fontFlags) self.rangeIndicator:SetFont(self.fontName, self.fontHeight * self.fontScale, self.fontFlags) end local function SetRangeIndicator(self, text) self.rangeIndicator:SetText(text) end -- function OvaleIcone_OnMouseUp(self) if not self.actionButton then Ovale:ToggleOptions() end self:SetChecked(1) end function OvaleIcone_OnEnter(self) if self.help or self.actionType or HasScriptControls() then GameTooltip:SetOwner(self, "ANCHOR_BOTTOMLEFT") if self.help then GameTooltip:SetText(L[self.help]) end if self.actionType then local actionHelp = self.actionHelp if not actionHelp then if self.actionType == "spell" then actionHelp = OvaleSpellBook:GetSpellName(self.actionId) elseif self.actionType == "value" then actionHelp = (self.value < math.huge) and tostring(self.value) or "infinity" else actionHelp = format("%s %s", self.actionType, tostring(self.actionId)) end end GameTooltip:AddLine(actionHelp, 0.5, 1, 0.75) end if HasScriptControls() then GameTooltip:AddLine(L["Cliquer pour afficher/cacher les options"], 1, 1, 1) end GameTooltip:Show() end end function OvaleIcone_OnLeave(self) if self.help or HasScriptControls() then GameTooltip:Hide() end end function OvaleIcone_OnLoad(self) local name = self:GetName() local profile = OvaleOptions:GetProfile() -- self.icone = _G[name.."Icon"] self.shortcut = _G[name.."HotKey"] self.remains = _G[name.."Name"] self.rangeIndicator = _G[name.."Count"] self.rangeIndicator:SetText(profile.apparence.targetText) self.cd = _G[name.."Cooldown"] self.normalTexture = _G[name.."NormalTexture"] local fontName, fontHeight, fontFlags = self.shortcut:GetFont() self.fontName = fontName self.fontHeight = fontHeight self.fontFlags = fontFlags self.focusText = self:CreateFontString(nil, "OVERLAY"); self.cdShown = true self.shouldClick = false self.help = nil self.value = nil self.fontScale = nil self.lastSound = nil self.startTime = nil self.cooldownEnd = nil self.cooldownStart = nil self.texture = nil self.params = nil self.actionButton = false self.actionType = nil self.actionId = nil self.actionHelp = nil -- self:SetScript("OnMouseUp", OvaleIcone_OnMouseUp) self.focusText:SetFontObject("GameFontNormalSmall"); self.focusText:SetAllPoints(self); self.focusText:SetTextColor(1,1,1); self.focusText:SetText(L["Focus"]) --self:RegisterForClicks("LeftButtonUp") self:RegisterForClicks("AnyUp") self.SetSkinGroup = SetSkinGroup self.Update = Update self.SetHelp = SetHelp self.SetParams = SetParams self.SetFontScale = SetFontScale self.SetRangeIndicator = SetRangeIndicator self.SetValue = SetValue if profile.clickThru then self:EnableMouse(false) end end