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