refactor turn-order

i should leave this peace of oxygen etc etc

Co-authored-by: Ivan Yuriev <ivanyr44@gmail.com>
This commit is contained in:
neckrat 2025-11-09 01:43:06 +03:00
parent 242b37de83
commit 4169aa4b61

View File

@ -1,28 +1,6 @@
--- @class TurnOrder
--- @field walked integer[]
--- @field notWalked integer[]
--- @field isTurnsEnabled boolean
local turnOrder = {}
turnOrder.__index = turnOrder
local PriorityQueue = require "lib.utils.priority_queue"
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 sortInitiative = 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
@ -30,36 +8,52 @@ function turnOrder:updateOrder()
return res
end)
return res or false
end)
self.notWalked = notWalked
end
print('[Level]: Turn order has been updated!')
--- @class TurnOrder
--- @field characterIds Id[]
--- @field walked PriorityQueue
--- @field notWalked PriorityQueue
--- @field isTurnsEnabled boolean
local turnOrder = {}
turnOrder.__index = turnOrder
local function new()
return setmetatable({
walked = PriorityQueue.new(sortInitiative),
notWalked = PriorityQueue.new(sortInitiative),
isTurnsEnabled = true
}, turnOrder)
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)
local cur = self.notWalked:pop()
self.walked:insert(cur)
end
self.notWalked = notWalked
function turnOrder:reorder()
local _walked, _notWalked = PriorityQueue.new(sortInitiative), PriorityQueue.new(sortInitiative)
local charId = self.walked:pop()
while charId do
_walked:insert(charId)
charId = self.walked:pop()
end
Tree.level.selector:select(nil)
print('[Level]: Triggered next turn')
print('[Level]:', next(self.notWalked))
if #self.notWalked == 0 then
self:updateOrder()
self.walked = {}
charId = self.notWalked:pop()
while charId do
_notWalked:insert(charId)
charId = self.notWalked:pop()
end
end
function turnOrder:toggleTurns()
self.isTurnsEnabled = not self.isTurnsEnabled
--- @param count number
function turnOrder:getOrder(count)
end
--- @param id Id
function turnOrder:add(id)
table.insert(self.characterIds, id)
end
return { new = new }