comparison SkeletonUnit/UnitFrame.lua @ 1:cd7d06bcd98d

KeyBinds: set hotkey text for blizzard action buttons UnitFrame: prototype templates for the majority of units
author Nenue
date Tue, 21 Jun 2016 04:47:52 -0400
parents 69e828f4238a
children 07293831dd7b
comparison
equal deleted inserted replaced
0:69e828f4238a 1:cd7d06bcd98d
4 -- @project - r e v i s i o n @ @project-hash@ 4 -- @project - r e v i s i o n @ @project-hash@
5 -- @file - r e v i s i o n @ @file-hash@ 5 -- @file - r e v i s i o n @ @file-hash@
6 -- Created: 6/16/2016 3:46 AM 6 -- Created: 6/16/2016 3:46 AM
7 -------------------------------------------- 7 --------------------------------------------
8 8
9 local KT = select(2,...) 9 local KT = LibKT.register(SkeletonUnits)
10 local PLAYER_NAMEPLATE 10 local PLAYER_NAMEPLATE
11 local PLAYER_WIDTH = 220 11 local PLAYER_WIDTH = 220
12 local BUFF_SIZE = 24 12 local BUFF_SIZE = 24
13 local sk = SkeletonUnits
14 local player = KTPlayerFrame
15 local prototypes = {
16 player = {},
17 target = {},
18 pet = {},
19 focus = {}
20 }
21 local units = {}
22 local buttons = {}
23 local params = {
24 player = {width = 220, height = 30},
25 pet = {height = 25}
26 }
27 sk.handler = sk -- so sk.event can work
13 28
14 29
15 KT.register(KTplayerFrame) 30 local UpdateUnitAnchor = function(self)
16 KTplayerFrame:RegisterUnitEvent("UNIT_HEALTH_FREQUENT", "player") 31 self.nameplate = C_NamePlate.GetNamePlateForUnit(self.unit)
17 KTplayerFrame:RegisterUnitEvent("UNIT_POWER_FREQUENT", "player") 32 if self.nameplate and self.nameplate.namePlateUnitToken then
18 KTplayerFrame:RegisterUnitEvent("UNIT_AURA", 'player') 33 self:ClearAllPoints()
19 KTplayerFrame:RegisterEvent("NAME_PLATE_UNIT_ADDED") 34 self:SetPoint('TOP', self.nameplate, 'BOTTOM', 0, 0)
20 KTplayerFrame:RegisterEvent("NAME_PLATE_UNIT_REMOVED") 35 print('snapping', self.unit, 'to', self.nameplate.namePlateUnitToken)
21 KTplayerFrame.event = function(self) 36 else
22 -- print(C_NamePlate.GetNamePlateForUnit('player')) 37 self:ClearAllPoints()
38 self:SetPoint(unpack(self.anchorPoint))
39 end
23 end 40 end
24 41
25 local buttons = {}
26 local SetupButton = function(self, unit, index) 42 local SetupButton = function(self, unit, index)
27 if not buttons[index] then 43 if not buttons[unit][index] then
28 buttons[index] = CreateFrame('Frame', 'KT'..unit..'Buff'..index, self, 'KTAuraButton') 44 buttons[unit][index] = CreateFrame('Frame', 'KT'..unit..'Buff'..index, self, 'KTAuraButton')
29 buttons[index]:SetSize(BUFF_SIZE, BUFF_SIZE) 45 buttons[unit][index]:SetSize(BUFF_SIZE, BUFF_SIZE)
30 buttons[index].cooldown:SetHideCountdownNumbers(true) 46 buttons[unit][index].cooldown:SetHideCountdownNumbers(true)
31 47
32 end 48 end
33 return buttons[index] 49 return buttons[unit][index]
34 end 50 end
35 51
36 KTplayerFrame.UNIT_AURA = function(self, event, unit) 52 sk.init = function()
53 for unit, handler in pairs(prototypes) do
54 if not _G['KT'..unit..'Frame'] then
55 CreateFrame('Frame', 'KT'.. unit .. 'Frame', sk)
56 end
57 local frame = _G['KT'..unit..'Frame']
58 frame.unit = unit
59 frame.anchorPoint = {frame:GetPoint(1)}
60 frame.handler = handler
61 if handler.init then
62 handler.init(frame, unit)
63 end
64 buttons[unit] = {}
65 units[unit] = frame
66 end
67
68 sk:RegisterEvent('PLAYER_TARGET_CHANGED')
69 sk:RegisterUnitEvent("UNIT_AURA")
70 end
71 sk.variables = function()
72 for unit, frame in pairs(units) do
73 if frame.handler.variables then
74 frame.handler.variables(frame, unit)
75 end
76 local width = params.player.width
77 local height = params.player.height
78 if params[unit] then
79 if params[unit].width then
80 width = params[unit].width
81 end
82 if params[unit].height then
83 height = params[unit].height
84 end
85 end
86
87 frame:SetWidth(width)
88 frame:SetHeight(height)
89 end
90 end
91
92 sk.event = function(self, event, ...)
93 if self.handler[event] then
94 self.handler[event](self, event, ...)
95 end
96 end
97
98 sk.PLAYER_TARGET_CHANGED = function()
99 prototypes.player.refresh(units.target)
100 end
101
102 prototypes.player.init = function(self)
103 self:RegisterUnitEvent("UNIT_HEALTH_FREQUENT", self.unit)
104 self:RegisterUnitEvent("UNIT_POWER_FREQUENT", self.unit)
105 self:RegisterEvent("NAME_PLATE_UNIT_ADDED")
106 self:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
107 self:RegisterEvent("UNIT_TARGET")
108 self:SetScript('OnEvent', sk.event)
109 end
110
111 --- Runs once
112 prototypes.player.variables = function(self)
113 self.handler.refresh(self)
114 end
115
116 --- Runs when event handler decides so
117 prototypes.player.refresh = function(self)
118 if not UnitExists(self.unit) then
119 self:Hide()
120 return
121 end
122
123 local class, classFile = UnitClass(self.unit)
124 if classFile then
125 self.healthbar:SetColorTexture(RAID_CLASS_COLORS[classFile].r, RAID_CLASS_COLORS[classFile].g, RAID_CLASS_COLORS[classFile].b)
126 end
127
128 self.handler.UNIT_HEALTH_FREQUENT(self)
129 self.handler.UNIT_POWER_FREQUENT(self)
130 end
131
132 sk.UNIT_AURA = function(self, event, unit)
133 if not units[unit] then return end
134
37 local buffOffset = 0 135 local buffOffset = 0
136 local buttons = buttons[unit]
38 for i = 1, 16 do 137 for i = 1, 16 do
39 --UnitAura() 138
40 local aura, _, texture, count, dispelType, duration, expires, caster = UnitAura(unit, i, nil, 'HELPFUL') 139 local aura, _, texture, count, dispelType, duration, expires, caster = UnitAura(unit, i, 'HARMFUL')
41 if aura then 140 if aura then
42 local button = SetupButton(self, unit, i) 141 local button = SetupButton(units[unit], unit, i)
43 142
44 button.icon:SetTexture(texture) 143 button.icon:SetTexture(texture)
45 button.cooldown:SetCooldown(expires - duration, duration) 144 button.cooldown:SetCooldown(expires - duration, duration)
46 button.cooldown:Show() 145 button.cooldown:Show()
47 button.count:SetText(count > 0 and count or nil) 146 button.count:SetText(count > 0 and count or nil)
48 button:SetPoint('BOTTOMLEFT', self, 'TOPLEFT', buffOffset* BUFF_SIZE, 2) 147 button:SetPoint('BOTTOMLEFT', units[unit], 'TOPLEFT', buffOffset* BUFF_SIZE, 2)
49 button:Show() 148 button:Show()
50 buffOffset = buffOffset + 1 149 buffOffset = buffOffset + 1
51 else 150 else
52 if buttons[i] then 151 if buttons[i] then
53 buttons[i]:Hide() 152 buttons[i]:Hide()
54 end 153 end
55 end 154 end
56 end 155 end
57 end 156 end
58 157
59 KTplayerFrame.NAME_PLATE_UNIT_ADDED = function(self, event, unit) 158 prototypes.player.NAME_PLATE_UNIT_ADDED = function(self, event, nameplate)
60 print('|cFF008800'..unit) 159 UpdateUnitAnchor(self)
61 if UnitIsUnit('player', unit) then 160 end
62 PLAYER_NAMEPLATE = unit 161 prototypes.player.NAME_PLATE_UNIT_REMOVED = function(self, event, nameplate)
63 self:ClearAllPoints() 162 UpdateUnitAnchor(self)
64 self:SetPoint('TOP', C_NamePlate.GetNamePlateForUnit(unit), 'BOTTOM', 0, 0) 163 end
164
165 prototypes.player.UNIT_HEALTH_FREQUENT = function(self, ...)
166 if UnitHealthMax(self.unit) > 0 then
167 self.healthbar:SetWidth(PLAYER_WIDTH * UnitHealth(self.unit) / UnitHealthMax(self.unit))
168 self.healthtext:SetText(UnitHealth(self.unit))
169 else
170 self.healthbar:SetWidth(PLAYER_WIDTH)
171 self.healthtext:SetText(nil)
65 end 172 end
173 return true
66 end 174 end
67 KTplayerFrame.NAME_PLATE_UNIT_REMOVED = function(self, event, unit) 175
68 if unit == PLAYER_NAMEPLATE then 176 prototypes.player.UNIT_POWER_FREQUENT = function(self)
69 PLAYER_NAMEPLATE = nil 177 if UnitPowerMax(self.unit) > 0 then
70 self:ClearAllPoints() 178 self.powerbar:SetWidth(PLAYER_WIDTH * UnitPower(self.unit) / UnitPowerMax(self.unit))
71 self:SetPoint('LEFT', UIParent, 'LEFT', 25, 0) 179 self.powertext:SetText(UnitPower(self.unit))
180 else
181 self.powerbar:Hide()
182 self.powertext:SetText(nil)
183 end
184 return true
185 end
186
187
188 prototypes.player.UNIT_TARGET = function(self, ...)
189 if not UnitExists(self.unit) then
190 self:Hide()
191 else
192 self:Show()
193 self.handler.refresh(self)
194 UpdateUnitAnchor(self)
72 end 195 end
73 end 196 end
74 197
75 KTplayerFrame.UNIT_HEALTH_FREQUENT = function(self, ...) 198 prototypes.pet = prototypes.player
76 --print(UnitHealth('player') / UnitHealthMax('player')) 199 prototypes.target = prototypes.player
77 self.healthbar:SetWidth(PLAYER_WIDTH * UnitHealth('player') / UnitHealthMax('player'))
78 return true
79 end
80
81 KTplayerFrame.UNIT_POWER_FREQUENT = function(self)
82 self.powerbar:SetWidth(PLAYER_WIDTH * UnitPower('player') / UnitPowerMax('player'))
83 return true
84 end
85
86 KTplayerFrame:SetWidth(PLAYER_WIDTH)
87 KTplayerFrame.variables = function()
88 KTplayerFrame:UNIT_HEALTH_FREQUENT()
89 KTplayerFrame:UNIT_POWER_FREQUENT()
90 end