vrtc / chorus (public) (License: CC0) (since 2023-08-12) (hash sha1)
World of Warcraft add-on stub. The overall goal is to create a specialized raid frame.
List of commits:
Subject Hash Author Date (UTC)
fix!: Toggle frame visibility with unit watch 3ab89d1ee3ae8d2a1afa94610140767b28f12c6a Vladyslav Bondarenko 2023-08-25 18:09:32
feat!: Add target of target or raid target units af78c022d560f964fd38e973491a4e815bf13275 Vladyslav Bondarenko 2023-08-25 18:03:08
fix!: Hidden unit buttons obstruct mouse clicks d746f12ffb2a6e87968c80224cc8a2f5485a4c76 Vladyslav Bondarenko 2023-08-25 13:51:56
feat: Add unit level to huge unit buttons 57c502e2ea48241401428e7de523e2672911b2c6 Vladyslav Bondarenko 2023-08-25 13:13:05
feat!: Add cast bar for huge unit buttons f921c3e2c1417036981f9e7ac9d070d66e4d7d19 Vladyslav Bondarenko 2023-08-25 11:38:37
fix: Add threat and range widgets to large buttons 8956671551dbd110d2f62b482579851f5283a065 Vladyslav Bondarenko 2023-08-25 09:36:02
fix: Filter out irrelevant events for status bars d11036a029bb51458c5bc592baf592463a05f11a Vladyslav Bondarenko 2023-08-25 09:02:07
feat: When group member out of range fade out e1b06d6c96ddceb3aa35ad5cc249671a5c1bf852 Vladyslav Bondarenko 2023-08-25 08:58:53
fix: Add unit tooltip 9b853289a7730a8783f02691c944492e0ef53f86 Vladyslav Bondarenko 2023-08-25 08:15:33
fix: Yet another health bar sanitization 979af69272eec06c45cb300132bc020a91a180c2 Vladyslav Bondarenko 2023-08-24 03:52:05
feat(build): Add stub RocketGit hook b1a0bb523fb570ee7cc73776bfbba1a6886e685f Vladyslav Bondarenko 2023-08-23 23:59:35
feat(build): Add 0.2-1 rockspec 92a2b006a47f1a242bbb08467c431362d64d6ef8 Vladyslav Bondarenko 2023-08-23 23:31:41
fix!: Use native mechanism of inheriting values 6a2ebf1aa52e4a300b4ad959670878b292140c4f Vladyslav Bondarenko 2023-08-23 23:05:39
fix: Typo in unit button template anchor 98027a2779639493c97c4259b61cb53d25709255 Vladyslav Bondarenko 2023-08-23 22:06:16
feat!: Add unit button flavours 21e61a0dbd629d25f458ce1a8dd370da31c6f991 Vladyslav Bondarenko 2023-08-23 21:17:33
fix: Shrink range frame height b73521b13c6a9e5d34b2d425e5d7e9ddcb04f81c Vladyslav Bondarenko 2023-08-23 21:15:28
feat: Hide status bar text on demand 307d97f5afee88e55c6799e4c4390ca8d6e98974 Vladyslav Bondarenko 2023-08-23 21:11:35
feat: Hide auras out of frame bounds cb9ca55fb9dc361500e8b4f4c84320eb7d01b744 Vladyslav Bondarenko 2023-08-23 20:53:30
fix: Add text shadow to unit names 2b7d56c701ad81825a838c9faa818632bf38bfb6 Vladyslav Bondarenko 2023-08-23 17:30:23
fix: Further sanitize health bar 3318dee15eac9b8205e287997800c080b0aaf12d Vladyslav Bondarenko 2023-08-23 14:56:00
Commit 3ab89d1ee3ae8d2a1afa94610140767b28f12c6a - fix!: Toggle frame visibility with unit watch
Use `FrameXML/SecureTemplates.lua:function RegisterUnitWatch` to toggle
frame visibility based on the state of the corresponding unit.
Previously explicit checks in the event triggers (callbacks) were used.
The older approach still resulted in issues at runtime.

Previously, to toggle frame visibility, explicit checks in the event
processors were used. This logic was duplicated among all frames that
were not explicitly descendant from the `SecureActionButtonTemplate`.
This includes helath bars, power bars, unit name, unit level, aura
frame. Despite rigid checks, sometimes at runtime some frames would be
partially updated, look ugly and maybe even present false information to
the user.

Instead, this commit attempts to use mechanism that was natively
provided by the environment for this purpose. That is in addition to the
older explicit checks. Hopefully there will no longer be any malformed
or unexpected states at runtime after this.
Author: Vladyslav Bondarenko
Author date (UTC): 2023-08-25 18:09
Committer name: Vladyslav Bondarenko
Committer date (UTC): 2023-08-25 18:09
Parent(s): af78c022d560f964fd38e973491a4e815bf13275
Signer:
Signing key: EFF9624877D25D02
Signing status: E
Tree: 059398a21e78313910d47236762961e6dd8a618d
File Lines added Lines deleted
etc/luacheckrc.lua 2 0
src/ChorusAuraFrameTemplate.lua 2 0
src/ChorusProgressFrameTemplate.lua 15 2
src/ChorusRaidTargetIconFrameTemplate.lua 2 0
src/ChorusRangeFrameTemplate.lua 2 0
src/ChorusThreatFrameTemplate.lua 2 0
src/ChorusUnitNameFrameTemplate.lua 2 0
File etc/luacheckrc.lua changed (mode: 100644) (index d05139b..b34816e)
... ... stds.wowapi = {
9 9 read_globals = { read_globals = {
10 10 'CreateFrame', 'CreateFrame',
11 11 'GetModifiedClick', 'GetModifiedClick',
12 'GetNumPartyMembers',
12 13 'GetPlayerInfoByGUID', 'GetPlayerInfoByGUID',
13 14 'GetQuestDifficultyColor', 'GetQuestDifficultyColor',
14 15 'GetRaidTargetIndex', 'GetRaidTargetIndex',
 
... ... stds.framexml = {
108 109 'PlayerFrameSpellBar', 'PlayerFrameSpellBar',
109 110 'PowerBarColor', 'PowerBarColor',
110 111 'RAID_CLASS_COLORS', 'RAID_CLASS_COLORS',
112 'RegisterUnitWatch',
111 113 'RuneFrame', 'RuneFrame',
112 114 'SecureButton_GetAttribute', 'SecureButton_GetAttribute',
113 115 'SecureButton_GetUnit', 'SecureButton_GetUnit',
File src/ChorusAuraFrameTemplate.lua changed (mode: 100644) (index 859d2b0..3c55b4b)
... ... function Chorus.auraFrameMain(self)
203 203 self:RegisterEvent('PLAYER_TARGET_CHANGED') self:RegisterEvent('PLAYER_TARGET_CHANGED')
204 204 self:RegisterEvent('UNIT_AURA') self:RegisterEvent('UNIT_AURA')
205 205 self:SetScript('OnEvent', auraFrameEventProcessor) self:SetScript('OnEvent', auraFrameEventProcessor)
206
207 RegisterUnitWatch(self)
206 208 end end
File src/ChorusProgressFrameTemplate.lua changed (mode: 100644) (index 90cc906..2c9b7d1)
... ... local UnitIsGhost = UnitIsGhost
11 11 local UnitPower = UnitPower local UnitPower = UnitPower
12 12 local UnitPowerMax = UnitPowerMax local UnitPowerMax = UnitPowerMax
13 13 local UnitPowerType = UnitPowerType local UnitPowerType = UnitPowerType
14 local RegisterUnitWatch = RegisterUnitWatch
14 15
15 16 local Chorus = Chorus local Chorus = Chorus
16 17
 
... ... local function healthFrameEventProcessor(self, eventCategory, ...)
392 393 assert(strategy == 'UnitClass' or strategy == 'UnitIsFriend') assert(strategy == 'UnitClass' or strategy == 'UnitIsFriend')
393 394
394 395 if 'UnitClass' == strategy then if 'UnitClass' == strategy then
395 applyHealthFrameColorUnitClass(self, unitDesignation)
396 --[[ `function UnitClass` only works for player units. ]]--
397 if UnitIsPlayer(unitDesignation) then
398 applyHealthFrameColorUnitClass(self, unitDesignation)
399 else
400 applyHealthFrameColorUnitIsFriend(self, unitDesignation)
401 end
396 402 elseif 'UnitIsFriend' == strategy then elseif 'UnitIsFriend' == strategy then
397 403 applyHealthFrameColorUnitIsFriend(self, unitDesignation) applyHealthFrameColorUnitIsFriend(self, unitDesignation)
398 404 else else
 
... ... function Chorus.healthFrameMain(self, ...)
537 543 self:SetScript('OnEvent', healthFrameEventProcessor) self:SetScript('OnEvent', healthFrameEventProcessor)
538 544
539 545 self:RegisterEvent('UNIT_HEALTH') self:RegisterEvent('UNIT_HEALTH')
540 --[[ TODO Add health deficit label ]]--
546
547 --[[ When the corresponding unit's state is changed, toggle this
548 frame's visibility with show or hide methods accordingly.]]--
549 RegisterUnitWatch(self)
541 550 end end
542 551
543 552 function Chorus.powerFrameMain(self, ...) function Chorus.powerFrameMain(self, ...)
 
... ... function Chorus.powerFrameMain(self, ...)
551 560 self:RegisterEvent('UNIT_POWER') self:RegisterEvent('UNIT_POWER')
552 561 self:RegisterEvent('UNIT_RAGE') self:RegisterEvent('UNIT_RAGE')
553 562 self:RegisterEvent('UNIT_RUNIC_POWER') self:RegisterEvent('UNIT_RUNIC_POWER')
563
564 --[[ When the corresponding unit's state is changed, toggle this
565 frame's visibility with show or hide methods accordingly.]]--
566 RegisterUnitWatch(self)
554 567 end end
File src/ChorusRaidTargetIconFrameTemplate.lua changed (mode: 100644) (index b34f9f8..444488f)
... ... function Chorus.raidTargetIconFrameMain(self)
53 53 self:RegisterEvent('PLAYER_TARGET_CHANGED') self:RegisterEvent('PLAYER_TARGET_CHANGED')
54 54 self:RegisterEvent('RAID_ROSTER_UPDATE') self:RegisterEvent('RAID_ROSTER_UPDATE')
55 55 self:RegisterEvent('RAID_TARGET_UPDATE') self:RegisterEvent('RAID_TARGET_UPDATE')
56
57 RegisterUnitWatch(self)
56 58 end end
File src/ChorusRangeFrameTemplate.lua changed (mode: 100644) (index c0b358e..2bf35c3)
... ... local function rangeSpellMapFrameMain(self)
162 162 self:RegisterEvent('PLAYER_TALENT_UPDATE') self:RegisterEvent('PLAYER_TALENT_UPDATE')
163 163 self:RegisterEvent('SPELLS_CHANGED') self:RegisterEvent('SPELLS_CHANGED')
164 164 self:SetScript('OnEvent', spellRangeMapUpdate) self:SetScript('OnEvent', spellRangeMapUpdate)
165
166 RegisterUnitWatch(self)
165 167 end end
166 168
167 169 --[[ Hide reference to the internal function, for some reason. ]]-- --[[ Hide reference to the internal function, for some reason. ]]--
File src/ChorusThreatFrameTemplate.lua changed (mode: 100644) (index bf604a4..4b8d18d)
... ... local function threatFrameMain(self)
75 75 self:RegisterEvent('RAID_ROSTER_UPDATE') self:RegisterEvent('RAID_ROSTER_UPDATE')
76 76 self:RegisterEvent('UNIT_THREAT_SITUATION_UPDATE') self:RegisterEvent('UNIT_THREAT_SITUATION_UPDATE')
77 77 self:SetScript('OnEvent', threatFrameEventProcessor) self:SetScript('OnEvent', threatFrameEventProcessor)
78
79 RegisterUnitWatch(self)
78 80 end end
79 81
80 82 Chorus.threatFrameMain = function(...) Chorus.threatFrameMain = function(...)
File src/ChorusUnitNameFrameTemplate.lua changed (mode: 100644) (index ff0d56d..51cb554)
... ... function Chorus.unitNameFrameMain(self)
80 80 self:RegisterEvent('PLAYER_TARGET_CHANGED') self:RegisterEvent('PLAYER_TARGET_CHANGED')
81 81 self:RegisterEvent('RAID_ROSTER_UPDATE') self:RegisterEvent('RAID_ROSTER_UPDATE')
82 82 self:RegisterEvent('UNIT_NAME_UPDATE') self:RegisterEvent('UNIT_NAME_UPDATE')
83
84 RegisterUnitWatch(self)
83 85 end end
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/vrtc/chorus

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/vrtc/chorus

Clone this repository using git:
git clone git://git.rocketgit.com/user/vrtc/chorus

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main