| 
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 |