|
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
|