63 lines
1.6 KiB
Lua
63 lines
1.6 KiB
Lua
--- @class TurnOrder
|
|
--- @field walked integer[]
|
|
--- @field notWalked integer[]
|
|
--- @field isTurnsEnabled boolean
|
|
local turnOrder = {}
|
|
turnOrder.__index = turnOrder
|
|
|
|
local function new()
|
|
return setmetatable({
|
|
walked = {},
|
|
notWalked = {},
|
|
isTurnsEnabled = true
|
|
}, turnOrder)
|
|
end
|
|
|
|
function turnOrder:updateOrder()
|
|
local notWalked = {}
|
|
local count = 1
|
|
for id, char in ipairs(Tree.level.characters) do
|
|
char:try(Tree.behaviors.stats, function(stats)
|
|
notWalked[count] = id
|
|
count = count + 1
|
|
end)
|
|
end
|
|
table.sort(notWalked, function(id_a, id_b)
|
|
local res = Tree.level.characters[id_a]:try(Tree.behaviors.stats, function(astats)
|
|
local res = Tree.level.characters[id_b]:try(Tree.behaviors.stats, function(bstats)
|
|
return astats.initiative > bstats.initiative
|
|
end)
|
|
return res
|
|
end)
|
|
return res or false
|
|
end)
|
|
self.notWalked = notWalked
|
|
|
|
print('[Level]: Turn order has been updated!')
|
|
end
|
|
|
|
function turnOrder:next()
|
|
table.insert(self.walked, self.notWalked[1])
|
|
self.notWalked[1] = nil
|
|
|
|
local notWalked = {}
|
|
for i = 1, #self.notWalked do
|
|
notWalked[i] = self.notWalked[i + 1]
|
|
print(notWalked[i], i)
|
|
end
|
|
|
|
self.notWalked = notWalked
|
|
print('[Level]: Triggered next turn')
|
|
print('[Level]:', next(self.notWalked))
|
|
if #self.notWalked == 0 then
|
|
self:updateOrder()
|
|
self.walked = {}
|
|
end
|
|
end
|
|
|
|
function turnOrder:toggleTurns()
|
|
self.isTurnsEnabled = not self.isTurnsEnabled
|
|
end
|
|
|
|
return { new = new }
|