forked from Bastion/Bastion
parent
7e0327bb78
commit
29e19b931f
@ -0,0 +1,153 @@ |
||||
local Tinkr, Bastion = ... |
||||
|
||||
local List = {} |
||||
List.__index = List |
||||
|
||||
function List:New() |
||||
local self = setmetatable({}, List) |
||||
self._list = {} |
||||
return self |
||||
end |
||||
|
||||
function List:push(value) |
||||
table.insert(self._list, value) |
||||
end |
||||
|
||||
function List:pop() |
||||
return table.remove(self._list) |
||||
end |
||||
|
||||
function List:peek() |
||||
return self._list[#self._list] |
||||
end |
||||
|
||||
function List:count() |
||||
return #self._list |
||||
end |
||||
|
||||
function List:clear() |
||||
self._list = {} |
||||
end |
||||
|
||||
function List:contains(value) |
||||
for _, v in ipairs(self._list) do |
||||
if v == value then |
||||
return true |
||||
end |
||||
end |
||||
return false |
||||
end |
||||
|
||||
function List:remove(value) |
||||
for i, v in ipairs(self._list) do |
||||
if v == value then |
||||
table.remove(self._list, i) |
||||
return true |
||||
end |
||||
end |
||||
return false |
||||
end |
||||
|
||||
function List:each(callback) |
||||
for _, v in ipairs(self._list) do |
||||
if callback(v) then |
||||
break |
||||
end |
||||
end |
||||
end |
||||
|
||||
function List:map(callback) |
||||
local newList = List.new() |
||||
for _, v in ipairs(self._list) do |
||||
newList:push(callback(v)) |
||||
end |
||||
return newList |
||||
end |
||||
|
||||
function List:filter(callback) |
||||
local newList = List.new() |
||||
for _, v in ipairs(self._list) do |
||||
if callback(v) then |
||||
newList:push(v) |
||||
end |
||||
end |
||||
return newList |
||||
end |
||||
|
||||
function List:reduce(callback, initialValue) |
||||
local result = initialValue |
||||
for _, v in ipairs(self._list) do |
||||
result = callback(result, v) |
||||
end |
||||
return result |
||||
end |
||||
|
||||
function List:find(callback) |
||||
for _, v in ipairs(self._list) do |
||||
if callback(v) then |
||||
return v |
||||
end |
||||
end |
||||
return nil |
||||
end |
||||
|
||||
function List:findIndex(callback) |
||||
for i, v in ipairs(self._list) do |
||||
if callback(v) then |
||||
return i |
||||
end |
||||
end |
||||
return nil |
||||
end |
||||
|
||||
function List:sort(callback) |
||||
table.sort(self._list, callback) |
||||
end |
||||
|
||||
function List:reverse() |
||||
local newList = List.new() |
||||
for i = #self._list, 1, -1 do |
||||
newList:push(self._list[i]) |
||||
end |
||||
return newList |
||||
end |
||||
|
||||
function List:clone() |
||||
local newList = List.new() |
||||
for _, v in ipairs(self._list) do |
||||
newList:push(v) |
||||
end |
||||
return newList |
||||
end |
||||
|
||||
function List:concat(list) |
||||
local newList = List.new() |
||||
for _, v in ipairs(self._list) do |
||||
newList:push(v) |
||||
end |
||||
for _, v in ipairs(list._list) do |
||||
newList:push(v) |
||||
end |
||||
return newList |
||||
end |
||||
|
||||
function List:join(separator) |
||||
local result = "" |
||||
for i, v in ipairs(self._list) do |
||||
result = result .. v |
||||
if i < #self._list then |
||||
result = result .. separator |
||||
end |
||||
end |
||||
return result |
||||
end |
||||
|
||||
function List:toString() |
||||
return self:join(", ") |
||||
end |
||||
|
||||
function List:__tostring() |
||||
return self:toString() |
||||
end |
||||
|
||||
return List |
@ -0,0 +1,50 @@ |
||||
local Tinkr, Bastion = ... |
||||
|
||||
local ObjectManager = {} |
||||
ObjectManager.__index = ObjectManager |
||||
|
||||
function ObjectManager:New() |
||||
local self = setmetatable({}, ObjectManager) |
||||
|
||||
self._objects = {} |
||||
|
||||
self.enemies = Bastion.List:New() |
||||
self.friends = Bastion.List:New() |
||||
self.activeEnemies = Bastion.List:New() |
||||
self.explosives = Bastion.List:New() |
||||
|
||||
return self |
||||
end |
||||
|
||||
function ObjectManager:Refresh() |
||||
self.enemies:clear() |
||||
self.friends:clear() |
||||
self.activeEnemies:clear() |
||||
self.explosives:clear() |
||||
|
||||
local objects = Objects() |
||||
|
||||
for _, object in pairs(objects) do |
||||
if ObjectType(object) == 5 or ObjectType(object) == 6 then |
||||
local unit = Bastion.UnitManager:GetObject(ObjectGUID(object)) |
||||
if not unit then |
||||
unit = Bastion.Unit:New(object) |
||||
Bastion.UnitManager:SetObject(unit) |
||||
end |
||||
|
||||
if unit:GetID() == 120651 then |
||||
self.explosives:push(unit) |
||||
elseif unit:IsPlayer() and unit:IsInParty() then |
||||
self.friends:push(unit) |
||||
elseif unit:IsEnemy() then |
||||
self.enemies:push(unit) |
||||
|
||||
if unit:IsAffectingCombat() then |
||||
self.activeEnemies:push(unit) |
||||
end |
||||
end |
||||
end |
||||
end |
||||
end |
||||
|
||||
return ObjectManager |
Loading…
Reference in new issue