annotate SkeenMelee.lua @ 10:01aac1f694d9

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