| Nenue@6 | 1 --- Turok Raid/Raid.lua | 
| Nenue@6 | 2 -- @file-author@ | 
| Nenue@6 | 3 -- @project-revision@ @project-hash@ | 
| Nenue@6 | 4 -- @file-revision@ @file-hash@ | 
| Nenue@6 | 5 --- Defines the interfaces for raid tools | 
| Nenue@6 | 6 local T = Turok | 
| Nenue@6 | 7 local mod = T:NewModule('RaidReady') | 
| Nenue@6 | 8 mod.OnInitialize = function(self) | 
| Nenue@6 | 9   self.db = TurokData.Lost | 
| Nenue@6 | 10   self.events = { | 
| Nenue@6 | 11     PARTY_MEMBERS_CHANGED = self.MembersChangedEvent, | 
| Nenue@6 | 12     PLAYER_SPECIALIZATION_CHANGED = self.SpecChangeEvent, | 
| Nenue@6 | 13     ENCOUNTER_START = self.EncounterStart, | 
| Nenue@6 | 14     UNIT_AURA = self.UnitAura | 
| Nenue@6 | 15   } | 
| Nenue@6 | 16 end | 
| Nenue@6 | 17 | 
| Nenue@6 | 18 T.defaults.Lost = { | 
| Nenue@6 | 19   parent = 'UIParent', | 
| Nenue@6 | 20   anchor = 'BOTTOMRIGHT', anchorTo = 'BOTTOMRIGHT', | 
| Nenue@6 | 21   x = -300, y = 300, | 
| Nenue@6 | 22   height = 24*9, width = 72, | 
| Nenue@6 | 23   width = 72, | 
| Nenue@6 | 24   height = 24, | 
| Nenue@6 | 25   size = 11, | 
| Nenue@6 | 26   font = "Interface\\Addons\\Turok\\Media\\font\\ArchivoNarrow-Bold.ttf", | 
| Nenue@6 | 27 | 
| Nenue@6 | 28   raidbuff = { | 
| Nenue@6 | 29     icon = {}, | 
| Nenue@6 | 30     status = {}, | 
| Nenue@6 | 31   }, | 
| Nenue@6 | 32 | 
| Nenue@6 | 33   durability = { | 
| Nenue@6 | 34 | 
| Nenue@6 | 35   }, | 
| Nenue@6 | 36 | 
| Nenue@6 | 37   toast = { | 
| Nenue@6 | 38 | 
| Nenue@6 | 39   }, | 
| Nenue@6 | 40 } | 
| Nenue@6 | 41 local _G = _G | 
| Nenue@6 | 42 local print = function(...) if Devian and DevianDB.workspace~= 1 then print('RaidInfo', ...) end end | 
| Nenue@6 | 43 local CreateFrame, floor, GetRaidBuffTrayAuraInfo, NUM_LE_RAID_BUFF_TYPES = CreateFrame, math.floor, GetRaidBuffTrayAuraInfo, NUM_LE_RAID_BUFF_TYPES | 
| Nenue@6 | 44 local GetSpecialization, GetSpecializationInfo, GetSpecializationInfoByID = GetSpecialization, GetSpecializationInfo, GetSpecializationInfoByID | 
| Nenue@6 | 45 local IsInRaid, IsInGroup, GetInspectSpecialization = IsInRaid, IsInGroup, GetInspectSpecialization | 
| Nenue@6 | 46 local find, match, sub = string.find, string.match, string.sub | 
| Nenue@6 | 47 local GetRealmName, GetRaidRosterInfo, UnitGUID = GetRealmName, GetRaidRosterInfo, UnitGUID | 
| Nenue@6 | 48 local db | 
| Nenue@6 | 49 | 
| Nenue@6 | 50 function mod:OnEnable() | 
| Nenue@6 | 51   db = self.db | 
| Nenue@6 | 52 | 
| Nenue@6 | 53   self.raidbuffs = {} -- active raid buffs | 
| Nenue@6 | 54   self.buffinfo = {}   -- raid buff text | 
| Nenue@6 | 55   self.available = {}  -- availability info | 
| Nenue@6 | 56   self.units_raid = {} | 
| Nenue@6 | 57 | 
| Nenue@6 | 58   self.raidbuffs_tray = _G.TurokRaidbuffsTray | 
| Nenue@6 | 59 | 
| Nenue@6 | 60   -- seed raid buff analyzer assets | 
| Nenue@6 | 61   self.num_raidbuff_columns = floor(db.raidbuff.width / db.raidbuff.icon.width) | 
| Nenue@6 | 62   for i = 1, 9 do | 
| Nenue@6 | 63     --print('TurokRaidbuffButton'..i, self.raidbuffs_tray, 'TurokRaidbuffButton') | 
| Nenue@6 | 64     local buff = CreateFrame('Button', 'TurokRaidbuffButton'..i, self.raidbuffs_tray, 'TurokRaidbuffButton') | 
| Nenue@6 | 65 | 
| Nenue@6 | 66     -- T.SetFrameLayout(buff, db.raidbuff) | 
| Nenue@6 | 67   end | 
| Nenue@6 | 68 | 
| Nenue@6 | 69   db.raidevent = {} | 
| Nenue@6 | 70 | 
| Nenue@6 | 71 | 
| Nenue@6 | 72 | 
| Nenue@6 | 73 | 
| Nenue@6 | 74 end | 
| Nenue@6 | 75 | 
| Nenue@6 | 76 function mod:PLAYER_SPECIALIZATION_CHANGED(e, unit) | 
| Nenue@6 | 77   local specID | 
| Nenue@6 | 78   --print(e, unit) | 
| Nenue@6 | 79   if unit == 'player' then | 
| Nenue@6 | 80     specID = GetSpecializationInfo(GetSpecialization()) | 
| Nenue@6 | 81   else | 
| Nenue@6 | 82     --NotifyInspect(unit) | 
| Nenue@6 | 83     specID = GetInspectSpecialization() | 
| Nenue@6 | 84   end | 
| Nenue@6 | 85   if specID then | 
| Nenue@6 | 86     --print(GetSpecializationInfoByID(specID)) | 
| Nenue@6 | 87   end | 
| Nenue@6 | 88 end | 
| Nenue@6 | 89 | 
| Nenue@6 | 90 function mod:PARTY_MEMBERS_CHANGED(e, ...) | 
| Nenue@6 | 91   if IsInRaid() or IsInGroup() then | 
| Nenue@6 | 92     self.raidbuffs_frame:Show() | 
| Nenue@6 | 93     self:RaidBuffScan() | 
| Nenue@6 | 94   else | 
| Nenue@6 | 95   end | 
| Nenue@6 | 96 end | 
| Nenue@6 | 97 | 
| Nenue@6 | 98 function mod:ENCOUNTER_START(e,...) | 
| Nenue@6 | 99   --print(e,...) | 
| Nenue@6 | 100 end | 
| Nenue@6 | 101 | 
| Nenue@6 | 102 -- Updates available raid/party buffs | 
| Nenue@6 | 103 function mod:RaidbuffsUpdate(unit) | 
| Nenue@6 | 104   if not (IsInGroup() or IsInRaid()) then | 
| Nenue@6 | 105     self.raidbuffs_tray:Hide() | 
| Nenue@6 | 106     return | 
| Nenue@6 | 107   end | 
| Nenue@6 | 108 | 
| Nenue@6 | 109   local c = db.raidbuff | 
| Nenue@6 | 110   local k = 0 | 
| Nenue@6 | 111   for i = 1, NUM_LE_RAID_BUFF_TYPES do | 
| Nenue@6 | 112 | 
| Nenue@6 | 113     local rb = self.raidbuffs[i] | 
| Nenue@6 | 114     local buff = {GetRaidBuffTrayAuraInfo(i) } | 
| Nenue@6 | 115     --name, rank, texture, duration, expiration, spellId, slot | 
| Nenue@6 | 116     local isShown = false | 
| Nenue@6 | 117     if buff[1] then | 
| Nenue@6 | 118       isShown = true | 
| Nenue@6 | 119       self.raidbuffs[i] = buff | 
| Nenue@6 | 120     else | 
| Nenue@6 | 121       self.raidbuffs[i] = nil | 
| Nenue@6 | 122     end | 
| Nenue@6 | 123 | 
| Nenue@6 | 124     if isShown then | 
| Nenue@6 | 125         rb:Show() | 
| Nenue@6 | 126         rb.bufftype:SetText(sub(_G['RAID_BUFF_'..i],0,2)) | 
| Nenue@6 | 127         rb.spellname:SetText(self.buffinfo[i]) | 
| Nenue@6 | 128 | 
| Nenue@6 | 129         local pn = k                                     -- need (n-1) for lua grid math | 
| Nenue@6 | 130         local py = floor(pn / self.num_raidbuff_columns) * c.height | 
| Nenue@6 | 131         local px = (pn * c.width) % db.width      -- x-offset | 
| Nenue@6 | 132         --print('buff slot '..i..' (draw position '..k..')', pn, py, px) | 
| Nenue@6 | 133         rb:SetPoint(c.anchor, self.raidbuffs_tray, c.anchor, px, py) | 
| Nenue@6 | 134 | 
| Nenue@6 | 135         k = k + 1 | 
| Nenue@6 | 136       end | 
| Nenue@6 | 137   end | 
| Nenue@6 | 138   if k == 0 and self.raidbuffs_tray:IsVisible() then | 
| Nenue@6 | 139     self.raidbuffs_tray:Hide() | 
| Nenue@6 | 140   elseif not self.raidbuffs_tray:IsVisible() then | 
| Nenue@6 | 141     self.raidbuffs_tray:Show() | 
| Nenue@6 | 142   end | 
| Nenue@6 | 143 end | 
| Nenue@6 | 144 | 
| Nenue@6 | 145 function mod:RosterScan() | 
| Nenue@6 | 146   local lim = 1 | 
| Nenue@6 | 147   if IsInRaid() then | 
| Nenue@6 | 148     lim = 40 | 
| Nenue@6 | 149   elseif IsInGroup() then | 
| Nenue@6 | 150     lim = 5 | 
| Nenue@6 | 151   end | 
| Nenue@6 | 152 end |