From e8913d3ab8c103c1f4a382706f084191182f5ff7 Mon Sep 17 00:00:00 2001 From: 4n0n <4n0n@tinkr.site> Date: Thu, 3 Aug 2023 09:08:02 -0500 Subject: [PATCH 1/3] Spellbook get list --- src/SpellBook/SpellBook.lua | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/SpellBook/SpellBook.lua b/src/SpellBook/SpellBook.lua index c99fc8f..52119b8 100644 --- a/src/SpellBook/SpellBook.lua +++ b/src/SpellBook/SpellBook.lua @@ -27,13 +27,24 @@ end ---@return Spell, ... Spell function SpellBook:GetSpells(...) local spells = {} - for _, id in ipairs({ ... }) do + for _, id in ipairs({...}) do table.insert(spells, self:GetSpell(id)) end return unpack(spells) end +---@param ... number[] +---@return List +function SpellBook:GetList(...) + local spells = {} + for _, id in ipairs({...}) do + table.insert(spells, self:GetSpell(id)) + end + + return Bastion.List:New(spells) +end + ---@param name string ---@return Spell function SpellBook:GetSpellByName(name) From a99e71dd8e1c6f2f62b6790fe0cef7be3d05d794 Mon Sep 17 00:00:00 2001 From: 4n0n <4n0n@tinkr.site> Date: Thu, 3 Aug 2023 09:25:44 -0500 Subject: [PATCH 2/3] Aura table updates --- src/AuraTable/AuraTable.lua | 135 ++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) diff --git a/src/AuraTable/AuraTable.lua b/src/AuraTable/AuraTable.lua index 2eceb38..2959fb9 100644 --- a/src/AuraTable/AuraTable.lua +++ b/src/AuraTable/AuraTable.lua @@ -437,6 +437,141 @@ function AuraTable:FindAnyFrom(spells, source) end, Bastion.Aura:New()) end +-- FindLongestOf +---@param spells List +---@return Aura +function AuraTable:FindLongestOf(spells) + return spells:reduce(function(acc, cur) + local aura = self:Find(cur) + if aura:IsValid() then + if aura:GetRemainingTime() > acc:GetRemainingTime() then + return aura + end + end + return acc + end, Bastion.Aura:New()) +end + +-- FindLongestOfMy +---@param spells List +---@return Aura +function AuraTable:FindLongestOfMy(spells) + return spells:reduce(function(acc, cur) + local aura = self:FindMy(cur) + if aura:IsValid() then + print(aura:GetRemainingTime(), acc:GetRemainingTime()) + if aura:GetRemainingTime() > acc:GetRemainingTime() then + return aura + end + end + return acc + end, Bastion.Aura:New()) +end + +-- FindLongestOfTheirs +---@param spells List +---@return Aura +function AuraTable:FindLongestOfTheirs(spells) + return spells:reduce(function(acc, cur) + local aura = self:FindTheirs(cur) + if aura:IsValid() then + if aura:GetRemainingTime() > acc:GetRemainingTime() then + return aura + end + end + return acc + end, Bastion.Aura:New()) +end + +-- FindLongestOfFrom +---@param spells List +---@param source Unit +---@return Aura +function AuraTable:FindLongestOfFrom(spells, source) + return spells:reduce(function(acc, cur) + local aura = self:FindFrom(cur, source) + if aura:IsValid() then + if aura:GetRemainingTime() > acc:GetRemainingTime() then + return aura + end + end + return acc + end, Bastion.Aura:New()) +end + +-- FindShortestOf +---@param spells List +---@return Aura +function AuraTable:FindShortestOf(spells) + return spells:reduce(function(acc, cur) + local aura = self:Find(cur) + if aura:IsValid() then + if not acc:IsValid() then + return aura + end + if aura:GetRemainingTime() < acc:GetRemainingTime() then + return aura + end + end + return acc + end, Bastion.Aura:New()) +end + +-- FindShortestOfMy +---@param spells List +---@return Aura +function AuraTable:FindShortestOfMy(spells) + return spells:reduce(function(acc, cur) + local aura = self:FindMy(cur) + if aura:IsValid() then + if not acc:IsValid() then + return aura + end + if aura:GetRemainingTime() < acc:GetRemainingTime() then + return aura + end + end + return acc + end, Bastion.Aura:New()) +end + +-- FindShortestOfTheirs +---@param spells List +---@return Aura +function AuraTable:FindShortestOfTheirs(spells) + return spells:reduce(function(acc, cur) + local aura = self:FindTheirs(cur) + if aura:IsValid() then + if not acc:IsValid() then + return aura + end + if aura:GetRemainingTime() < acc:GetRemainingTime() then + return aura + end + end + return acc + end, Bastion.Aura:New()) +end + +-- FindShortestOfFrom +---@param spells List +---@param source Unit +---@return Aura +function AuraTable:FindShortestOfFrom(spells, source) + return spells:reduce(function(acc, cur) + local aura = self:FindFrom(cur, source) + if aura:IsValid() then + if not acc:IsValid() then + return aura + end + if aura:GetRemainingTime() < acc:GetRemainingTime() then + return aura + end + end + return acc + end, Bastion.Aura:New()) +end + -- Has any stealable aura ---@return boolean function AuraTable:HasAnyStealableAura() From febee39182925948a8d45e66e4f7413adfa7567c Mon Sep 17 00:00:00 2001 From: 4n0n <4n0n@tinkr.site> Date: Thu, 3 Aug 2023 11:11:44 -0500 Subject: [PATCH 3/3] Add highest/leastof functions to auratable, remove print --- src/AuraTable/AuraTable.lua | 159 +++++++++++++++++++++++++++++++++++- 1 file changed, 158 insertions(+), 1 deletion(-) diff --git a/src/AuraTable/AuraTable.lua b/src/AuraTable/AuraTable.lua index 2959fb9..b7e7a2c 100644 --- a/src/AuraTable/AuraTable.lua +++ b/src/AuraTable/AuraTable.lua @@ -444,6 +444,9 @@ function AuraTable:FindLongestOf(spells) return spells:reduce(function(acc, cur) local aura = self:Find(cur) if aura:IsValid() then + if not acc:IsValid() then + return aura + end if aura:GetRemainingTime() > acc:GetRemainingTime() then return aura end @@ -459,7 +462,9 @@ function AuraTable:FindLongestOfMy(spells) return spells:reduce(function(acc, cur) local aura = self:FindMy(cur) if aura:IsValid() then - print(aura:GetRemainingTime(), acc:GetRemainingTime()) + if not acc:IsValid() then + return aura + end if aura:GetRemainingTime() > acc:GetRemainingTime() then return aura end @@ -475,6 +480,9 @@ function AuraTable:FindLongestOfTheirs(spells) return spells:reduce(function(acc, cur) local aura = self:FindTheirs(cur) if aura:IsValid() then + if not acc:IsValid() then + return aura + end if aura:GetRemainingTime() > acc:GetRemainingTime() then return aura end @@ -491,6 +499,9 @@ function AuraTable:FindLongestOfFrom(spells, source) return spells:reduce(function(acc, cur) local aura = self:FindFrom(cur, source) if aura:IsValid() then + if not acc:IsValid() then + return aura + end if aura:GetRemainingTime() > acc:GetRemainingTime() then return aura end @@ -572,6 +583,152 @@ function AuraTable:FindShortestOfFrom(spells, source) end, Bastion.Aura:New()) end +-- FindMostOf +---@param spells List +---@return Aura +function AuraTable:FindMostOf(spells) + return spells:reduce(function(acc, cur) + local aura = self:Find(cur) + if aura:IsValid() then + if not acc:IsValid() then + return aura + end + if aura:GetCount() > acc:GetCount() then + return aura + end + end + return acc + end, Bastion.Aura:New()) +end + +-- FindMostOfMy +---@param spells List +---@return Aura +function AuraTable:FindMostOfMy(spells) + return spells:reduce(function(acc, cur) + local aura = self:FindMy(cur) + if aura:IsValid() then + if not acc:IsValid() then + return aura + end + if aura:GetCount() > acc:GetCount() then + return aura + end + end + return acc + end, Bastion.Aura:New()) +end + +-- FindMostOfTheirs +---@param spells List +---@return Aura +function AuraTable:FindMostOfTheirs(spells) + return spells:reduce(function(acc, cur) + local aura = self:FindTheirs(cur) + if aura:IsValid() then + if not acc:IsValid() then + return aura + end + if aura:GetCount() > acc:GetCount() then + return aura + end + end + return acc + end, Bastion.Aura:New()) +end + +-- FindMostOfFrom +---@param spells List +---@param source Unit +---@return Aura +function AuraTable:FindMostOfFrom(spells, source) + return spells:reduce(function(acc, cur) + local aura = self:FindFrom(cur, source) + if aura:IsValid() then + if not acc:IsValid() then + return aura + end + if aura:GetCount() > acc:GetCount() then + return aura + end + end + return acc + end, Bastion.Aura:New()) +end + +-- FindLeastOf +---@param spells List +---@return Aura +function AuraTable:FindLeastOf(spells) + return spells:reduce(function(acc, cur) + local aura = self:Find(cur) + if aura:IsValid() then + if not acc:IsValid() then + return aura + end + if aura:GetCount() < acc:GetCount() then + return aura + end + end + return acc + end, Bastion.Aura:New()) +end + +-- FindLeastOfMy +---@param spells List +---@return Aura +function AuraTable:FindLeastOfMy(spells) + return spells:reduce(function(acc, cur) + local aura = self:FindMy(cur) + if aura:IsValid() then + if not acc:IsValid() then + return aura + end + if aura:GetCount() < acc:GetCount() then + return aura + end + end + return acc + end, Bastion.Aura:New()) +end + +-- FindLeastOfTheirs +---@param spells List +---@return Aura +function AuraTable:FindLeastOfTheirs(spells) + return spells:reduce(function(acc, cur) + local aura = self:FindTheirs(cur) + if aura:IsValid() then + if not acc:IsValid() then + return aura + end + if aura:GetCount() < acc:GetCount() then + return aura + end + end + return acc + end, Bastion.Aura:New()) +end + +-- FindLeastOfFrom +---@param spells List +---@param source Unit +---@return Aura +function AuraTable:FindLeastOfFrom(spells, source) + return spells:reduce(function(acc, cur) + local aura = self:FindFrom(cur, source) + if aura:IsValid() then + if not acc:IsValid() then + return aura + end + if aura:GetCount() < acc:GetCount() then + return aura + end + end + return acc + end, Bastion.Aura:New()) +end + -- Has any stealable aura ---@return boolean function AuraTable:HasAnyStealableAura()