From 6dd02ed2ec4a91b29231154d026ae411662021e3 Mon Sep 17 00:00:00 2001 From: neckrat Date: Mon, 3 Nov 2025 18:24:54 +0300 Subject: [PATCH] turn order init --- lib/character/character.lua | 1 + lib/level/level.lua | 2 ++ lib/level/turn_order.lua | 43 +++++++++++++++++++++++++++++++++++++ lib/spellbook.lua | 2 ++ main.lua | 2 ++ 5 files changed, 50 insertions(+) create mode 100644 lib/level/turn_order.lua diff --git a/lib/character/character.lua b/lib/character/character.lua index 4e7aec1..11ca80b 100644 --- a/lib/character/character.lua +++ b/lib/character/character.lua @@ -35,6 +35,7 @@ local function spawn(name, spriteDir, position, size, level) } Tree.level.characters[char.id] = char + Tree.level.turnOrder:updateOrder() return char end diff --git a/lib/level/level.lua b/lib/level/level.lua index eb182e9..8dd3d33 100644 --- a/lib/level/level.lua +++ b/lib/level/level.lua @@ -7,6 +7,7 @@ local utils = require "lib.utils.utils" --- @field selector Selector --- @field camera Camera --- @field tileGrid TileGrid +--- @field turnOrder TurnOrder local level = {} level.__index = level @@ -24,6 +25,7 @@ local function new(type, template) tileGrid = (require "lib.level.grid.tile_grid").new(type, template, size), selector = (require "lib.level.selector").new(), camera = (require "lib.level.camera").new(), + turnOrder = (require "lib.level.turn_order").new(), }, level) end diff --git a/lib/level/turn_order.lua b/lib/level/turn_order.lua new file mode 100644 index 0000000..d874198 --- /dev/null +++ b/lib/level/turn_order.lua @@ -0,0 +1,43 @@ +--- @class TurnOrder +--- @field order Id[] возможно в будущем тут будет не айди персонажа, а айди фракции, в которой состоят несколько персонажей +local turnOrder = {} +turnOrder.__index = turnOrder + +local function new() + return setmetatable({ + order = {} + }, turnOrder) +end + +function turnOrder:updateOrder() + local order = {} + local count = 1 + for k, _ in ipairs(Tree.level.characters) do + order[count] = k + count = count + 1 + end + self.order = order + + print('[Level]: Turn order has been updated!') + for _, v in ipairs(self.order) do + print('[Level]: id:', v) + end +end + +function turnOrder:next() + self.order[#self.order + 1] = self.order[1] + self.order[1] = nil + + local order = {} + for i = 1, #self.order do + order[i] = self.order[i + 1] + end + + self.order = order + print('[Level]: Triggered next order') + for _, v in ipairs(self.order) do + print('[Level]: id:', v) + end +end + +return { new = new } diff --git a/lib/spellbook.lua b/lib/spellbook.lua index e117065..c1f91ba 100644 --- a/lib/spellbook.lua +++ b/lib/spellbook.lua @@ -52,6 +52,8 @@ function walk:cast(caster, target) onEnd = function() caster:has(Tree.behaviors.spellcaster):endCast() end, }:run() + Tree.level.turnOrder:next() + return true end diff --git a/main.lua b/main.lua index 9c740fa..2722bee 100644 --- a/main.lua +++ b/main.lua @@ -12,6 +12,8 @@ end function love.load() character.spawn("Foodor", Tree.assets.files.sprites.character) character.spawn("Baris", Tree.assets.files.sprites.character, Vec3 { 3, 3 }) + character.spawn("Foodor Jr", Tree.assets.files.sprites.character, Vec3 { 0, 3 }) + character.spawn("Baris Jr", Tree.assets.files.sprites.character, Vec3 { 0, 6 }) love.window.setMode(1080, 720, { resizable = true, msaa = 4, vsync = true }) end