Merge pull request 'Fix Types + Changed `dumpspells` command' (#8) from lyloloq/Bastion:main into main

Reviewed-on: Bastion/Bastion#8
4n0n-patch-1
4n0n 2 years ago
commit 031e7e302d
  1. 2
      src/APL/APL.lua
  2. 16
      src/List/List.lua
  3. 3
      src/Sequencer/Sequencer.lua
  4. 10
      src/UnitManager/UnitManager.lua
  5. 44
      src/Vector3/Vector3.lua
  6. 6
      src/_bastion.lua

@ -206,7 +206,7 @@ end
-- Add a spell to the APL -- Add a spell to the APL
---@param spell Spell ---@param spell Spell
---@param condition fun(...):boolean ---@param condition? fun(...):boolean
---@return APLActor ---@return APLActor
function APL:AddSpell(spell, condition) function APL:AddSpell(spell, condition)
local castableFunc = spell.CastableIfFunc local castableFunc = spell.CastableIfFunc

@ -90,9 +90,9 @@ function List:each(callback)
end end
---@param callback fun(value: any): boolean ---@param callback fun(value: any): boolean
---@return boolean ---@return List
function List:map(callback) function List:map(callback)
local newList = List.new() local newList = List:New()
for _, v in ipairs(self._list) do for _, v in ipairs(self._list) do
newList:push(callback(v)) newList:push(callback(v))
end end
@ -100,9 +100,9 @@ function List:map(callback)
end end
---@param callback fun(value: any): boolean ---@param callback fun(value: any): boolean
---@return boolean ---@return List
function List:filter(callback) function List:filter(callback)
local newList = List.new() local newList = List:New()
for _, v in ipairs(self._list) do for _, v in ipairs(self._list) do
if callback(v) then if callback(v) then
newList:push(v) newList:push(v)
@ -111,7 +111,7 @@ function List:filter(callback)
return newList return newList
end end
---@param callback fun(value: any): boolean ---@param callback fun(result: any, value: any): boolean
---@param initialValue any ---@param initialValue any
---@return boolean ---@return boolean
function List:reduce(callback, initialValue) function List:reduce(callback, initialValue)
@ -152,7 +152,7 @@ end
---@return List ---@return List
function List:reverse() function List:reverse()
local newList = List.new() local newList = List:New()
for i = #self._list, 1, -1 do for i = #self._list, 1, -1 do
newList:push(self._list[i]) newList:push(self._list[i])
end end
@ -161,7 +161,7 @@ end
---@return List ---@return List
function List:clone() function List:clone()
local newList = List.new() local newList = List:New()
for _, v in ipairs(self._list) do for _, v in ipairs(self._list) do
newList:push(v) newList:push(v)
end end
@ -171,7 +171,7 @@ end
---@param list List ---@param list List
---@return List ---@return List
function List:concat(list) function List:concat(list)
local newList = List.new() local newList = List:New()
for _, v in ipairs(self._list) do for _, v in ipairs(self._list) do
newList:push(v) newList:push(v)
end end

@ -1,6 +1,9 @@
-- Create a sequencer class that takes a table of actions and executes them in order -- Create a sequencer class that takes a table of actions and executes them in order
---@class Sequencer ---@class Sequencer
---@field resetCondition fun(): boolean
---@field abortCondition fun(): boolean
---@field actions fun(sequencer: Sequencer)[]
local Sequencer = {} local Sequencer = {}
Sequencer.__index = Sequencer Sequencer.__index = Sequencer

@ -153,7 +153,7 @@ end
-- Set a unit by guid -- Set a unit by guid
---@param unit Unit ---@param unit Unit
---@return Unit ---@return nil
function UnitManager:SetObject(unit) function UnitManager:SetObject(unit)
self.objects[unit:GetGUID()] = unit self.objects[unit:GetGUID()] = unit
end end
@ -224,6 +224,7 @@ function UnitManager:GetNumFriendsWithBuff(spell)
if unit:GetAuras():FindMy(spell):IsUp() then if unit:GetAuras():FindMy(spell):IsUp() then
count = count + 1 count = count + 1
end end
return false
end) end)
return count return count
end end
@ -236,6 +237,7 @@ function UnitManager:GetNumFriendsAlive()
if unit:IsAlive() then if unit:IsAlive() then
count = count + 1 count = count + 1
end end
return false
end) end)
return count return count
end end
@ -255,6 +257,7 @@ function UnitManager:GetFriendWithMostFriends(radius)
if other:IsAlive() and u:GetDistance(other) <= radius then if other:IsAlive() and u:GetDistance(other) <= radius then
c = c + 1 c = c + 1
end end
return false
end) end)
if c > count then if c > count then
unit = u unit = u
@ -264,9 +267,11 @@ function UnitManager:GetFriendWithMostFriends(radius)
if other:IsAlive() and u:GetDistance(other) <= radius then if other:IsAlive() and u:GetDistance(other) <= radius then
table.insert(friends, other) table.insert(friends, other)
end end
return false
end) end)
end end
end end
return false
end) end)
return unit, friends return unit, friends
end end
@ -283,6 +288,7 @@ function UnitManager:GetEnemiesWithMostEnemies(radius)
if other:IsAlive() and u:GetDistance(other) <= radius then if other:IsAlive() and u:GetDistance(other) <= radius then
c = c + 1 c = c + 1
end end
return false
end) end)
if c > count then if c > count then
unit = u unit = u
@ -292,9 +298,11 @@ function UnitManager:GetEnemiesWithMostEnemies(radius)
if other:IsAlive() and u:GetDistance(other) <= radius then if other:IsAlive() and u:GetDistance(other) <= radius then
table.insert(enemies, other) table.insert(enemies, other)
end end
return false
end) end)
end end
end end
return false
end) end)
return unit, enemies return unit, enemies
end end

@ -69,87 +69,129 @@ function Vector3:__index(k)
return Vector3[k] return Vector3[k]
end end
---@class Vector3
---@field length number
if k == "length" then if k == "length" then
return math.sqrt(self.x * self.x + self.y * self.y + self.z * self.z) return math.sqrt(self.x * self.x + self.y * self.y + self.z * self.z)
end end
---@class Vector3
---@field normalized Vector3
if k == "normalized" then if k == "normalized" then
local length = math.sqrt(self.x * self.x + self.y * self.y + self.z * self.z) local length = math.sqrt(self.x * self.x + self.y * self.y + self.z * self.z)
return Vector3:New(self.x / length, self.y / length, self.z / length) return Vector3:New(self.x / length, self.y / length, self.z / length)
end end
---@class Vector3
---@field magnitude number
if k == "magnitude" then if k == "magnitude" then
return math.sqrt(self.x * self.x + self.y * self.y + self.z * self.z) return math.sqrt(self.x * self.x + self.y * self.y + self.z * self.z)
end end
---@class Vector3
---@field sqrMagnitude number
if k == "sqrMagnitude" then if k == "sqrMagnitude" then
return self.x * self.x + self.y * self.y + self.z * self.z return self.x * self.x + self.y * self.y + self.z * self.z
end end
---@class Vector3
---@field zero Vector3
if k == "zero" then if k == "zero" then
return Vector3:New(0, 0, 0) return Vector3:New(0, 0, 0)
end end
---@class Vector3
---@field one Vector3
if k == "one" then if k == "one" then
return Vector3:New(1, 1, 1) return Vector3:New(1, 1, 1)
end end
---@class Vector3
---@field up Vector3
if k == "up" then if k == "up" then
return Vector3:New(0, 1, 0) return Vector3:New(0, 1, 0)
end end
---@class Vector3
---@field down Vector3
if k == "down" then if k == "down" then
return Vector3:New(0, -1, 0) return Vector3:New(0, -1, 0)
end end
---@class Vector3
---@field left Vector3
if k == "left" then if k == "left" then
return Vector3:New(-1, 0, 0) return Vector3:New(-1, 0, 0)
end end
---@class Vector3
---@field right Vector3
if k == "right" then if k == "right" then
return Vector3:New(1, 0, 0) return Vector3:New(1, 0, 0)
end end
---@class Vector3
---@field forward Vector3
if k == "forward" then if k == "forward" then
return Vector3:New(0, 0, 1) return Vector3:New(0, 0, 1)
end end
---@class Vector3
---@field back Vector3
if k == "back" then if k == "back" then
return Vector3:New(0, 0, -1) return Vector3:New(0, 0, -1)
end end
---@class Vector3
---@field positiveInfinity Vector3
if k == "positiveInfinity" then if k == "positiveInfinity" then
return Vector3:New(math.huge, math.huge, math.huge) return Vector3:New(math.huge, math.huge, math.huge)
end end
---@class Vector3
---@field negativeInfinity Vector3
if k == "negativeInfinity" then if k == "negativeInfinity" then
return Vector3:New(-math.huge, -math.huge, -math.huge) return Vector3:New(-math.huge, -math.huge, -math.huge)
end end
---@class Vector3
---@field nan Vector3
if k == "nan" then if k == "nan" then
return Vector3:New(0 / 0, 0 / 0, 0 / 0) return Vector3:New(0 / 0, 0 / 0, 0 / 0)
end end
---@class Vector3
---@field epsilon number
if k == "epsilon" then if k == "epsilon" then
return 1.401298E-45 return 1.401298E-45
end end
---@class Vector3
---@field maxValue number
if k == "maxValue" then if k == "maxValue" then
return 3.402823E+38 return 3.402823E+38
end end
---@class Vector3
---@field minValue number
if k == "minValue" then if k == "minValue" then
return -3.402823E+38 return -3.402823E+38
end end
---@class Vector3
---@field x number
if k == "x" then if k == "x" then
return self[1] return self[1]
end end
---@class Vector3
---@field y number
if k == "y" then if k == "y" then
return self[2] return self[2]
end end
---@class Vector3
---@field z number
if k == "z" then if k == "z" then
return self[3] return self[3]
end end
@ -272,7 +314,7 @@ function Vector3:ProjectOnPlane(planeNormal)
return self - self:Project(planeNormal) return self - self:Project(planeNormal)
end end
---@param inDirection Vector3 ---@param inNormal Vector3
---@return Vector3 ---@return Vector3
function Vector3:Reflect(inNormal) function Vector3:Reflect(inNormal)
return -2 * inNormal:Dot(self) * inNormal + self return -2 * inNormal:Dot(self) * inNormal + self

@ -34,6 +34,7 @@ Bastion.Unit = Bastion.require("Unit")
Bastion.Aura = Bastion.require("Aura") Bastion.Aura = Bastion.require("Aura")
---@type APL, APLActor, APLTrait ---@type APL, APLActor, APLTrait
Bastion.APL, Bastion.APLActor, Bastion.APLTrait = Bastion.require("APL") Bastion.APL, Bastion.APLActor, Bastion.APLTrait = Bastion.require("APL")
---@type Module
Bastion.Module = Bastion.require("Module") Bastion.Module = Bastion.require("Module")
---@type UnitManager ---@type UnitManager
Bastion.UnitManager = Bastion.require("UnitManager"):New() Bastion.UnitManager = Bastion.require("UnitManager"):New()
@ -161,6 +162,7 @@ function Bastion:FindModule(name)
return nil return nil
end end
function Bastion:Print(...) function Bastion:Print(...)
local args = { ... } local args = { ... }
local str = "|cFFDF362D[Bastion]|r |cFFFFFFFF" local str = "|cFFDF362D[Bastion]|r |cFFFFFFFF"
@ -214,6 +216,7 @@ Command:Register('dumpspells', 'Dump spells to a file', function()
local spellID = select(7, GetSpellInfo(spellName)) local spellID = select(7, GetSpellInfo(spellName))
if spellID then if spellID then
spellName = spellName:gsub("[%W%s]", "")
WriteFile('bastion-' .. UnitClass('player') .. '-' .. rand .. '.lua', WriteFile('bastion-' .. UnitClass('player') .. '-' .. rand .. '.lua',
"local " .. spellName .. " = Bastion.SpellBook:GetSpell(" .. spellID .. ")", true) "local " .. spellName .. " = Bastion.SpellBook:GetSpell(" .. spellID .. ")", true)
end end
@ -266,9 +269,6 @@ local files = ListFiles("scripts/bastion/scripts")
for i = 1, #files do for i = 1, #files do
local file = files[i] local file = files[i]
if file:sub(-4) == ".lua" or file:sub(-5) == '.luac' then if file:sub(-4) == ".lua" or file:sub(-5) == '.luac' then
Tinkr:require("scripts/bastion/scripts/" .. file:sub(1, -5), Bastion) Tinkr:require("scripts/bastion/scripts/" .. file:sub(1, -5), Bastion)
end end
end end

Loading…
Cancel
Save