diff --git a/DKCrutch.lua b/DKCrutch.lua old mode 100755 new mode 100644 index 4273516..dd60c38 --- a/DKCrutch.lua +++ b/DKCrutch.lua @@ -1,5 +1,5 @@ ------------------------------------------------------------------------------- --- DKCrutch 0.5.0 +-- DKCrutch 0.5.1 -- -- Death Knight rune tracker and ability advisor ------------------------------------------------------------------------------- @@ -8,7 +8,7 @@ DKCrutch = {Locals = {}} local L = DKCrutch.Locals -DKCrutch.versionNumber = '0.5.0' +DKCrutch.versionNumber = '0.5.1' DKCrutch.talent = "" DKCrutch.isEnabled = false DKCrutch.talentUnsure = true @@ -66,6 +66,17 @@ DKCrutch.person = { ["foe"] = {}, ["friend"] = {} } +-- Event filter +DKCrutch.HostileFilter = { + ["_DAMAGE"] = true, + ["_LEECH"] = true, + ["_DRAIN"] = true, + ["_STOLEN"] = true, + ["_INSTAKILL"] = true, + ["_INTERRUPT"] = true, + ["_MISSED"] = true +} + -- Our sneaky frame to watch for events ... checks DKCrutch.events[] for the function. Passes all args. DKCrutch.eventFrame = CreateFrame("Frame") @@ -354,11 +365,12 @@ end function DKCrutch:GetSpellCooldownRemaining(spell) local s, d, _ = GetSpellCooldown(spell) + local duration = 0 if (d) and (d>0) then - d = s - GetTime() + d + duration = s - GetTime() + d end - return d + return duration, s, d end function DKCrutch:ProcIcon(name,icon,d,e,value) @@ -776,11 +788,19 @@ function DKCrutch:Update() if (not DKCrutchDB.advisorDisabled) and (InCombatLockdown()) then local spell = DKCrutch:AdviseAbility() - if (spell) and (spell ~= DKCrutch.lastSpell) then - if (spell ~= "") then + if (spell) and (spell ~= "") then + local inRange = IsSpellInRange(DKCrutch.SpellList[spell],"target") + if (inRange) then + DKCrutch.advisorFrame.texture:SetVertexColor( 0.75 + (inRange * 0.25),1 * inRange,1 * inRange,1) + end + if (spell ~= DKCrutch.lastSpell) then DKCrutch.advisorFrame.texture:SetTexture( GetSpellTexture(DKCrutch.SpellList[spell]) ) DKCrutch.lastSpell = spell end + local _, s, d = DKCrutch:GetSpellCooldownRemaining(DKCrutch.SpellList[spell]) + if (d) and (d>0) then + DKCrutch.cooldownFrame:SetCooldown(s, d) + end end end if (not DKCrutchDB.runicDisabled) then diff --git a/DKCrutch.toc b/DKCrutch.toc old mode 100755 new mode 100644 index cabf386..345393a --- a/DKCrutch.toc +++ b/DKCrutch.toc @@ -2,10 +2,14 @@ ## Title: DKCrutch ## Notes: Death Knight rune tracker and rotation helper ## Author: Taracque, Dgrovs of Arathor -## Version: 0.5.0 +## Version: 0.5.1 ## SavedVariables: DKCrutchDB ## OptionalDeps: ## Dependencies: +## X-Curse-Packaged-Version: v0.5.1release +## X-Curse-Project-Name: DKCrutch +## X-Curse-Project-ID: dkcrutch +## X-Curse-Repository-ID: wow/dkcrutch/mainline DKCrutch.lua DKCrutch_GUI.lua diff --git a/DKCrutch_GUI.lua b/DKCrutch_GUI.lua old mode 100755 new mode 100644 index d85ed6e..2f76c6e --- a/DKCrutch_GUI.lua +++ b/DKCrutch_GUI.lua @@ -1,814 +1,823 @@ -------------------------------------------------------------------------------- --- DKCrutch Gui functions --- --- GUI functions and structures for DKCrutch -------------------------------------------------------------------------------- - -local L = DKCrutch.Locals - -function DKCrutch:CreateCheckButton(name, parent, table, field, radio) - local button - if radio then - button = CreateFrame('CheckButton', parent:GetName() .. name, parent, 'SendMailRadioButtonTemplate') - else - button = CreateFrame('CheckButton', parent:GetName() .. name, parent, 'OptionsCheckButtonTemplate') - end - local frame = _G[button:GetName() .. 'Text'] - frame:SetText(name) - frame:SetTextColor(1, 1, 1, 1) - frame:SetFontObject(GameFontNormal) - button:SetScript("OnShow", - function (self) - self:SetChecked(table[field]) - self.origValue = table[field] or self.origValue - end - ) - if radio then - button:SetScript("OnClick", - function (self, button, down) - this:SetChecked(1) - table[field] = not table[field] - end - ) - else - button:SetScript("OnClick", - function (self, button, down) - table[field] = not table[field] - end - ) - end - - function button:Restore() - table[field] = self.origValue - end - return button -end - -function DKCrutch:CreateSlider(text, parent, low, high, step) - local name = parent:GetName() .. text - local slider = CreateFrame('Slider', name, parent, 'OptionsSliderTemplate') - slider:SetScript('OnMouseWheel', Slider_OnMouseWheel) - slider:SetMinMaxValues(low, high) - slider:SetValueStep(step) - slider:EnableMouseWheel(true) - _G[name .. 'Text']:SetText(text) - _G[name .. 'Low']:SetText('') - _G[name .. 'High']:SetText('') - local text = slider:CreateFontString(nil, 'BACKGROUND') - text:SetFontObject('GameFontHighlightSmall') - text:SetPoint('LEFT', slider, 'RIGHT', 7, 0) - slider.valText = text - return slider -end - -function DKCrutch:CreateButton(text, parent) - local name = parent:GetName() .. text - local button = CreateFrame('Button', name, parent, 'UIPanelButtonTemplate') - _G[name .. 'Text']:SetText(text) - local text = button:CreateFontString(nil, 'BACKGROUND') - text:SetFontObject('GameFontHighlightSmall') - text:SetPoint('LEFT', button, 'RIGHT', 7, 0) - button.valText = text - return button -end - -function DKCrutch:CreateDropDownMenu(text, parent, dbTree, varName, itemList, width) - local name = parent:GetName() .. text - local menu = CreateFrame("Frame", name, parent, "UIDropDownMenuTemplate"); - menu.displayMode = "MENU" - - local frame = _G[menu:GetName() .. 'Text'] - frame:SetText(text) - frame:SetTextColor(1, 1, 1, 1) - frame:SetFontObject(GameFontNormal) - - menu:EnableMouse(true); - if(width) then - _G.UIDropDownMenu_SetWidth(menu, width); - end - menu.itemList = itemList or {}; - menu.init = function() - for i=1, #menu.itemList do - if(not menu.itemList[i].hooked) then - local func = menu.itemList[i].func or function(self) end; - menu.itemList[i].func = function(self, arg1, arg2) - self = self or _G.this; -- wotlk/tbc hack - dbTree[varName] = self.value; - _G.UIDropDownMenu_SetSelectedValue(menu, self.value); - func(self, arg1, arg2); - end - menu.itemList[i].hooked = true; - end - local info = _G.UIDropDownMenu_CreateInfo(); - for k,v in pairs(menu.itemList[i]) do - info[k] = v; - end - _G.UIDropDownMenu_AddButton(info, _G.UIDROPDOWNMENU_MENU_LEVEL); - end - end - menu:SetScript("OnShow", function(self) - _G.UIDropDownMenu_Initialize(self, self.init); - _G.UIDropDownMenu_SetSelectedValue(self, dbTree[varName]); - end); - menu.SetValue = function(self, value) - _G.UIDropDownMenu_SetSelectedValue(self, value); - end; - menu:Hide(); menu:Show(); - return menu; -end - -function DKCrutch:ApplySettings() - DKCrutch:InitSettings() - if (not DKCrutchDB.locked) then - DKCrutch:UnLockFrames() - else - if (DKCrutch.displayFrame) then - DKCrutch.displayFrame:EnableMouse(false) - DKCrutch.displayFrame:SetMovable(false) - DKCrutch.displayFrame:SetBackdropColor(0, 0, 0, .0) - DKCrutch.advisorFrame:EnableMouse(false) - DKCrutch.advisorFrame:SetMovable(false) - DKCrutch.advisorFrame:SetBackdropColor(0, 0, 0, .0) - DKCrutch.procFrame:EnableMouse(false) - DKCrutch.procFrame:SetMovable(false) - DKCrutch.procFrame:SetBackdropColor(0, 0, 0, .0) - DKCrutch.weaponFrame:EnableMouse(false) - DKCrutch.weaponFrame:SetMovable(false) - DKCrutch.weaponFrame:SetBackdropColor(0, 0, 0, .0) - DKCrutch.runicFrame:EnableMouse(false) - DKCrutch.runicFrame:SetMovable(false) - DKCrutch.debuffFrame:EnableMouse(false) - DKCrutch.debuffFrame:SetMovable(false) - end - end - if ( DKCrutchDB.enabled ) then - DKCrutch.eventFrame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED") - DKCrutch.eventFrame:RegisterEvent("RUNE_POWER_UPDATE") - DKCrutch.eventFrame:RegisterEvent("RUNE_TYPE_UPDATE") - DKCrutch.eventFrame:RegisterEvent("PLAYER_TARGET_CHANGED") - if (DKCrutch.displayFrame) then - DKCrutch.displayFrame:Show() - if (not DKCrutchDB.advisorDisabled) then - DKCrutch.advisorFrame:Show() - end - if (not DKCrutchDB.procDisabled) then - DKCrutch.procFrame:Show() - end - if (not DKCrutchDB.weaponDisabled) then - DKCrutch.weaponFrame:Show() - end - end - else - DKCrutch.eventFrame:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED") - DKCrutch.eventFrame:UnregisterEvent("RUNE_POWER_UPDATE") - DKCrutch.eventFrame:UnregisterEvent("RUNE_TYPE_UPDATE") - DKCrutch.eventFrame:UnregisterEvent("PLAYER_TARGET_CHANGED") - if (DKCrutch.displayFrame) then - DKCrutch.displayFrame:Hide() - DKCrutch.advisorFrame:Hide() - DKCrutch.procFrame:Hide() - DKCrutch.weaponFrame:Hide() - DKCrutch.runicFrame:Hide() - DKCrutch.debuffFrame:Hide() - end - end - if (DKCrutch.displayFrame) then - DKCrutch.displayFrame:SetAlpha(DKCrutchDB.runes.alpha) - DKCrutch.displayFrame:SetScale(DKCrutchDB.runes.scale) - DKCrutch.advisorFrame:SetAlpha(DKCrutchDB.advisor.alpha) - DKCrutch.advisorFrame:SetScale(DKCrutchDB.advisor.scale) - DKCrutch.procFrame:SetAlpha(DKCrutchDB.proc.alpha) - DKCrutch.procFrame:SetScale(DKCrutchDB.proc.scale) - DKCrutch.weaponFrame:SetAlpha(DKCrutchDB.weapon.alpha) - DKCrutch.weaponFrame:SetScale(DKCrutchDB.weapon.scale) - DKCrutch.runicFrame:SetAlpha(DKCrutchDB.runic.alpha) - DKCrutch.runicFrame:SetScale(DKCrutchDB.runic.scale) - DKCrutch.debuffFrame:SetAlpha(DKCrutchDB.debuff.alpha) - DKCrutch.debuffFrame:SetScale(DKCrutchDB.debuff.scale) - end -end - -function DKCrutch:StoreUIValues() - for i,v in pairs(DKCrutchDB) do - DKCrutch.prevDB[i]=v - end -end - -function DKCrutch:ReStoreUIValues() - for i,v in pairs(DKCrutch.prevDB) do - DKCrutchDB[i]=v - end -end - -function DKCrutch:CreateConfig() - DKCrutch.configPanel = CreateFrame( "Frame", "DKCrutchConfigPanel", UIParent ); - -- Register in the Interface Addon Options GUI - -- Set the name for the Category for the Options Panel - DKCrutch.configPanel.name = "DKCrutch"; - - local EnableBtn = DKCrutch:CreateCheckButton(L.CONFIG_ENABLED, DKCrutch.configPanel, DKCrutchDB, "enabled", false) - EnableBtn:SetPoint('TOPLEFT', 10, -8) - - local LockBtn = DKCrutch:CreateCheckButton(L.CONFIG_LOCK_FRAMES, DKCrutch.configPanel, DKCrutchDB, "locked", false) - LockBtn:SetPoint('TOPLEFT', 10, -58) - - local Scale = DKCrutch:CreateSlider(L.CONFIG_SPELL_ADV_SCALE, DKCrutch.configPanel, .25, 3, .1) - Scale:SetScript('OnShow', function(self) - self.onShow = true - self:SetValue(DKCrutchDB.advisor.scale) - self.onShow = nil - end) - Scale:SetScript('OnValueChanged', function(self, value) - self.valText:SetText(format('%.1f', value)) - if not self.onShow then - DKCrutchDB.advisor.scale=value - DKCrutch.advisorFrame:SetScale(value) - - end - end) - Scale:SetPoint("TOPLEFT",10,-98) - Scale:Show() - - local Alpha = DKCrutch:CreateSlider(L.CONFIG_SPELL_ADV_ALPHA, DKCrutch.configPanel, .0, 1, .1) - Alpha:SetScript('OnShow', function(self) - self.onShow = true - self:SetValue(DKCrutchDB.advisor.alpha) - self.onShow = nil - end) - Alpha:SetScript('OnValueChanged', function(self, value) - self.valText:SetText(format('%.1f', value)) - if not self.onShow then - DKCrutchDB.advisor.alpha=value - DKCrutch.advisorFrame:SetAlpha(value) - end - end) - Alpha:SetPoint("TOPLEFT",200,-98) - Alpha:Show() - - local advisorDisableBtn = DKCrutch:CreateCheckButton(L.CONFIG_DISABLE_ADVISOR, DKCrutch.configPanel, DKCrutchDB, "advisorDisabled", false) - advisorDisableBtn:SetPoint('TOPLEFT', 10, -158) - - local RuneScale = DKCrutch:CreateSlider(L.CONFIG_RUNE_TRACKER_SCALE, DKCrutch.configPanel, .25, 3, .1) - RuneScale:SetScript('OnShow', function(self) - self.onShow = true - self:SetValue(DKCrutchDB.runes.scale) - self.onShow = nil - end) - RuneScale:SetScript('OnValueChanged', function(self, value) - self.valText:SetText(format('%.1f', value)) - if not self.onShow then - DKCrutchDB.runes.scale=value - DKCrutch.displayFrame:SetScale(value) - end - end) - RuneScale:SetPoint("TOPLEFT",10,-138) - RuneScale:Show() - - local RuneAlpha = DKCrutch:CreateSlider(L.CONFIG_RUNE_TRACKER_ALPHA, DKCrutch.configPanel, .0, 1, .1) - RuneAlpha:SetScript('OnShow', function(self) - self.onShow = true - self:SetValue(DKCrutchDB.runes.alpha) - self.onShow = nil - end) - RuneAlpha:SetScript('OnValueChanged', function(self, value) - self.valText:SetText(format('%.1f', value)) - if not self.onShow then - DKCrutchDB.runes.alpha=value - DKCrutch.displayFrame:SetAlpha(value) - end - end) - RuneAlpha:SetPoint("TOPLEFT",200,-138) - RuneAlpha:Show() - - local procScale = DKCrutch:CreateSlider(L.CONFIG_PROC_SCALE, DKCrutch.configPanel, .25, 3, .1) - procScale:SetScript('OnShow', function(self) - self.onShow = true - self:SetValue(DKCrutchDB.proc.scale) - self.onShow = nil - end) - procScale:SetScript('OnValueChanged', function(self, value) - self.valText:SetText(format('%.1f', value)) - if not self.onShow then - DKCrutchDB.proc.scale=value - DKCrutch.procFrame:SetScale(value) - end - end) - procScale:SetPoint("TOPLEFT",10,-198) - procScale:Show() - - local procAlpha = DKCrutch:CreateSlider(L.CONFIG_PROC_ALPHA, DKCrutch.configPanel, .0, 1, .1) - procAlpha:SetScript('OnShow', function(self) - self.onShow = true - self:SetValue(DKCrutchDB.proc.alpha) - self.onShow = nil - end) - procAlpha:SetScript('OnValueChanged', function(self, value) - self.valText:SetText(format('%.1f', value)) - if not self.onShow then - DKCrutchDB.proc.alpha=value - DKCrutch.procFrame:SetAlpha(value) - end - end) - procAlpha:SetPoint("TOPLEFT",200,-198) - procAlpha:Show() - - local procDisableBtn = DKCrutch:CreateCheckButton(L.CONFIG_DISABLE_PROC, DKCrutch.configPanel, DKCrutchDB, "procDisabled", false) - procDisableBtn:SetPoint('TOPLEFT', 10, -218) - - local runicScale = DKCrutch:CreateSlider(L.CONFIG_RUNIC_SCALE, DKCrutch.configPanel, .25, 3, .1) - runicScale:SetScript('OnShow', function(self) - self.onShow = true - self:SetValue(DKCrutchDB.runic.scale) - self.onShow = nil - end) - runicScale:SetScript('OnValueChanged', function(self, value) - self.valText:SetText(format('%.1f', value)) - if not self.onShow then - DKCrutchDB.runic.scale=value - DKCrutch.runicFrame:SetScale(value) - - end - end) - runicScale:SetPoint("TOPLEFT",10,-258) - runicScale:Show() - - local runicAlpha = DKCrutch:CreateSlider(L.CONFIG_RUNIC_ALPHA, DKCrutch.configPanel, .0, 1, .1) - runicAlpha:SetScript('OnShow', function(self) - self.onShow = true - self:SetValue(DKCrutchDB.runic.alpha) - self.onShow = nil - end) - runicAlpha:SetScript('OnValueChanged', function(self, value) - self.valText:SetText(format('%.1f', value)) - if not self.onShow then - DKCrutchDB.runic.alpha=value - DKCrutch.runicFrame:SetAlpha(value) - end - end) - runicAlpha:SetPoint("TOPLEFT",200,-258) - runicAlpha:Show() - - local runicDisableBtn = DKCrutch:CreateCheckButton(L.CONFIG_DISABLE_RUNIC, DKCrutch.configPanel, DKCrutchDB, "runicDisabled", false) - runicDisableBtn:SetPoint('TOPLEFT', 10, -278) - - local debuffScale = DKCrutch:CreateSlider(L.CONFIG_DEBUFF_SCALE, DKCrutch.configPanel, .25, 3, .1) - debuffScale:SetScript('OnShow', function(self) - self.onShow = true - self:SetValue(DKCrutchDB.debuff.scale) - self.onShow = nil - end) - debuffScale:SetScript('OnValueChanged', function(self, value) - self.valText:SetText(format('%.1f', value)) - if not self.onShow then - DKCrutchDB.debuff.scale=value - DKCrutch.debuffFrame:SetScale(value) - - end - end) - debuffScale:SetPoint("TOPLEFT",10,-318) - debuffScale:Show() - - local debuffAlpha = DKCrutch:CreateSlider(L.CONFIG_DEBUFF_ALPHA, DKCrutch.configPanel, .0, 1, .1) - debuffAlpha:SetScript('OnShow', function(self) - self.onShow = true - self:SetValue(DKCrutchDB.debuff.alpha) - self.onShow = nil - end) - debuffAlpha:SetScript('OnValueChanged', function(self, value) - self.valText:SetText(format('%.1f', value)) - if not self.onShow then - DKCrutchDB.debuff.alpha=value - DKCrutch.debuffFrame:SetAlpha(value) - end - end) - debuffAlpha:SetPoint("TOPLEFT",200,-318) - debuffAlpha:Show() - - local debuffDisableBtn = DKCrutch:CreateCheckButton(L.CONFIG_DISABLE_DEBUFF, DKCrutch.configPanel, DKCrutchDB, "debuffDisabled", false) - debuffDisableBtn:SetPoint('TOPLEFT', 10, -338) - - local weaponScale = DKCrutch:CreateSlider(L.CONFIG_WEAPON_SCALE, DKCrutch.configPanel, .25, 3, .1) - weaponScale:SetScript('OnShow', function(self) - self.onShow = true - self:SetValue(DKCrutchDB.weapon.scale) - self.onShow = nil - end) - weaponScale:SetScript('OnValueChanged', function(self, value) - self.valText:SetText(format('%.1f', value)) - if not self.onShow then - DKCrutchDB.weapon.scale=value - DKCrutch.weaponFrame:SetScale(value) - end - end) - weaponScale:SetPoint("TOPLEFT",10,-378) - weaponScale:Show() - - local weaponAlpha = DKCrutch:CreateSlider(L.CONFIG_WEAPON_ALPHA, DKCrutch.configPanel, .0, 1, .1) - weaponAlpha:SetScript('OnShow', function(self) - self.onShow = true - self:SetValue(DKCrutchDB.weapon.alpha) - self.onShow = nil - end) - weaponAlpha:SetScript('OnValueChanged', function(self, value) - self.valText:SetText(format('%.1f', value)) - if not self.onShow then - DKCrutchDB.weapon.alpha=value - DKCrutch.weaponFrame:SetAlpha(value) - end - end) - weaponAlpha:SetPoint("TOPLEFT",200,-378) - weaponAlpha:Show() - - local weaponDisableBtn = DKCrutch:CreateCheckButton(L.CONFIG_DISABLE_WEAPON, DKCrutch.configPanel, DKCrutchDB, "weaponDisabled", false) - weaponDisableBtn:SetPoint('TOPLEFT', 10, -398) - - local ResetBtn = DKCrutch:CreateButton(L.CONFIG_RESET_POSITIONS, DKCrutch.configPanel) - ResetBtn:SetWidth(160) - ResetBtn:SetHeight(22) - ResetBtn:SetScript('OnClick', function() - DKCrutch:ResetPosition() - end) - ResetBtn:SetPoint("TOPLEFT",10,-448) - ResetBtn:Show() - - DKCrutch.configPanel.okay = function() - DKCrutch:ApplySettings() - end - DKCrutch.configPanel.cancel = function() - -- cancel button pressed, revert changes - DKCrutch:ReStoreUIValues() - DKCrutch:ApplySettings() - end - DKCrutch.configPanel.default = function() - -- default button pressed, reset setting - DKCrutch:ResetDB(true) - DKCrutch:ResetPosition() - end - - -- always show frame if config panel is open - DKCrutch.configPanel:SetScript('OnShow', function(self) - self.onShow = true - self.onShow = nil - end) - DKCrutch.configPanel:SetScript('OnHide', function(self) - self.onHide = true - self.onHide = nil - end) - -- Add the panel to the Interface Options - InterfaceOptions_AddCategory(DKCrutch.configPanel) -end - -function DKCrutch:ResetDB() - if (not DKCrutchDB.runes) or (force) then - DKCrutchDB.runes = { - ["x"] = -180, - ["y"] = 0, - ["scale"] = 1, - ["alpha"] = 1, - ["relativePoint"] = "CENTER", - } - end - if (not DKCrutchDB.advisor) or (force) then - DKCrutchDB.advisor = { - ["x"] = 180, - ["y"] = 0, - ["scale"] = 1, - ["alpha"] = 1, - ["relativePoint"] = "CENTER", - } - end - if (not DKCrutchDB.proc) or (force) then - DKCrutchDB.proc = { - ["x"] = 0, - ["y"] = 90, - ["scale"] = 1, - ["alpha"] = 1, - ["relativePoint"] = "CENTER", - } - end - if (not DKCrutchDB.weapon) or (force) then - DKCrutchDB.weapon = { - ["x"] = 0, - ["y"] = 122, - ["scale"] = 1, - ["alpha"] = 1, - ["relativePoint"] = "CENTER", - } - end - if (not DKCrutchDB.runic) or (force) then - DKCrutchDB.runic = { - ["x"] = 90, - ["y"] = 90, - ["scale"] = 1, - ["alpha"] = 1, - ["relativePoint"] = "CENTER", - } - end - if (not DKCrutchDB.debuff) or (force) then - DKCrutchDB.debuff = { - ["x"] = 0, - ["y"] = 180, - ["scale"] = 1, - ["alpha"] = 1, - ["relativePoint"] = "CENTER", - } - end - - if (force) then - DKCrutchDB.locked = false - DKCrutchDB.enabled = true - DKCrutchDB.advisorDisabled = false - DKCrutchDB.procDisabled = false - DKCrutchDB.weaponDisabled = false - DKCrutchDB.runicDisabled = false - DKCrutchDB.debuffDisabled = false - end -end - -function DKCrutch.Options(msg) - if (msg=='debug') then - if (DKCrutch.DebugMode) then - DKCrutch:Debug("Debug ended", GetTime()) - end - DKCrutch.DebugMode = not ( DKCrutch.DebugMode ) - local debugStatus = "disabled" - if (DKCrutch.DebugMode) then - DKCrutch.DebugChat = DKCrutch:GetDebugFrame() - debugStatus = "enabled. Using frame: " .. DKCrutch.DebugChat:GetID() - DKCrutch:Debug("Debug started", GetTime()) - end - DEFAULT_CHAT_FRAME:AddMessage("DKCrutch Debug " .. debugStatus) - else - InterfaceOptionsFrame_OpenToCategory(getglobal("DKCrutchConfigPanel")) - end -end - -function DKCrutch:adjustDeathTracker() - if DKCrutch.deathTracker then - if (DKCrutch.talent == "frost") then - DKCrutch.deathTracker:SetStatusBarTexture("Interface\\AddOns\\DKCrutch\\media\\death.tga") - DKCrutch.deathTracker:SetMinMaxValues(0,20) - else - DKCrutch.deathTracker:SetStatusBarTexture("Interface\\AddOns\\DKCrutch\\media\\death4.tga") - DKCrutch.deathTracker:SetMinMaxValues(0,40) - end - end -end - -function DKCrutch:ResetPosition() - DKCrutchDB.runes.x = 0 - DKCrutchDB.runes.y = -100 - DKCrutchDB.runes.relativePoint = "CENTER" - DKCrutchDB.advisor.x = -100 - DKCrutchDB.advisor.y = 0 - DKCrutchDB.advisor.relativePoint = "CENTER" - DKCrutchDB.proc.x = 0 - DKCrutchDB.proc.y = 90 - DKCrutchDB.proc.relativePoint = "CENTER" - DKCrutchDB.weapon.x = 0 - DKCrutchDB.weapon.y = 122 - DKCrutchDB.weapon.relativePoint = "CENTER" - DKCrutchDB.runic.x = 90 - DKCrutchDB.runic.y = 90 - DKCrutchDB.runic.relativePoint = "CENTER" - DKCrutchDB.debuff.x = 0 - DKCrutchDB.debuff.y = 180 - DKCrutchDB.debuff.relativePoint = "CENTER" - - DKCrutch.displayFrame:ClearAllPoints() - DKCrutch.displayFrame:SetPoint(DKCrutchDB.runes.relativePoint,DKCrutchDB.runes.x,DKCrutchDB.runes.y) - DKCrutch.advisorFrame:ClearAllPoints() - DKCrutch.advisorFrame:SetPoint(DKCrutchDB.advisor.relativePoint,DKCrutchDB.advisor.x,DKCrutchDB.advisor.y) - DKCrutch.procFrame:ClearAllPoints() - DKCrutch.procFrame:SetPoint(DKCrutchDB.proc.relativePoint,DKCrutchDB.proc.x,DKCrutchDB.proc.y) - DKCrutch.weaponFrame:ClearAllPoints() - DKCrutch.weaponFrame:SetPoint(DKCrutchDB.weapon.relativePoint,DKCrutchDB.weapon.x,DKCrutchDB.weapon.y) - DKCrutch.debuffFrame:ClearAllPoints() - DKCrutch.debuffFrame:SetPoint(DKCrutchDB.debuff.relativePoint,DKCrutchDB.debuff.x,DKCrutchDB.debuff.y) - -end - -function DKCrutch:MakeDraggable(frame,store) - frame:Show() - if (store ~= "runic") then - frame:SetBackdropColor(0, 0, 0, .3) - end - frame:EnableMouse(true) - frame:SetMovable(true) - frame:SetClampedToScreen(true) - frame:SetScript("OnMouseDown", function(self) self:StartMoving(); self:SetBackdropColor(0, 0, 0, .6); end) - frame:SetScript("OnMouseUp", function(self) - self:StopMovingOrSizing() - if (store ~= "runic") then - if (DKCrutch.locked) then - self:SetBackdropColor(0, 0, 0, 0) - else - self:SetBackdropColor(0, 0, 0, .3) - end - end - local _,_,rp,x,y = self:GetPoint() - DKCrutchDB[store]["x"] = x - DKCrutchDB[store]["y"] = y - DKCrutchDB[store]["relativePoint"] = rp - end) - frame:SetScript("OnDragStop", function(self) - self:StopMovingOrSizing(); - if (store ~= "runic") then - if (DKCrutch.locked) then - self:SetBackdropColor(0, 0, 0, 0) - else - self:SetBackdropColor(0, 0, 0, .3) - end - end - local _,_,rp,x,y = self:GetPoint() - DKCrutchDB[store]["x"] = x - DKCrutchDB[store]["y"] = y - DKCrutchDB[store]["relativePoint"] = rp - end) -end - -function DKCrutch:UnLockFrames() - DKCrutch:MakeDraggable(DKCrutch.displayFrame,"runes") - DKCrutch:MakeDraggable(DKCrutch.advisorFrame,"advisor") - DKCrutch:MakeDraggable(DKCrutch.procFrame,"proc") - DKCrutch:MakeDraggable(DKCrutch.weaponFrame,"weapon") - DKCrutch:MakeDraggable(DKCrutch.runicFrame,"runic") - DKCrutch:MakeDraggable(DKCrutch.debuffFrame,"debuff") -end - -function DKCrutch:CreateGUI() - local displayFrame = CreateFrame("Frame","DKCrutchDisplayFrame",UIParent) - displayFrame:SetFrameStrata("BACKGROUND") - displayFrame:SetWidth(84) - displayFrame:SetHeight(64) - displayFrame:SetBackdrop({ - bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 32, - }) - displayFrame:SetBackdropColor(0, 0, 0, .0) - displayFrame:SetAlpha(DKCrutchDB.runes.alpha) - displayFrame:SetPoint(DKCrutchDB.runes.relativePoint,DKCrutchDB.runes.x,DKCrutchDB.runes.y) - - local iconTexture = displayFrame:CreateTexture(nil,"BACKGROUND") - iconTexture:SetTexture("Interface\\AddOns\\DKCrutch\\media\\icons.tga", true) - iconTexture:SetWidth(16) - iconTexture:SetHeight(64) - iconTexture:SetPoint('TOPLEFT',displayFrame,0,0) - - for i=1,3,1 do - local runes = CreateFrame("StatusBar", nil, displayFrame) - if (i==1) then - runes:SetStatusBarTexture("Interface\\AddOns\\DKCrutch\\media\\unholy.tga") - elseif (i==2) then - runes:SetStatusBarTexture("Interface\\AddOns\\DKCrutch\\media\\frost.tga") - elseif (i==3) then - runes:SetStatusBarTexture("Interface\\AddOns\\DKCrutch\\media\\blood.tga") - end - runes:SetWidth(64) - runes:SetHeight(16) - runes:SetMinMaxValues(0,20) - runes:SetPoint('TOPLEFT',displayFrame,20,-i*16) - - DKCrutch.runeTracker[i] = runes - end - - local deathRunes = CreateFrame("StatusBar", nil, displayFrame) - deathRunes:SetStatusBarTexture("Interface\\AddOns\\DKCrutch\\media\\death.tga") - deathRunes:SetWidth(64) - deathRunes:SetHeight(16) - deathRunes:SetMinMaxValues(0,20) - deathRunes:SetPoint('TOPLEFT',displayFrame,20,0) - - DKCrutch.deathTracker = deathRunes - - DKCrutch.displayFrame = displayFrame - - DKCrutch:adjustDeathTracker() - - local advisorFrame = CreateFrame("Frame", "DKCrutchAdvisorFrame", UIParent) - advisorFrame:SetFrameStrata("BACKGROUND") - advisorFrame:SetWidth(64) - advisorFrame:SetHeight(64) - advisorFrame:SetBackdrop({ - bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 32, - }) - advisorFrame:SetBackdropColor(0, 0, 0, .0) - - local t = advisorFrame:CreateTexture(nil,"BACKGROUND") - t:SetTexture("") - t:SetAllPoints(advisorFrame) - advisorFrame.texture = t - advisorFrame:SetAlpha(DKCrutchDB.advisor.alpha) - advisorFrame:SetPoint(DKCrutchDB.advisor.relativePoint,DKCrutchDB.advisor.x,DKCrutchDB.advisor.y) - - DKCrutch.advisorFrame = advisorFrame - - local procFrame = CreateFrame("Cooldown", "DKCrutchProcFrame", UIParent) - procFrame:SetFrameStrata("BACKGROUND") - procFrame:SetWidth(32) - procFrame:SetHeight(32) - procFrame:SetBackdrop({ - bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 32, - }) - procFrame:SetBackdropColor(0, 0, 0, .0) - - t = procFrame:CreateTexture(nil,"BACKGROUND") - t:SetTexture("") - t:SetAllPoints(procFrame) - procFrame.texture = t - procFrame:SetAlpha(DKCrutchDB.proc.alpha) - procFrame:SetPoint(DKCrutchDB.proc.relativePoint,DKCrutchDB.proc.x,DKCrutchDB.proc.y) - - t = procFrame:CreateFontString("$parent_ProcText","OVERLAY","GameFontHighlightSmallOutline"); - t:SetPoint("BOTTOM",procFrame,"BOTTOM",0,0) - t:SetAlpha(1) - t:SetText("") - - DKCrutch.procText = t - DKCrutch.procFrame = procFrame - - local weaponFrame = CreateFrame("StatusBar", "DKCrutchWeaponFrame", UIParent) - weaponFrame:SetFrameStrata("BACKGROUND") - weaponFrame:SetWidth(64) - weaponFrame:SetHeight(20) - weaponFrame:SetBackdrop({ - bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 32, - }) - weaponFrame:SetOrientation("HORIZONTAL") - weaponFrame:SetMinMaxValues(0, 15) - weaponFrame:SetValue(0) - weaponFrame:SetStatusBarTexture("Interface\\AddOns\\DKCrutch\\media\\weapon.tga") - t = weaponFrame:CreateTexture(nil,"BACKGROUND") - t:SetTexture("") - t:SetAllPoints(weaponFrame) - weaponFrame.texture = t - weaponFrame:SetAlpha(DKCrutchDB.weapon.alpha) - weaponFrame:SetPoint(DKCrutchDB.weapon.relativePoint,DKCrutchDB.weapon.x,DKCrutchDB.weapon.y) - - t = weaponFrame:CreateFontString("$parent_WeaponText","OVERLAY","GameFontHighlightSmallOutline"); - t:SetPoint("CENTER",weaponFrame,"CENTER",0,0) - t:SetAlpha(1) - t:SetText("") - - DKCrutch.weaponText = t - DKCrutch.weaponFrame = weaponFrame - - local runicFrame = CreateFrame("Frame", "DKCrutchRunicFrame", UIParent) - runicFrame:SetFrameStrata("BACKGROUND") - runicFrame:SetWidth(128) - runicFrame:SetHeight(128) - runicFrame:SetBackdrop({ - bgFile = "Interface\\AddOns\\DKCrutch\\media\\runic_circle.tga", tile = false, tileSize = 128, - }) - - t = runicFrame:CreateTexture(nil,"MEDIUM") - t:SetTexture("Interface\\AddOns\\DKCrutch\\media\\runic_power.tga", false) - t:SetAllPoints(runicFrame) - t:SetPoint("CENTER", "DKCrutchRunicFrame", "CENTER", 0, 0); - runicFrame.texture = t - runicFrame:SetAlpha(DKCrutchDB.runic.alpha) - runicFrame:SetPoint(DKCrutchDB.runic.relativePoint,DKCrutchDB.runic.x,DKCrutchDB.runic.y) - - DKCrutch.runicFrame = runicFrame - - local debuffFrame = CreateFrame("Frame", "DKCrutchDebuffFrame", UIParent) - debuffFrame:SetFrameStrata("BACKGROUND") - debuffFrame:SetWidth(64) - debuffFrame:SetHeight(32) - debuffFrame:SetBackdrop({ - bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 64, - }) - debuffFrame:SetBackdropColor(0, 0, 0, .0) - - local d1 = CreateFrame("Cooldown", "DKCrutchDebuff1Frame", DKCrutchDebuffFrame, "CooldownFrameTemplate") - d1:SetWidth(32) - d1:SetHeight(32) - d1:ClearAllPoints() - d1:SetPoint("TOPLEFT", debuffFrame, "TOPLEFT", 0, 0) - t = d1:CreateTexture(nil,"MEDIUM") - t:SetTexture("") - t:SetAllPoints(d1) - d1.texture = t - - DKCrutch.debuff1Frame = d1 - - local d2 = CreateFrame("Cooldown", "DKCrutchDebuff2Frame", DKCrutchDebuffFrame, "CooldownFrameTemplate") - d2:SetWidth(32) - d2:SetHeight(32) - d2:ClearAllPoints() - d2:SetPoint("TOPRIGHT", debuffFrame, "TOPRIGHT", 0, 0) - t = d2:CreateTexture(nil,"MEDIUM") - t:SetTexture("") - t:SetAllPoints(d2) - d2.texture = t - - DKCrutch.debuff2Frame = d2 - - debuffFrame:SetAlpha(DKCrutchDB.debuff.alpha) - debuffFrame:SetPoint(DKCrutchDB.debuff.relativePoint,DKCrutchDB.debuff.x,DKCrutchDB.debuff.y) - - DKCrutch.debuffFrame = debuffFrame - - if (not DKCrutchDB.locked) then - DKCrutch:UnLockFrames() - end -end +------------------------------------------------------------------------------- +-- DKCrutch Gui functions +-- +-- GUI functions and structures for DKCrutch +------------------------------------------------------------------------------- + +local L = DKCrutch.Locals + +function DKCrutch:CreateCheckButton(name, parent, table, field, radio) + local button + if radio then + button = CreateFrame('CheckButton', parent:GetName() .. name, parent, 'SendMailRadioButtonTemplate') + else + button = CreateFrame('CheckButton', parent:GetName() .. name, parent, 'OptionsCheckButtonTemplate') + end + local frame = _G[button:GetName() .. 'Text'] + frame:SetText(name) + frame:SetTextColor(1, 1, 1, 1) + frame:SetFontObject(GameFontNormal) + button:SetScript("OnShow", + function (self) + self:SetChecked(table[field]) + self.origValue = table[field] or self.origValue + end + ) + if radio then + button:SetScript("OnClick", + function (self, button, down) + this:SetChecked(1) + table[field] = not table[field] + end + ) + else + button:SetScript("OnClick", + function (self, button, down) + table[field] = not table[field] + end + ) + end + + function button:Restore() + table[field] = self.origValue + end + return button +end + +function DKCrutch:CreateSlider(text, parent, low, high, step) + local name = parent:GetName() .. text + local slider = CreateFrame('Slider', name, parent, 'OptionsSliderTemplate') + slider:SetScript('OnMouseWheel', Slider_OnMouseWheel) + slider:SetMinMaxValues(low, high) + slider:SetValueStep(step) + slider:EnableMouseWheel(true) + _G[name .. 'Text']:SetText(text) + _G[name .. 'Low']:SetText('') + _G[name .. 'High']:SetText('') + local text = slider:CreateFontString(nil, 'BACKGROUND') + text:SetFontObject('GameFontHighlightSmall') + text:SetPoint('LEFT', slider, 'RIGHT', 7, 0) + slider.valText = text + return slider +end + +function DKCrutch:CreateButton(text, parent) + local name = parent:GetName() .. text + local button = CreateFrame('Button', name, parent, 'UIPanelButtonTemplate') + _G[name .. 'Text']:SetText(text) + local text = button:CreateFontString(nil, 'BACKGROUND') + text:SetFontObject('GameFontHighlightSmall') + text:SetPoint('LEFT', button, 'RIGHT', 7, 0) + button.valText = text + return button +end + +function DKCrutch:CreateDropDownMenu(text, parent, dbTree, varName, itemList, width) + local name = parent:GetName() .. text + local menu = CreateFrame("Frame", name, parent, "UIDropDownMenuTemplate"); + menu.displayMode = "MENU" + + local frame = _G[menu:GetName() .. 'Text'] + frame:SetText(text) + frame:SetTextColor(1, 1, 1, 1) + frame:SetFontObject(GameFontNormal) + + menu:EnableMouse(true); + if(width) then + _G.UIDropDownMenu_SetWidth(menu, width); + end + menu.itemList = itemList or {}; + menu.init = function() + for i=1, #menu.itemList do + if(not menu.itemList[i].hooked) then + local func = menu.itemList[i].func or function(self) end; + menu.itemList[i].func = function(self, arg1, arg2) + self = self or _G.this; -- wotlk/tbc hack + dbTree[varName] = self.value; + _G.UIDropDownMenu_SetSelectedValue(menu, self.value); + func(self, arg1, arg2); + end + menu.itemList[i].hooked = true; + end + local info = _G.UIDropDownMenu_CreateInfo(); + for k,v in pairs(menu.itemList[i]) do + info[k] = v; + end + _G.UIDropDownMenu_AddButton(info, _G.UIDROPDOWNMENU_MENU_LEVEL); + end + end + menu:SetScript("OnShow", function(self) + _G.UIDropDownMenu_Initialize(self, self.init); + _G.UIDropDownMenu_SetSelectedValue(self, dbTree[varName]); + end); + menu.SetValue = function(self, value) + _G.UIDropDownMenu_SetSelectedValue(self, value); + end; + menu:Hide(); menu:Show(); + return menu; +end + +function DKCrutch:ApplySettings() + DKCrutch:InitSettings() + if (not DKCrutchDB.locked) then + DKCrutch:UnLockFrames() + else + if (DKCrutch.displayFrame) then + DKCrutch.displayFrame:EnableMouse(false) + DKCrutch.displayFrame:SetMovable(false) + DKCrutch.displayFrame:SetBackdropColor(0, 0, 0, .0) + DKCrutch.advisorFrame:EnableMouse(false) + DKCrutch.advisorFrame:SetMovable(false) + DKCrutch.advisorFrame:SetBackdropColor(0, 0, 0, .0) + DKCrutch.procFrame:EnableMouse(false) + DKCrutch.procFrame:SetMovable(false) + DKCrutch.procFrame:SetBackdropColor(0, 0, 0, .0) + DKCrutch.weaponFrame:EnableMouse(false) + DKCrutch.weaponFrame:SetMovable(false) + DKCrutch.weaponFrame:SetBackdropColor(0, 0, 0, .0) + DKCrutch.runicFrame:EnableMouse(false) + DKCrutch.runicFrame:SetMovable(false) + DKCrutch.debuffFrame:EnableMouse(false) + DKCrutch.debuffFrame:SetMovable(false) + end + end + if ( DKCrutchDB.enabled ) then + DKCrutch.eventFrame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED") + DKCrutch.eventFrame:RegisterEvent("RUNE_POWER_UPDATE") + DKCrutch.eventFrame:RegisterEvent("RUNE_TYPE_UPDATE") + DKCrutch.eventFrame:RegisterEvent("PLAYER_TARGET_CHANGED") + if (DKCrutch.displayFrame) then + DKCrutch.displayFrame:Show() + if (not DKCrutchDB.advisorDisabled) then + DKCrutch.advisorFrame:Show() + end + if (not DKCrutchDB.procDisabled) then + DKCrutch.procFrame:Show() + end + if (not DKCrutchDB.weaponDisabled) then + DKCrutch.weaponFrame:Show() + end + end + else + DKCrutch.eventFrame:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED") + DKCrutch.eventFrame:UnregisterEvent("RUNE_POWER_UPDATE") + DKCrutch.eventFrame:UnregisterEvent("RUNE_TYPE_UPDATE") + DKCrutch.eventFrame:UnregisterEvent("PLAYER_TARGET_CHANGED") + if (DKCrutch.displayFrame) then + DKCrutch.displayFrame:Hide() + DKCrutch.advisorFrame:Hide() + DKCrutch.procFrame:Hide() + DKCrutch.weaponFrame:Hide() + DKCrutch.runicFrame:Hide() + DKCrutch.debuffFrame:Hide() + end + end + if (DKCrutch.displayFrame) then + DKCrutch.displayFrame:SetAlpha(DKCrutchDB.runes.alpha) + DKCrutch.displayFrame:SetScale(DKCrutchDB.runes.scale) + DKCrutch.advisorFrame:SetAlpha(DKCrutchDB.advisor.alpha) + DKCrutch.advisorFrame:SetScale(DKCrutchDB.advisor.scale) + DKCrutch.procFrame:SetAlpha(DKCrutchDB.proc.alpha) + DKCrutch.procFrame:SetScale(DKCrutchDB.proc.scale) + DKCrutch.weaponFrame:SetAlpha(DKCrutchDB.weapon.alpha) + DKCrutch.weaponFrame:SetScale(DKCrutchDB.weapon.scale) + DKCrutch.runicFrame:SetAlpha(DKCrutchDB.runic.alpha) + DKCrutch.runicFrame:SetScale(DKCrutchDB.runic.scale) + DKCrutch.debuffFrame:SetAlpha(DKCrutchDB.debuff.alpha) + DKCrutch.debuffFrame:SetScale(DKCrutchDB.debuff.scale) + end +end + +function DKCrutch:StoreUIValues() + for i,v in pairs(DKCrutchDB) do + DKCrutch.prevDB[i]=v + end +end + +function DKCrutch:ReStoreUIValues() + for i,v in pairs(DKCrutch.prevDB) do + DKCrutchDB[i]=v + end +end + +function DKCrutch:CreateConfig() + DKCrutch.configPanel = CreateFrame( "Frame", "DKCrutchConfigPanel", UIParent ); + -- Register in the Interface Addon Options GUI + -- Set the name for the Category for the Options Panel + DKCrutch.configPanel.name = "DKCrutch"; + + local EnableBtn = DKCrutch:CreateCheckButton(L.CONFIG_ENABLED, DKCrutch.configPanel, DKCrutchDB, "enabled", false) + EnableBtn:SetPoint('TOPLEFT', 10, -8) + + local LockBtn = DKCrutch:CreateCheckButton(L.CONFIG_LOCK_FRAMES, DKCrutch.configPanel, DKCrutchDB, "locked", false) + LockBtn:SetPoint('TOPLEFT', 10, -58) + + local Scale = DKCrutch:CreateSlider(L.CONFIG_SPELL_ADV_SCALE, DKCrutch.configPanel, .25, 3, .1) + Scale:SetScript('OnShow', function(self) + self.onShow = true + self:SetValue(DKCrutchDB.advisor.scale) + self.onShow = nil + end) + Scale:SetScript('OnValueChanged', function(self, value) + self.valText:SetText(format('%.1f', value)) + if not self.onShow then + DKCrutchDB.advisor.scale=value + DKCrutch.advisorFrame:SetScale(value) + + end + end) + Scale:SetPoint("TOPLEFT",10,-98) + Scale:Show() + + local Alpha = DKCrutch:CreateSlider(L.CONFIG_SPELL_ADV_ALPHA, DKCrutch.configPanel, .0, 1, .1) + Alpha:SetScript('OnShow', function(self) + self.onShow = true + self:SetValue(DKCrutchDB.advisor.alpha) + self.onShow = nil + end) + Alpha:SetScript('OnValueChanged', function(self, value) + self.valText:SetText(format('%.1f', value)) + if not self.onShow then + DKCrutchDB.advisor.alpha=value + DKCrutch.advisorFrame:SetAlpha(value) + end + end) + Alpha:SetPoint("TOPLEFT",200,-98) + Alpha:Show() + + local advisorDisableBtn = DKCrutch:CreateCheckButton(L.CONFIG_DISABLE_ADVISOR, DKCrutch.configPanel, DKCrutchDB, "advisorDisabled", false) + advisorDisableBtn:SetPoint('TOPLEFT', 10, -158) + + local RuneScale = DKCrutch:CreateSlider(L.CONFIG_RUNE_TRACKER_SCALE, DKCrutch.configPanel, .25, 3, .1) + RuneScale:SetScript('OnShow', function(self) + self.onShow = true + self:SetValue(DKCrutchDB.runes.scale) + self.onShow = nil + end) + RuneScale:SetScript('OnValueChanged', function(self, value) + self.valText:SetText(format('%.1f', value)) + if not self.onShow then + DKCrutchDB.runes.scale=value + DKCrutch.displayFrame:SetScale(value) + end + end) + RuneScale:SetPoint("TOPLEFT",10,-138) + RuneScale:Show() + + local RuneAlpha = DKCrutch:CreateSlider(L.CONFIG_RUNE_TRACKER_ALPHA, DKCrutch.configPanel, .0, 1, .1) + RuneAlpha:SetScript('OnShow', function(self) + self.onShow = true + self:SetValue(DKCrutchDB.runes.alpha) + self.onShow = nil + end) + RuneAlpha:SetScript('OnValueChanged', function(self, value) + self.valText:SetText(format('%.1f', value)) + if not self.onShow then + DKCrutchDB.runes.alpha=value + DKCrutch.displayFrame:SetAlpha(value) + end + end) + RuneAlpha:SetPoint("TOPLEFT",200,-138) + RuneAlpha:Show() + + local procScale = DKCrutch:CreateSlider(L.CONFIG_PROC_SCALE, DKCrutch.configPanel, .25, 3, .1) + procScale:SetScript('OnShow', function(self) + self.onShow = true + self:SetValue(DKCrutchDB.proc.scale) + self.onShow = nil + end) + procScale:SetScript('OnValueChanged', function(self, value) + self.valText:SetText(format('%.1f', value)) + if not self.onShow then + DKCrutchDB.proc.scale=value + DKCrutch.procFrame:SetScale(value) + end + end) + procScale:SetPoint("TOPLEFT",10,-198) + procScale:Show() + + local procAlpha = DKCrutch:CreateSlider(L.CONFIG_PROC_ALPHA, DKCrutch.configPanel, .0, 1, .1) + procAlpha:SetScript('OnShow', function(self) + self.onShow = true + self:SetValue(DKCrutchDB.proc.alpha) + self.onShow = nil + end) + procAlpha:SetScript('OnValueChanged', function(self, value) + self.valText:SetText(format('%.1f', value)) + if not self.onShow then + DKCrutchDB.proc.alpha=value + DKCrutch.procFrame:SetAlpha(value) + end + end) + procAlpha:SetPoint("TOPLEFT",200,-198) + procAlpha:Show() + + local procDisableBtn = DKCrutch:CreateCheckButton(L.CONFIG_DISABLE_PROC, DKCrutch.configPanel, DKCrutchDB, "procDisabled", false) + procDisableBtn:SetPoint('TOPLEFT', 10, -218) + + local runicScale = DKCrutch:CreateSlider(L.CONFIG_RUNIC_SCALE, DKCrutch.configPanel, .25, 3, .1) + runicScale:SetScript('OnShow', function(self) + self.onShow = true + self:SetValue(DKCrutchDB.runic.scale) + self.onShow = nil + end) + runicScale:SetScript('OnValueChanged', function(self, value) + self.valText:SetText(format('%.1f', value)) + if not self.onShow then + DKCrutchDB.runic.scale=value + DKCrutch.runicFrame:SetScale(value) + + end + end) + runicScale:SetPoint("TOPLEFT",10,-258) + runicScale:Show() + + local runicAlpha = DKCrutch:CreateSlider(L.CONFIG_RUNIC_ALPHA, DKCrutch.configPanel, .0, 1, .1) + runicAlpha:SetScript('OnShow', function(self) + self.onShow = true + self:SetValue(DKCrutchDB.runic.alpha) + self.onShow = nil + end) + runicAlpha:SetScript('OnValueChanged', function(self, value) + self.valText:SetText(format('%.1f', value)) + if not self.onShow then + DKCrutchDB.runic.alpha=value + DKCrutch.runicFrame:SetAlpha(value) + end + end) + runicAlpha:SetPoint("TOPLEFT",200,-258) + runicAlpha:Show() + + local runicDisableBtn = DKCrutch:CreateCheckButton(L.CONFIG_DISABLE_RUNIC, DKCrutch.configPanel, DKCrutchDB, "runicDisabled", false) + runicDisableBtn:SetPoint('TOPLEFT', 10, -278) + + local debuffScale = DKCrutch:CreateSlider(L.CONFIG_DEBUFF_SCALE, DKCrutch.configPanel, .25, 3, .1) + debuffScale:SetScript('OnShow', function(self) + self.onShow = true + self:SetValue(DKCrutchDB.debuff.scale) + self.onShow = nil + end) + debuffScale:SetScript('OnValueChanged', function(self, value) + self.valText:SetText(format('%.1f', value)) + if not self.onShow then + DKCrutchDB.debuff.scale=value + DKCrutch.debuffFrame:SetScale(value) + + end + end) + debuffScale:SetPoint("TOPLEFT",10,-318) + debuffScale:Show() + + local debuffAlpha = DKCrutch:CreateSlider(L.CONFIG_DEBUFF_ALPHA, DKCrutch.configPanel, .0, 1, .1) + debuffAlpha:SetScript('OnShow', function(self) + self.onShow = true + self:SetValue(DKCrutchDB.debuff.alpha) + self.onShow = nil + end) + debuffAlpha:SetScript('OnValueChanged', function(self, value) + self.valText:SetText(format('%.1f', value)) + if not self.onShow then + DKCrutchDB.debuff.alpha=value + DKCrutch.debuffFrame:SetAlpha(value) + end + end) + debuffAlpha:SetPoint("TOPLEFT",200,-318) + debuffAlpha:Show() + + local debuffDisableBtn = DKCrutch:CreateCheckButton(L.CONFIG_DISABLE_DEBUFF, DKCrutch.configPanel, DKCrutchDB, "debuffDisabled", false) + debuffDisableBtn:SetPoint('TOPLEFT', 10, -338) + + local weaponScale = DKCrutch:CreateSlider(L.CONFIG_WEAPON_SCALE, DKCrutch.configPanel, .25, 3, .1) + weaponScale:SetScript('OnShow', function(self) + self.onShow = true + self:SetValue(DKCrutchDB.weapon.scale) + self.onShow = nil + end) + weaponScale:SetScript('OnValueChanged', function(self, value) + self.valText:SetText(format('%.1f', value)) + if not self.onShow then + DKCrutchDB.weapon.scale=value + DKCrutch.weaponFrame:SetScale(value) + end + end) + weaponScale:SetPoint("TOPLEFT",10,-378) + weaponScale:Show() + + local weaponAlpha = DKCrutch:CreateSlider(L.CONFIG_WEAPON_ALPHA, DKCrutch.configPanel, .0, 1, .1) + weaponAlpha:SetScript('OnShow', function(self) + self.onShow = true + self:SetValue(DKCrutchDB.weapon.alpha) + self.onShow = nil + end) + weaponAlpha:SetScript('OnValueChanged', function(self, value) + self.valText:SetText(format('%.1f', value)) + if not self.onShow then + DKCrutchDB.weapon.alpha=value + DKCrutch.weaponFrame:SetAlpha(value) + end + end) + weaponAlpha:SetPoint("TOPLEFT",200,-378) + weaponAlpha:Show() + + local weaponDisableBtn = DKCrutch:CreateCheckButton(L.CONFIG_DISABLE_WEAPON, DKCrutch.configPanel, DKCrutchDB, "weaponDisabled", false) + weaponDisableBtn:SetPoint('TOPLEFT', 10, -398) + + local ResetBtn = DKCrutch:CreateButton(L.CONFIG_RESET_POSITIONS, DKCrutch.configPanel) + ResetBtn:SetWidth(160) + ResetBtn:SetHeight(22) + ResetBtn:SetScript('OnClick', function() + DKCrutch:ResetPosition() + end) + ResetBtn:SetPoint("TOPLEFT",10,-448) + ResetBtn:Show() + + DKCrutch.configPanel.okay = function() + DKCrutch:ApplySettings() + end + DKCrutch.configPanel.cancel = function() + -- cancel button pressed, revert changes + DKCrutch:ReStoreUIValues() + DKCrutch:ApplySettings() + end + DKCrutch.configPanel.default = function() + -- default button pressed, reset setting + DKCrutch:ResetDB(true) + DKCrutch:ResetPosition() + end + + -- always show frame if config panel is open + DKCrutch.configPanel:SetScript('OnShow', function(self) + self.onShow = true + self.onShow = nil + end) + DKCrutch.configPanel:SetScript('OnHide', function(self) + self.onHide = true + self.onHide = nil + end) + -- Add the panel to the Interface Options + InterfaceOptions_AddCategory(DKCrutch.configPanel) +end + +function DKCrutch:ResetDB() + if (not DKCrutchDB.runes) or (force) then + DKCrutchDB.runes = { + ["x"] = -180, + ["y"] = 0, + ["scale"] = 1, + ["alpha"] = 1, + ["relativePoint"] = "CENTER", + } + end + if (not DKCrutchDB.advisor) or (force) then + DKCrutchDB.advisor = { + ["x"] = 180, + ["y"] = 0, + ["scale"] = 1, + ["alpha"] = 1, + ["relativePoint"] = "CENTER", + } + end + if (not DKCrutchDB.proc) or (force) then + DKCrutchDB.proc = { + ["x"] = 0, + ["y"] = 90, + ["scale"] = 1, + ["alpha"] = 1, + ["relativePoint"] = "CENTER", + } + end + if (not DKCrutchDB.weapon) or (force) then + DKCrutchDB.weapon = { + ["x"] = 0, + ["y"] = 122, + ["scale"] = 1, + ["alpha"] = 1, + ["relativePoint"] = "CENTER", + } + end + if (not DKCrutchDB.runic) or (force) then + DKCrutchDB.runic = { + ["x"] = 90, + ["y"] = 90, + ["scale"] = 1, + ["alpha"] = 1, + ["relativePoint"] = "CENTER", + } + end + if (not DKCrutchDB.debuff) or (force) then + DKCrutchDB.debuff = { + ["x"] = 0, + ["y"] = 180, + ["scale"] = 1, + ["alpha"] = 1, + ["relativePoint"] = "CENTER", + } + end + + if (force) then + DKCrutchDB.locked = false + DKCrutchDB.enabled = true + DKCrutchDB.advisorDisabled = false + DKCrutchDB.procDisabled = false + DKCrutchDB.weaponDisabled = false + DKCrutchDB.runicDisabled = false + DKCrutchDB.debuffDisabled = false + end +end + +function DKCrutch.Options(msg) + if (msg=='debug') then + if (DKCrutch.DebugMode) then + DKCrutch:Debug("Debug ended", GetTime()) + end + DKCrutch.DebugMode = not ( DKCrutch.DebugMode ) + local debugStatus = "disabled" + if (DKCrutch.DebugMode) then + DKCrutch.DebugChat = DKCrutch:GetDebugFrame() + debugStatus = "enabled. Using frame: " .. DKCrutch.DebugChat:GetID() + DKCrutch:Debug("Debug started", GetTime()) + end + DEFAULT_CHAT_FRAME:AddMessage("DKCrutch Debug " .. debugStatus) + else + InterfaceOptionsFrame_OpenToCategory(getglobal("DKCrutchConfigPanel")) + end +end + +function DKCrutch:adjustDeathTracker() + if DKCrutch.deathTracker then + if (DKCrutch.talent == "frost") then + DKCrutch.deathTracker:SetStatusBarTexture("Interface\\AddOns\\DKCrutch\\media\\death.tga") + DKCrutch.deathTracker:SetMinMaxValues(0,20) + else + DKCrutch.deathTracker:SetStatusBarTexture("Interface\\AddOns\\DKCrutch\\media\\death4.tga") + DKCrutch.deathTracker:SetMinMaxValues(0,40) + end + end +end + +function DKCrutch:ResetPosition() + DKCrutchDB.runes.x = 0 + DKCrutchDB.runes.y = -100 + DKCrutchDB.runes.relativePoint = "CENTER" + DKCrutchDB.advisor.x = -100 + DKCrutchDB.advisor.y = 0 + DKCrutchDB.advisor.relativePoint = "CENTER" + DKCrutchDB.proc.x = 0 + DKCrutchDB.proc.y = 90 + DKCrutchDB.proc.relativePoint = "CENTER" + DKCrutchDB.weapon.x = 0 + DKCrutchDB.weapon.y = 122 + DKCrutchDB.weapon.relativePoint = "CENTER" + DKCrutchDB.runic.x = 90 + DKCrutchDB.runic.y = 90 + DKCrutchDB.runic.relativePoint = "CENTER" + DKCrutchDB.debuff.x = 0 + DKCrutchDB.debuff.y = 180 + DKCrutchDB.debuff.relativePoint = "CENTER" + + DKCrutch.displayFrame:ClearAllPoints() + DKCrutch.displayFrame:SetPoint(DKCrutchDB.runes.relativePoint,DKCrutchDB.runes.x,DKCrutchDB.runes.y) + DKCrutch.advisorFrame:ClearAllPoints() + DKCrutch.advisorFrame:SetPoint(DKCrutchDB.advisor.relativePoint,DKCrutchDB.advisor.x,DKCrutchDB.advisor.y) + DKCrutch.procFrame:ClearAllPoints() + DKCrutch.procFrame:SetPoint(DKCrutchDB.proc.relativePoint,DKCrutchDB.proc.x,DKCrutchDB.proc.y) + DKCrutch.weaponFrame:ClearAllPoints() + DKCrutch.weaponFrame:SetPoint(DKCrutchDB.weapon.relativePoint,DKCrutchDB.weapon.x,DKCrutchDB.weapon.y) + DKCrutch.debuffFrame:ClearAllPoints() + DKCrutch.debuffFrame:SetPoint(DKCrutchDB.debuff.relativePoint,DKCrutchDB.debuff.x,DKCrutchDB.debuff.y) + +end + +function DKCrutch:MakeDraggable(frame,store) + frame:Show() + if (store ~= "runic") then + frame:SetBackdropColor(0, 0, 0, .3) + end + frame:EnableMouse(true) + frame:SetMovable(true) + frame:SetClampedToScreen(true) + frame:SetScript("OnMouseDown", function(self) self:StartMoving(); self:SetBackdropColor(0, 0, 0, .6); end) + frame:SetScript("OnMouseUp", function(self) + self:StopMovingOrSizing() + if (store ~= "runic") then + if (DKCrutch.locked) then + self:SetBackdropColor(0, 0, 0, 0) + else + self:SetBackdropColor(0, 0, 0, .3) + end + end + local _,_,rp,x,y = self:GetPoint() + DKCrutchDB[store]["x"] = x + DKCrutchDB[store]["y"] = y + DKCrutchDB[store]["relativePoint"] = rp + end) + frame:SetScript("OnDragStop", function(self) + self:StopMovingOrSizing(); + if (store ~= "runic") then + if (DKCrutch.locked) then + self:SetBackdropColor(0, 0, 0, 0) + else + self:SetBackdropColor(0, 0, 0, .3) + end + end + local _,_,rp,x,y = self:GetPoint() + DKCrutchDB[store]["x"] = x + DKCrutchDB[store]["y"] = y + DKCrutchDB[store]["relativePoint"] = rp + end) +end + +function DKCrutch:UnLockFrames() + DKCrutch:MakeDraggable(DKCrutch.displayFrame,"runes") + DKCrutch:MakeDraggable(DKCrutch.advisorFrame,"advisor") + DKCrutch:MakeDraggable(DKCrutch.procFrame,"proc") + DKCrutch:MakeDraggable(DKCrutch.weaponFrame,"weapon") + DKCrutch:MakeDraggable(DKCrutch.runicFrame,"runic") + DKCrutch:MakeDraggable(DKCrutch.debuffFrame,"debuff") +end + +function DKCrutch:CreateGUI() + local displayFrame = CreateFrame("Frame","DKCrutchDisplayFrame",UIParent) + displayFrame:SetFrameStrata("BACKGROUND") + displayFrame:SetWidth(84) + displayFrame:SetHeight(64) + displayFrame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 32, + }) + displayFrame:SetBackdropColor(0, 0, 0, .0) + displayFrame:SetAlpha(DKCrutchDB.runes.alpha) + displayFrame:SetPoint(DKCrutchDB.runes.relativePoint,DKCrutchDB.runes.x,DKCrutchDB.runes.y) + + local iconTexture = displayFrame:CreateTexture(nil,"BACKGROUND") + iconTexture:SetTexture("Interface\\AddOns\\DKCrutch\\media\\icons.tga", true) + iconTexture:SetWidth(16) + iconTexture:SetHeight(64) + iconTexture:SetPoint('TOPLEFT',displayFrame,0,0) + + for i=1,3,1 do + local runes = CreateFrame("StatusBar", nil, displayFrame) + if (i==1) then + runes:SetStatusBarTexture("Interface\\AddOns\\DKCrutch\\media\\unholy.tga") + elseif (i==2) then + runes:SetStatusBarTexture("Interface\\AddOns\\DKCrutch\\media\\frost.tga") + elseif (i==3) then + runes:SetStatusBarTexture("Interface\\AddOns\\DKCrutch\\media\\blood.tga") + end + runes:SetWidth(64) + runes:SetHeight(16) + runes:SetMinMaxValues(0,20) + runes:SetPoint('TOPLEFT',displayFrame,20,-i*16) + + DKCrutch.runeTracker[i] = runes + end + + local deathRunes = CreateFrame("StatusBar", nil, displayFrame) + deathRunes:SetStatusBarTexture("Interface\\AddOns\\DKCrutch\\media\\death.tga") + deathRunes:SetWidth(64) + deathRunes:SetHeight(16) + deathRunes:SetMinMaxValues(0,20) + deathRunes:SetPoint('TOPLEFT',displayFrame,20,0) + + DKCrutch.deathTracker = deathRunes + + DKCrutch.displayFrame = displayFrame + + DKCrutch:adjustDeathTracker() + + local advisorFrame = CreateFrame("Frame", "DKCrutchAdvisorFrame", UIParent) + advisorFrame:SetFrameStrata("BACKGROUND") + advisorFrame:SetWidth(64) + advisorFrame:SetHeight(64) + advisorFrame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 32, + }) + advisorFrame:SetBackdropColor(0, 0, 0, .0) + + local t = advisorFrame:CreateTexture(nil,"BACKGROUND") + t:SetTexture("") + t:SetAllPoints(advisorFrame) + advisorFrame.texture = t + advisorFrame:SetAlpha(DKCrutchDB.advisor.alpha) + advisorFrame:SetPoint(DKCrutchDB.advisor.relativePoint,DKCrutchDB.advisor.x,DKCrutchDB.advisor.y) + + local cooldownFrame = CreateFrame("Cooldown","$parent_cooldown", advisorFrame, "CooldownFrameTemplate") + cooldownFrame:SetHeight(64) + cooldownFrame:SetWidth(64) + cooldownFrame:ClearAllPoints() + cooldownFrame:SetPoint("CENTER", advisorFrame, "CENTER", 0, 0) + cooldownFrame:SetReverse(false) + + DKCrutch.cooldownFrame = cooldownFrame + + DKCrutch.advisorFrame = advisorFrame + + local procFrame = CreateFrame("Cooldown", "DKCrutchProcFrame", UIParent) + procFrame:SetFrameStrata("BACKGROUND") + procFrame:SetWidth(32) + procFrame:SetHeight(32) + procFrame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 32, + }) + procFrame:SetBackdropColor(0, 0, 0, .0) + + t = procFrame:CreateTexture(nil,"BACKGROUND") + t:SetTexture("") + t:SetAllPoints(procFrame) + procFrame.texture = t + procFrame:SetAlpha(DKCrutchDB.proc.alpha) + procFrame:SetPoint(DKCrutchDB.proc.relativePoint,DKCrutchDB.proc.x,DKCrutchDB.proc.y) + + t = procFrame:CreateFontString("$parent_ProcText","OVERLAY","GameFontHighlightSmallOutline"); + t:SetPoint("BOTTOM",procFrame,"BOTTOM",0,0) + t:SetAlpha(1) + t:SetText("") + + DKCrutch.procText = t + DKCrutch.procFrame = procFrame + + local weaponFrame = CreateFrame("StatusBar", "DKCrutchWeaponFrame", UIParent) + weaponFrame:SetFrameStrata("BACKGROUND") + weaponFrame:SetWidth(64) + weaponFrame:SetHeight(20) + weaponFrame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 32, + }) + weaponFrame:SetOrientation("HORIZONTAL") + weaponFrame:SetMinMaxValues(0, 15) + weaponFrame:SetValue(0) + weaponFrame:SetStatusBarTexture("Interface\\AddOns\\DKCrutch\\media\\weapon.tga") + t = weaponFrame:CreateTexture(nil,"BACKGROUND") + t:SetTexture("") + t:SetAllPoints(weaponFrame) + weaponFrame.texture = t + weaponFrame:SetAlpha(DKCrutchDB.weapon.alpha) + weaponFrame:SetPoint(DKCrutchDB.weapon.relativePoint,DKCrutchDB.weapon.x,DKCrutchDB.weapon.y) + + t = weaponFrame:CreateFontString("$parent_WeaponText","OVERLAY","GameFontHighlightSmallOutline"); + t:SetPoint("CENTER",weaponFrame,"CENTER",0,0) + t:SetAlpha(1) + t:SetText("") + + DKCrutch.weaponText = t + DKCrutch.weaponFrame = weaponFrame + + local runicFrame = CreateFrame("Frame", "DKCrutchRunicFrame", UIParent) + runicFrame:SetFrameStrata("BACKGROUND") + runicFrame:SetWidth(128) + runicFrame:SetHeight(128) + runicFrame:SetBackdrop({ + bgFile = "Interface\\AddOns\\DKCrutch\\media\\runic_circle.tga", tile = false, tileSize = 128, + }) + + t = runicFrame:CreateTexture(nil,"MEDIUM") + t:SetTexture("Interface\\AddOns\\DKCrutch\\media\\runic_power.tga", false) + t:SetAllPoints(runicFrame) + t:SetPoint("CENTER", "DKCrutchRunicFrame", "CENTER", 0, 0); + runicFrame.texture = t + runicFrame:SetAlpha(DKCrutchDB.runic.alpha) + runicFrame:SetPoint(DKCrutchDB.runic.relativePoint,DKCrutchDB.runic.x,DKCrutchDB.runic.y) + + DKCrutch.runicFrame = runicFrame + + local debuffFrame = CreateFrame("Frame", "DKCrutchDebuffFrame", UIParent) + debuffFrame:SetFrameStrata("BACKGROUND") + debuffFrame:SetWidth(64) + debuffFrame:SetHeight(32) + debuffFrame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 64, + }) + debuffFrame:SetBackdropColor(0, 0, 0, .0) + + local d1 = CreateFrame("Cooldown", "DKCrutchDebuff1Frame", DKCrutchDebuffFrame, "CooldownFrameTemplate") + d1:SetWidth(32) + d1:SetHeight(32) + d1:ClearAllPoints() + d1:SetPoint("TOPLEFT", debuffFrame, "TOPLEFT", 0, 0) + t = d1:CreateTexture(nil,"MEDIUM") + t:SetTexture("") + t:SetAllPoints(d1) + d1.texture = t + + DKCrutch.debuff1Frame = d1 + + local d2 = CreateFrame("Cooldown", "DKCrutchDebuff2Frame", DKCrutchDebuffFrame, "CooldownFrameTemplate") + d2:SetWidth(32) + d2:SetHeight(32) + d2:ClearAllPoints() + d2:SetPoint("TOPRIGHT", debuffFrame, "TOPRIGHT", 0, 0) + t = d2:CreateTexture(nil,"MEDIUM") + t:SetTexture("") + t:SetAllPoints(d2) + d2.texture = t + + DKCrutch.debuff2Frame = d2 + + debuffFrame:SetAlpha(DKCrutchDB.debuff.alpha) + debuffFrame:SetPoint(DKCrutchDB.debuff.relativePoint,DKCrutchDB.debuff.x,DKCrutchDB.debuff.y) + + DKCrutch.debuffFrame = debuffFrame + + if (not DKCrutchDB.locked) then + DKCrutch:UnLockFrames() + end +end diff --git a/locales/enUS.lua b/locales/enUS.lua old mode 100755 new mode 100644