annotate SkeenMelee.lua @ 5:e4270335b851 v1.1.0

Updated Version
author Emil Madsen <skeen@cs.au.dk>
date Thu, 30 Jun 2011 18:40:55 +0200
parents 6e44a9e52393
children f8b96a717bd1
rev   line source
skeen@0 1 --
skeen@0 2 -- SkeenMelee
skeen@0 3 --
skeen@0 4
skeen@0 5 -- Local table (used to store functions, ect)
skeen@0 6 local SkeenMelee = {}
skeen@0 7
skeen@0 8 SkeenMelee.eventHandler = CreateFrame("Frame")
skeen@0 9 SkeenMelee.eventHandler:SetScript("OnEvent", function(this, event, ...) SkeenMelee.events[event](...) end)
skeen@0 10 --Events to listen to
skeen@0 11 SkeenMelee.eventHandler:RegisterEvent("PLAYER_TARGET_CHANGED")
skeen@0 12 SkeenMelee.eventHandler:RegisterEvent("ADDON_LOADED")
skeen@0 13 --EventHandler Functions
skeen@0 14 --by our eventHandler frame.
skeen@0 15 SkeenMelee.events = {}
skeen@0 16 --Player logged in
skeen@0 17 function SkeenMelee.events.ADDON_LOADED(addon)
skeen@0 18 if (addon ~= "SkeenMelee") then
skeen@0 19 return
skeen@0 20 end
skeen@0 21
skeen@0 22 SkeenMelee:PrepareDatabase()
skeen@0 23 SkeenMelee:CreateGUI()
skeen@0 24 SkeenMelee:UpdateDragability()
skeen@0 25 SkeenMelee:CreateOptionFrame()
skeen@0 26 end
skeen@0 27
skeen@0 28 -- Prepare the Normal database (settings database)
skeen@0 29 -- This is the maintained database, and isn't wiped on each login, like the active one is
skeen@0 30 function SkeenMelee:PrepareDatabase()
skeen@0 31
skeen@0 32 -- If there doesn't exist a database currently
skeen@0 33 if not SkeenMeleeDatabase then
skeen@0 34 SkeenMeleeDatabase = {} -- fresh start
skeen@0 35 SkeenMeleeDatabase.update_interval = 0.1 -- Fill it with the default value of 0.1 seconds per interval
skeen@0 36 SkeenMeleeDatabase.scale = 1 --100% size
skeen@0 37 SkeenMeleeDatabase.locked = false --Not locked by default
skeen@0 38 SkeenMeleeDatabase.x = 100 --TODO: Make some better values I guess?
skeen@0 39 SkeenMeleeDatabase.y = 100 --TODO: Make some better values I guess?
skeen@0 40 end
skeen@0 41 end
skeen@0 42
skeen@0 43 -- Functions Section
skeen@0 44 function SkeenMelee_OnUpdate(self, elapsed)
skeen@0 45 self.TimeSinceLastUpdate = self.TimeSinceLastUpdate + elapsed;
skeen@0 46
skeen@0 47 if (self.TimeSinceLastUpdate > SkeenMeleeDatabase.update_interval) then
skeen@0 48 SkeenMelee:Update()
skeen@0 49 self.TimeSinceLastUpdate = 0;
skeen@0 50 end
skeen@0 51 end
skeen@0 52
skeen@0 53 function SkeenMelee.events.PLAYER_TARGET_CHANGED(...)
skeen@0 54 SkeenMelee:Update()
skeen@0 55 end
skeen@0 56
skeen@0 57 function SkeenMelee:Update()
skeen@0 58 local is_in_melee_range = nil
skeen@0 59 local unit = "target"
skeen@0 60 -- Test class and find a spell accordingly
skeen@0 61 local _, class = UnitClass("player");
skeen@0 62 local meleespell
skeen@0 63
skeen@0 64 -- Choose a melee spell for each class (if any)
skeen@0 65 if (class == "DEATH KNIGHT") then
skeen@0 66 meleespell = "Blood Strike"
skeen@0 67 elseif (class == "DRUID") then
skeen@0 68 meleespell = "Claw"
skeen@0 69 elseif (class == "HUNTER") then
skeen@0 70 meleespell = "Raptor Strike"
skeen@0 71 elseif (class == "PALADIN") then
skeen@0 72 meleespell = "Crusader Strike"
skeen@0 73 elseif (class == "ROGUE") then
skeen@0 74 meleespell = "Sinister Strike"
skeen@0 75 elseif (class == "SHAMAN") then
skeen@0 76 meleespell = "Primal Strike"
skeen@0 77 elseif (class == "WARRIOR") then
skeen@0 78 meleespell = "Strike"
skeen@0 79 else --mage, priest, warlock
skeen@0 80 SkeenMelee:HideFrame()
skeen@0 81 end
skeen@0 82
skeen@0 83 if UnitExists(unit) and UnitIsVisible(unit) then
skeen@0 84 is_in_melee_range = IsSpellInRange(meleespell, unit)
skeen@0 85 end
skeen@0 86 if (is_in_melee_range==1) then --Is in melee range
skeen@0 87 SkeenMelee.infoString:SetText("Melee")
skeen@0 88 SkeenMelee:ShowFrame()
skeen@0 89 elseif (is_in_melee_range==0) then --Is not in melee range
skeen@0 90 SkeenMelee.infoString:SetText("|cffff0000NOT MELEE|r")
skeen@0 91 SkeenMelee:ShowFrame()
skeen@0 92 else --Not even a melee target
skeen@0 93 SkeenMelee:HideFrame()
skeen@0 94 end
skeen@0 95 end
skeen@0 96
skeen@0 97 function SkeenMelee:CreateGUI()
skeen@0 98
skeen@0 99 local displayFrame = CreateFrame("Frame", "SkeenMeleeDisplayFrame", UIParent)
skeen@0 100 displayFrame:SetFrameStrata("BACKGROUND")
skeen@0 101 displayFrame:SetWidth(100)
skeen@0 102 displayFrame:SetHeight(30)
skeen@0 103 displayFrame:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 32,})
skeen@0 104 displayFrame:SetBackdropColor(0, 0, 0, .4)
skeen@0 105 displayFrame:EnableMouse(true)
skeen@0 106 displayFrame:SetMovable(true)
skeen@0 107 displayFrame:SetClampedToScreen(true)
skeen@0 108 displayFrame:SetScript("OnMouseDown", function(self) self:StartMoving() end)
skeen@0 109 displayFrame:SetScript("OnMouseUp", function(self) self:StopMovingOrSizing() end)
skeen@0 110 displayFrame:SetScript("OnDragStop", function(self) self:StopMovingOrSizing() end)
skeen@0 111 displayFrame:SetPoint("CENTER",-200,-200)
skeen@0 112
skeen@0 113 local infoString = displayFrame:CreateFontString("SkeenMelee_infoString","OVERLAY","GameFontNormal")
skeen@0 114 infoString:SetText("Unknown")
skeen@0 115 infoString:SetPoint("CENTER", 0, 0)
skeen@0 116
skeen@0 117 SkeenMelee.infoString = infoString
skeen@0 118 SkeenMelee.displayFrame = displayFrame
skeen@0 119
skeen@0 120 displayFrame:SetScale(SkeenMeleeDatabase.scale)
skeen@0 121 end
skeen@0 122
skeen@0 123 -- The optionsframe in interface
skeen@0 124 function SkeenMelee:CreateOptionFrame()
skeen@0 125
skeen@0 126 local panel = CreateFrame("FRAME", "SkeenMeleeOptions", UIParent);
skeen@0 127 panel.name = "SkeenMelee";
skeen@0 128
skeen@0 129 local fstring1 = panel:CreateFontString("SkeenMeleeOptions_string1","OVERLAY","GameFontNormal")
skeen@0 130 fstring1:SetText("Lock")
skeen@0 131 fstring1:SetPoint("TOPLEFT", 10, -10)
skeen@0 132
skeen@0 133 local checkbox1 = CreateFrame("CheckButton", "$parent_cb1", panel, "OptionsCheckButtonTemplate")
skeen@0 134 checkbox1:SetWidth(18)
skeen@0 135 checkbox1:SetHeight(18)
skeen@0 136 checkbox1:SetScript("OnClick", function() SkeenMelee:ToggleLocked() end)
skeen@0 137 checkbox1:SetPoint("TOPRIGHT", -10, -10)
skeen@0 138 checkbox1:SetChecked(SkeenMelee:GetLocked())
skeen@0 139
skeen@0 140 local fstring2 = panel:CreateFontString("SkeenMeleeOptions_string2","OVERLAY","GameFontNormal")
skeen@0 141 fstring2:SetText("GUI Scale")
skeen@0 142 fstring2:SetPoint("TOPLEFT", 10, -40)
skeen@0 143
skeen@0 144 local slider2 = CreateFrame("Slider", "$parent_sl2", panel, "OptionsSliderTemplate")
skeen@0 145 slider2:SetMinMaxValues(.5, 1.5)
skeen@0 146 slider2:SetValue(SkeenMelee:GetScale())
skeen@0 147 slider2:SetValueStep(.05)
skeen@0 148 slider2:SetScript("OnValueChanged", function(self) SkeenMelee:SetScale(self:GetValue()); getglobal(self:GetName() .. "Text"):SetText(string.format("%.0f%%", self:GetValue()*100)) end)
skeen@0 149 getglobal(slider2:GetName() .. "Low"):SetText("50%")
skeen@0 150 getglobal(slider2:GetName() .. "High"):SetText("150%")
skeen@0 151 getglobal(slider2:GetName() .. "Text"):SetText(string.format("%.0f%%", SkeenMelee:GetScale()*100))
skeen@0 152 slider2:SetPoint("TOPRIGHT", -10, -40)
skeen@0 153
skeen@0 154 local fstring3 = panel:CreateFontString("SkeenMeleeOptions_string3","OVERLAY","GameFontNormal")
skeen@0 155 fstring3:SetText("Update Interval (sec)")
skeen@0 156 fstring3:SetPoint("TOPLEFT", 10, -70)
skeen@0 157
skeen@0 158 local slider3 = CreateFrame("Slider", "$parent_sl3", panel, "OptionsSliderTemplate")
skeen@0 159 slider3:SetMinMaxValues(0, 1)
skeen@0 160 slider3:SetValue(SkeenMelee:GetUpdateInterval())
skeen@0 161 slider3:SetValueStep(.1)
skeen@0 162 slider3:SetScript("OnValueChanged", function(self) SkeenMelee:SetUpdateInterval(self:GetValue()); getglobal(self:GetName() .. "Text"):SetText(string.format("%.1f", self:GetValue())) end)
skeen@0 163 getglobal(slider3:GetName() .. "Low"):SetText("0")
skeen@0 164 getglobal(slider3:GetName() .. "High"):SetText("1")
skeen@0 165 getglobal(slider3:GetName() .. "Text"):SetText(string.format("%.1f", SkeenMelee:GetUpdateInterval()))
skeen@0 166 slider3:SetPoint("TOPRIGHT", -10, -70)
skeen@0 167
skeen@0 168 SkeenMelee.options = panel
skeen@0 169 panel.parent = "Skeen"
skeen@0 170
skeen@0 171 InterfaceOptions_AddCategory(panel);
skeen@0 172 end
skeen@0 173
skeen@0 174 function SkeenMelee:GetLocked()
skeen@0 175 return SkeenMeleeDatabase.locked
skeen@0 176 end
skeen@0 177
skeen@0 178 function SkeenMelee:ToggleLocked()
skeen@0 179 SkeenMeleeDatabase.locked = not SkeenMeleeDatabase.locked
skeen@0 180 SkeenMelee:UpdateDragability()
skeen@0 181 end
skeen@0 182
skeen@0 183 function SkeenMelee:GetScale()
skeen@0 184 return SkeenMeleeDatabase.scale
skeen@0 185 end
skeen@0 186
skeen@0 187 function SkeenMelee:SetScale(num)
skeen@0 188 SkeenMeleeDatabase.scale = num
skeen@0 189 SkeenMelee.displayFrame:SetScale(SkeenMeleeDatabase.scale)
skeen@0 190 end
skeen@0 191
skeen@0 192 function SkeenMelee:GetUpdateInterval()
skeen@0 193 return SkeenMeleeDatabase.update_interval
skeen@0 194 end
skeen@0 195
skeen@0 196 function SkeenMelee:SetUpdateInterval(num)
skeen@0 197 SkeenMeleeDatabase.update_interval = num
skeen@0 198 end
skeen@0 199
skeen@0 200 function SkeenMelee:UpdateDragability()
skeen@0 201 if SkeenMeleeDatabase.locked then
skeen@0 202 SkeenMelee.displayFrame:SetScript("OnMouseDown", nil)
skeen@0 203 SkeenMelee.displayFrame:SetScript("OnMouseUp", nil)
skeen@0 204 SkeenMelee.displayFrame:SetScript("OnDragStop", nil)
skeen@0 205 SkeenMelee.displayFrame:SetBackdropColor(0, 0, 0, 0)
skeen@0 206 SkeenMelee.displayFrame:EnableMouse(false)
skeen@0 207 else
skeen@0 208 SkeenMelee.displayFrame:SetScript("OnMouseDown", function(self) self:StartMoving() end)
skeen@0 209 SkeenMelee.displayFrame:SetScript("OnMouseUp", function(self) self:StopMovingOrSizing() end)
skeen@0 210 SkeenMelee.displayFrame:SetScript("OnDragStop", function(self) self:StopMovingOrSizing() end)
skeen@0 211 SkeenMelee.displayFrame:SetBackdropColor(0, 0, 0, .4)
skeen@0 212 SkeenMelee.displayFrame:EnableMouse(true)
skeen@0 213 end
skeen@0 214 end
skeen@0 215
skeen@0 216 function SkeenMelee:HideFrame()
skeen@0 217 SkeenMelee.displayFrame:Hide()
skeen@0 218 SkeenMelee.infoString:Hide()
skeen@0 219 end
skeen@0 220
skeen@0 221 function SkeenMelee:ShowFrame()
skeen@0 222 SkeenMelee.displayFrame:Show()
skeen@0 223 SkeenMelee.infoString:Show()
skeen@0 224 end