--- @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 Tree.level.selector:select(nil) 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 }