diff --git a/lib/level/level.lua b/lib/level/level.lua index 9e6950c..0dcbdb6 100644 --- a/lib/level/level.lua +++ b/lib/level/level.lua @@ -40,6 +40,7 @@ end function level:update(dt) utils.each(self.deadIds, function(id) self.characters[id] = nil + self.turnOrder:remove(id) end) self.deadIds = {} diff --git a/lib/level/turn_order.lua b/lib/level/turn_order.lua index f03c836..de1b52e 100644 --- a/lib/level/turn_order.lua +++ b/lib/level/turn_order.lua @@ -108,4 +108,29 @@ function turnOrder:add(id) self.actedQueue:insert(id) -- новые персонажи по умолчанию попадают в очередь следующего хода end +--- Удалить персонажа из очереди хода (например, при смерти) +--- @param id Id +function turnOrder:remove(id) + if self.current == id then + self.current = self.pendingQueue:pop() + if not self.current then + self:endRound() + end + return + end + + local function filterQueue(q, targetId) + local newQ = PriorityQueue.new(initiativeComparator) + for _, val in ipairs(q.data) do + if val ~= targetId then + newQ:insert(val) + end + end + return newQ + end + + self.actedQueue = filterQueue(self.actedQueue, id) + self.pendingQueue = filterQueue(self.pendingQueue, id) +end + return { new = new }