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