Mercurial > wow > turok
comparison Tek.lua @ 4:8ace773d6bfc
suppress castbar latency logic on non-player units
| author | Nenue |
|---|---|
| date | Tue, 15 Dec 2015 10:09:20 -0500 |
| parents | 766d8a40a1d6 |
| children |
comparison
equal
deleted
inserted
replaced
| 3:9de4a810fda7 | 4:8ace773d6bfc |
|---|---|
| 1 addon, T_ = ... | 1 addon, T_ = ... |
| 2 -- User: Krakyn | 2 -- User: Krakyn |
| 3 -- Created: 12/4/2015 11:17 PM | 3 -- Created: 12/4/2015 11:17 PM |
| 4 local T = LibStub("AceAddon-3.0"):GetAddon("Turok") | 4 local T = LibStub("AceAddon-3.0"):GetAddon("Turok") |
| 5 local db = T.db | |
| 5 local TL = 'Tek' | 6 local TL = 'Tek' |
| 6 local mod = T:NewModule("Tek") | 7 local mod = T:NewModule("Tek") |
| 7 local print = function(...) | 8 local print = function(...) |
| 8 _G.print('Tek', ...) | 9 _G.print('Tek', ...) |
| 9 end | 10 end |
| 12 -- events & units | 13 -- events & units |
| 13 local TRACKED_UNITS = {'player', 'target', 'focus', 'pet'} | 14 local TRACKED_UNITS = {'player', 'target', 'focus', 'pet'} |
| 14 local TRACKED_EVENTS = {'UNIT_SPELLCAST_START', 'UNIT_SPELLCAST_DELAYED', 'UNIT_SPELLCAST_STOP', 'UNIT_SPELLCAST_FAILED', 'UNIT_SPELLCAST_FAILED_QUIET', | 15 local TRACKED_EVENTS = {'UNIT_SPELLCAST_START', 'UNIT_SPELLCAST_DELAYED', 'UNIT_SPELLCAST_STOP', 'UNIT_SPELLCAST_FAILED', 'UNIT_SPELLCAST_FAILED_QUIET', |
| 15 'UNIT_SPELLCAST_INTERRUPTED', 'UNIT_SPELLCAST_SUCCEEDED', 'UNIT_SPELLCAST_CHANNEL_START', 'UNIT_SPELLCAST_CHANNEL_STOP', 'UNIT_SPELLCAST_CHANNEL_UPDATE' } | 16 'UNIT_SPELLCAST_INTERRUPTED', 'UNIT_SPELLCAST_SUCCEEDED', 'UNIT_SPELLCAST_CHANNEL_START', 'UNIT_SPELLCAST_CHANNEL_STOP', 'UNIT_SPELLCAST_CHANNEL_UPDATE' } |
| 16 | 17 |
| 17 local FADE_OUT_TIME, FADE_IN_TIME = 1000, 200 -- animation timings | 18 -- animations are a little different here |
| 19 local FADE_OUT_TIME, FADE_IN_TIME = 1000, 200 | |
| 18 | 20 |
| 19 -- values MUST be in chronological order | 21 -- values MUST be in chronological order |
| 20 local CHANNEL_START, CAST_START, CAST_INTERRUPTED, CAST_SUCCEEDED, CAST_STOPPED, CAST_FAILED, CHANNEL_STOPPED = 1, 2, 3, 4, 5, 6, 7 | 22 local CHANNEL_START, CAST_START, CAST_INTERRUPTED, CAST_SUCCEEDED, CAST_STOPPED, CAST_FAILED, CHANNEL_STOPPED = 1, 2, 3, 4, 5, 6, 7 |
| 21 local TEXTURE_SUFFIX = { | 23 local TEXTURE_SUFFIX = { |
| 22 [CHANNEL_START] = '_channeling', | 24 [CHANNEL_START] = '_channeling', |
| 25 [CAST_SUCCEEDED] = '_finished', | 27 [CAST_SUCCEEDED] = '_finished', |
| 26 [CAST_STOPPED] = '_failed', | 28 [CAST_STOPPED] = '_failed', |
| 27 [CAST_FAILED] = '_failed', | 29 [CAST_FAILED] = '_failed', |
| 28 [CHANNEL_STOPPED] = '' | 30 [CHANNEL_STOPPED] = '' |
| 29 } | 31 } |
| 32 | |
| 33 -- defaults | |
| 34 db.castbar = { | |
| 35 --T.defaults.castbar = { | |
| 36 width = 300, height = 24, | |
| 37 anchor = 'CENTER', parent = 'UIParent', anchorTo = 'CENTER', | |
| 38 posX = 0, posY = 0, | |
| 39 foreground_casting = {0.80784313725, 0.87843137254, 0.0156862745, 1}, | |
| 40 background_casting = {0,0,0,0.4}, | |
| 41 background_interrupted = {1,0,0,1}, | |
| 42 background_failed = {0.60784313725, 0.87843137254, 0.0156862745, 1}, | |
| 43 foreground_interrupted = {1, 0.5, 0, 1}, | |
| 44 foreground_failed = {0,0,0,1}, | |
| 45 foreground_finished = {0.60784313725, 0.87843137254, 0.0156862745, 1}, | |
| 46 background_finished = {0.60784313725, 0.87843137254, 0.0156862745, 1}, | |
| 47 foreground_inset = -1, | |
| 48 fill_direction = 'RIGHT', | |
| 49 fill_inverse = false, | |
| 50 glow_texture = "Tooltip-BigBorder", | |
| 51 glow_size = 2, | |
| 52 spark_texture = "Tooltip-BigBorder", | |
| 53 spark_size = 2, | |
| 54 ['player'] = { | |
| 55 width = 400, height = 36, | |
| 56 anchor = 'TOP', parent = 'TkFocusBar', anchorTo = 'BOTTOM', | |
| 57 posX = 0, posY = 2, | |
| 58 }, | |
| 59 ['target'] = { | |
| 60 width = 400, height = 36, | |
| 61 anchor = 'BOTTOMLEFT', parent = 'TkplayerCastBar', anchorTo = 'TOPRIGHT', | |
| 62 posX = -30, posY = 4, | |
| 63 }, | |
| 64 ['focus'] = { | |
| 65 width = 200, height = 36, | |
| 66 anchor = 'TOPLEFT', parent = 'TkplayerCastBar', anchorTo='BOTTOMRIGHT', | |
| 67 posX = 2, posY = -2 | |
| 68 }, | |
| 69 ['pet'] = { | |
| 70 width = 300, height = 24, | |
| 71 anchor = 'TOPRIGHT', parent = 'TkFocusBar', anchorTo='TOPLEFT', | |
| 72 posX = -2, posY = 0 | |
| 73 }, | |
| 74 } | |
| 75 | |
| 30 local inv = T.anchor_inverse | 76 local inv = T.anchor_inverse |
| 31 local d = T.direction_coord | 77 local d = T.direction_coord |
| 32 local a = T.anchor_direction | 78 local a = T.anchor_direction |
| 33 local c = {} | 79 local c = {} |
| 34 -- c[unit]=nil is used by frame update, thus any indexing from a valid frame is implied to be for new casting info | 80 -- c[unit]=nil is used by frame update, thus any indexing from a valid frame is implied to be for new casting info |
| 40 }) | 86 }) |
| 41 | 87 |
| 42 function mod:OnEnable() | 88 function mod:OnEnable() |
| 43 local db = T.db | 89 local db = T.db |
| 44 | 90 |
| 45 db.castbar = { | |
| 46 --T.defaults.castbar = { | |
| 47 width = 300, height = 24, | |
| 48 anchor = 'TOP', parent = 'TkFocusBar', anchorTo = 'BOTTOM', | |
| 49 posX = 0, posY = -2, | |
| 50 foreground_casting = {0.80784313725, 0.87843137254, 0.0156862745, 1}, | |
| 51 background_casting = {0,0,0,0.4}, | |
| 52 background_interrupted = {1,0,0,1}, | |
| 53 background_failed = {0.60784313725, 0.87843137254, 0.0156862745, 1}, | |
| 54 foreground_interrupted = {1, 0.5, 0, 1}, | |
| 55 foreground_failed = {0,0,0,1}, | |
| 56 foreground_finished = {0.60784313725, 0.87843137254, 0.0156862745, 1}, | |
| 57 background_finished = {0.60784313725, 0.87843137254, 0.0156862745, 1}, | |
| 58 foreground_inset = -1, | |
| 59 fill_direction = 'RIGHT', | |
| 60 fill_inverse = false, | |
| 61 glow_texture = "Tooltip-BigBorder", | |
| 62 glow_size = 2, | |
| 63 spark_texture = "Tooltip-BigBorder", | |
| 64 spark_size = 2, | |
| 65 ['player'] = {}, | |
| 66 ['target'] = { | |
| 67 width = 300, height = 24, | |
| 68 anchor = 'BOTTOMLEFT', parent = 'TkplayerCastBar', anchorTo = 'TOPRIGHT', | |
| 69 posX = 4, posY = 4, | |
| 70 }, | |
| 71 ['focus'] = { | |
| 72 width = 300, height = 24, | |
| 73 anchor = 'TOPLEFT', parent = 'TkplayerCastBar', anchorTo='BOTTOMRIGHT', | |
| 74 posX = 2, posY = -2 | |
| 75 }, | |
| 76 ['pet'] = { | |
| 77 width = 300, height = 24, | |
| 78 anchor = 'TOPRIGHT', parent = 'TkFocusBar', anchorTo='TOPLEFT', | |
| 79 posX = -2, posY = 0 | |
| 80 }, | |
| 81 } | |
| 82 | |
| 83 self.casting = c | 91 self.casting = c |
| 84 self.castbar = {} | 92 self.castbar = {} |
| 85 | 93 |
| 86 | 94 |
| 87 for _, unit in pairs(TRACKED_UNITS) do | 95 for _, unit in pairs(TRACKED_UNITS) do |
| 99 pc:Hide() | 107 pc:Hide() |
| 100 pc:SetAlpha(0) | 108 pc:SetAlpha(0) |
| 101 | 109 |
| 102 T:AddLabel(pc, cdb, 'spelltext') | 110 T:AddLabel(pc, cdb, 'spelltext') |
| 103 local casttime = T:AddLabel(pc, cdb, 'casttime') | 111 local casttime = T:AddLabel(pc, cdb, 'casttime') |
| 104 local latency = T:AddLabel(pc, cdb, 'latency') | |
| 105 pc.foreground:SetWidth(0) | 112 pc.foreground:SetWidth(0) |
| 106 | 113 |
| 107 casttime:SetPoint('RIGHT', pc, 'RIGHT') | 114 casttime:SetPoint('RIGHT', pc, 'RIGHT') |
| 108 casttime:SetJustifyH('RIGHT') | 115 casttime:SetJustifyH('RIGHT') |
| 109 latency:SetPoint('TOPRIGHT', pc.casttime, 'BOTTOMRIGHT') | 116 |
| 110 latency:SetJustifyH('RIGHT') | 117 if unit == 'player' then |
| 118 local lb = pc:CreateTexture('latency', 'OVERLAY') | |
| 119 local lt = T:AddLabel(pc, cdb, 'latency') | |
| 120 lt:SetPoint('TOPRIGHT', pc.casttime, 'BOTTOMRIGHT') | |
| 121 lt:SetJustifyH('RIGHT') | |
| 122 pc.latency = lb | |
| 123 lb.text = lt | |
| 124 end | |
| 111 | 125 |
| 112 pc.transpt = a[cdb.fill_direction] | 126 pc.transpt = a[cdb.fill_direction] |
| 113 pc.xtrans = function() return math.min((cdb.width + cdb.foreground_inset) * pc.percent * d[pc.transpt][1], cdb.width) end | 127 pc.xtrans = function() return math.min((cdb.width + cdb.foreground_inset) * pc.percent * d[pc.transpt][1], cdb.width) end |
| 114 pc.ytrans = function() return math.min((cdb.height + cdb.foreground_inset) * pc.percent * d[pc.transpt][2], cdb.height) end | 128 pc.ytrans = function() return math.min((cdb.height + cdb.foreground_inset) * pc.percent * d[pc.transpt][2], cdb.height) end |
| 115 | 129 |
| 129 icon:SetTexture(0,0,0,1) | 143 icon:SetTexture(0,0,0,1) |
| 130 pc.icon = icon | 144 pc.icon = icon |
| 131 | 145 |
| 132 pc.unit = unit | 146 pc.unit = unit |
| 133 T:Bar_SetUpdateHandler(pc, self.TekUpdate) | 147 T:Bar_SetUpdateHandler(pc, self.TekUpdate) |
| 134 | |
| 135 | |
| 136 | |
| 137 --print('created', fn) | |
| 138 end | 148 end |
| 139 | 149 |
| 140 -- Casting table events | 150 -- Casting table events |
| 141 for i, event in pairs(TRACKED_EVENTS) do | 151 for i, event in pairs(TRACKED_EVENTS) do |
| 142 print('listening to |cFF00FFFF' .. event .. '|r') | 152 print('listening to |cFF00FFFF' .. event .. '|r') |
| 145 | 155 |
| 146 -- Extra events | 156 -- Extra events |
| 147 self:RegisterEvent('PLAYER_TARGET_CHANGED') | 157 self:RegisterEvent('PLAYER_TARGET_CHANGED') |
| 148 self:RegisterEvent('PLAYER_FOCUS_CHANGED') | 158 self:RegisterEvent('PLAYER_FOCUS_CHANGED') |
| 149 | 159 |
| 160 -- kill default casting bar | |
| 161 -- T.cbscripts = {CastingBarFrame:GetScript('OnUpdate'), CastingBarFrame:GetScript('OnEvent')} | |
| 150 CastingBarFrame:SetScript('OnUpdate', nil) | 162 CastingBarFrame:SetScript('OnUpdate', nil) |
| 151 CastingBarFrame:SetScript('OnEvent', nil) | 163 CastingBarFrame:SetScript('OnEvent', nil) |
| 152 CastingBarFrame:Hide() | 164 CastingBarFrame:Hide() |
| 153 end | 165 end |
| 154 | 166 |
| 174 -- start = true whenever a new spell cast could be active (i.e. target switching) | 186 -- start = true whenever a new spell cast could be active (i.e. target switching) |
| 175 if s.init then | 187 if s.init then |
| 176 print('|cFFDD77DD'..u..'|r init_cast (spell='..s.displayName..', startTime='..s.startTime..', endTime='..s.endTime..', channel=',s.channel,')') | 188 print('|cFFDD77DD'..u..'|r init_cast (spell='..s.displayName..', startTime='..s.startTime..', endTime='..s.endTime..', channel=',s.channel,')') |
| 177 print(self:GetName(), self:IsVisible(), self:IsShown()) | 189 print(self:GetName(), self:IsVisible(), self:IsShown()) |
| 178 | 190 |
| 191 if u == 'player' then | |
| 192 self.latency.text:SetText(s.latency) | |
| 193 end | |
| 194 | |
| 179 -- update translation point | 195 -- update translation point |
| 180 if s.casting == CHANNEL_START and not cdb.fill_inverse then | 196 if s.casting == CHANNEL_START and not cdb.fill_inverse then |
| 181 self.transpt = inv[a[cdb.fill_direction]] | 197 self.transpt = inv[a[cdb.fill_direction]] |
| 182 else | 198 else |
| 183 self.transpt = a[cdb.fill_direction] | 199 self.transpt = a[cdb.fill_direction] |
| 187 foreground:SetTexture(unpack(cdb['foreground' .. TEXTURE_SUFFIX[s.casting]] and cdb['foreground' .. TEXTURE_SUFFIX[s.casting]] or cdb.foreground_color)) | 203 foreground:SetTexture(unpack(cdb['foreground' .. TEXTURE_SUFFIX[s.casting]] and cdb['foreground' .. TEXTURE_SUFFIX[s.casting]] or cdb.foreground_color)) |
| 188 background:SetTexture(unpack(cdb['background' .. TEXTURE_SUFFIX[s.casting]] and cdb['background' .. TEXTURE_SUFFIX[s.casting]] or cdb.background_color)) | 204 background:SetTexture(unpack(cdb['background' .. TEXTURE_SUFFIX[s.casting]] and cdb['background' .. TEXTURE_SUFFIX[s.casting]] or cdb.background_color)) |
| 189 | 205 |
| 190 self.icon:SetTexture(s.texture) | 206 self.icon:SetTexture(s.texture) |
| 191 spelltext:SetText(s.displayName) | 207 spelltext:SetText(s.displayName) |
| 192 latency:SetText(s.latency) | |
| 193 self.duration = s.endTime - s.startTime | 208 self.duration = s.endTime - s.startTime |
| 194 self.fadeIn = s.startTime + (1-alpha) * FADE_IN_TIME | 209 self.fadeIn = s.startTime + (1-alpha) * FADE_IN_TIME |
| 195 self.fadeOut = s.endTime + FADE_OUT_TIME -- needs to exist for target changes | 210 self.fadeOut = s.endTime + FADE_OUT_TIME -- needs to exist for target changes |
| 196 | 211 |
| 197 print(s.startTime, self.fadeIn, self.fadeIn - s.startTime) | 212 print(s.startTime, self.fadeIn, self.fadeIn - s.startTime) |
| 230 alpha = 0 | 245 alpha = 0 |
| 231 self:Hide() | 246 self:Hide() |
| 232 self:SetAlpha(alpha) | 247 self:SetAlpha(alpha) |
| 233 self.casttime:SetText(nil) | 248 self.casttime:SetText(nil) |
| 234 self.spelltext:SetText(nil) | 249 self.spelltext:SetText(nil) |
| 235 self.latency:SetText(nil) | |
| 236 self.debugged = false | 250 self.debugged = false |
| 237 self.percent = 0 | 251 self.percent = 0 |
| 252 if u == 'player' then | |
| 253 self.latency.text:SetText(nil) | |
| 254 end | |
| 238 mod.casting[self.unit] = nil | 255 mod.casting[self.unit] = nil |
| 239 print('|cFFDD77DD'..u..'|r work complete, hiding...') | 256 print('|cFFDD77DD'..u..'|r work complete, hiding...') |
| 240 end | 257 end |
| 241 -- hide and wait until we're pulled out again | 258 -- hide and wait until we're pulled out again |
| 242 end | 259 end |
| 328 c[unit].fade = true | 345 c[unit].fade = true |
| 329 end | 346 end |
| 330 | 347 |
| 331 function mod:UNIT_SPELLCAST_SUCCEEDED(e, unit, spellname, rank, castID, target) -- Server says: they stopped because they're done | 348 function mod:UNIT_SPELLCAST_SUCCEEDED(e, unit, spellname, rank, castID, target) -- Server says: they stopped because they're done |
| 332 | 349 |
| 333 if c[unit].castID == castID and c[unit].casting ~= CHANNEL_START then | 350 if c[unit].castID == castID and c[unit].casting ~= CHANNEL_START then |
| 334 c[unit].casting = CAST_SUCCEEDED | 351 c[unit].casting = CAST_SUCCEEDED |
| 335 c[unit].fade = true | 352 c[unit].fade = true |
| 336 end | 353 end |
| 337 end | 354 end |
| 338 | 355 |
