PeaAshMeter 403ba5a03f Add Task.wait to combine multiple tasks into one
Add TestRunner for running asynchronous tests with update support

Add test for Task.wait to verify concurrent task completion

Add set method to Counter for explicit value assignment
2026-01-31 02:11:55 +03:00

129 lines
4.6 KiB
Lua

-- CameraLoader = require 'lib/camera'
local character = require "lib/character/character"
local testLayout
local TestRunner = require "test.runner"
TestRunner:register(require "test.task")
function love.conf(t)
t.console = true
end
function love.load()
love.window.setMode(1280, 720, { resizable = true, msaa = 4, vsync = true })
require "lib/tree" -- важно это сделать после настройки окна
testLayout = require "lib.simple_ui.level.layout"
local chars = {
character.spawn("Foodor")
:addBehavior {
Tree.behaviors.residentsleeper.new(),
Tree.behaviors.stats.new(nil, nil, 1),
Tree.behaviors.positioned.new(Vec3 { 3, 3 }),
Tree.behaviors.tiled.new(),
Tree.behaviors.sprite.new(Tree.assets.files.sprites.character),
Tree.behaviors.shadowcaster.new(),
Tree.behaviors.spellcaster.new()
},
character.spawn("Foodor")
:addBehavior {
Tree.behaviors.residentsleeper.new(),
Tree.behaviors.stats.new(nil, nil, 1),
Tree.behaviors.positioned.new(Vec3 { 4, 3 }),
Tree.behaviors.tiled.new(),
Tree.behaviors.sprite.new(Tree.assets.files.sprites.character),
Tree.behaviors.shadowcaster.new(),
Tree.behaviors.spellcaster.new()
},
character.spawn("Foodor")
:addBehavior {
Tree.behaviors.residentsleeper.new(),
Tree.behaviors.stats.new(nil, nil, 3),
Tree.behaviors.positioned.new(Vec3 { 5, 3 }),
Tree.behaviors.tiled.new(),
Tree.behaviors.sprite.new(Tree.assets.files.sprites.character),
Tree.behaviors.shadowcaster.new(),
Tree.behaviors.spellcaster.new()
},
character.spawn("Baris")
:addBehavior {
Tree.behaviors.residentsleeper.new(),
Tree.behaviors.stats.new(nil, nil, 2),
Tree.behaviors.positioned.new(Vec3 { 5, 5 }),
Tree.behaviors.tiled.new(),
Tree.behaviors.sprite.new(Tree.assets.files.sprites.character),
Tree.behaviors.shadowcaster.new(),
Tree.behaviors.spellcaster.new(),
Tree.behaviors.ai.new()
},
}
for id, _ in pairs(chars) do
Tree.level.turnOrder:add(id)
end
Tree.level.turnOrder:endRound()
print("Now playing:", Tree.level.turnOrder.current)
end
local lt = "0"
function love.update(dt)
TestRunner:update(dt) -- закомментировать для отключения тестов
local t1 = love.timer.getTime()
Tree.controls:poll()
Tree.level.camera:update(dt) -- сначала логика камеры, потому что на нее завязан UI
testLayout:update(dt) -- потом UI, потому что нужно перехватить жесты и не пустить их дальше
Tree.panning:update(dt)
Tree.level:update(dt)
Tree.audio:update(dt)
Tree.controls:cache()
local t2 = love.timer.getTime()
lt = string.format("%.3f", (t2 - t1) * 1000)
end
local function coverTransform(img, containerW, containerH)
local iw, ih = img:getWidth(), img:getHeight()
local scale = math.max(containerW / iw, containerH / ih)
local sw, sh = iw * scale, ih * scale
local offsetX = (containerW - sw) * 0.5
local offsetY = (containerH - sh) * 0.5
return scale, offsetX, offsetY, sw, sh
end
local dt = "0"
function love.draw()
local t1 = love.timer.getTime()
local scale, ox, oy = coverTransform(Tree.assets.files.cats, love.graphics.getWidth(), love.graphics.getHeight())
love.graphics.push()
love.graphics.translate(ox, oy)
love.graphics.scale(scale, scale)
love.graphics.draw(Tree.assets.files.cats, 0, 0)
love.graphics.pop()
Tree.level:draw()
testLayout:draw()
love.graphics.setColor(1, 1, 1)
love.graphics.setFont(Tree.fonts:getTheme("Roboto_Mono"):getVariant("medium"))
local stats = "fps: " ..
love.timer.getFPS() ..
" lt: " .. lt .. " dt: " .. dt .. " mem: " .. string.format("%.2f MB", collectgarbage("count") / 1000)
love.graphics.print(stats, 10, 10)
local t2 = love.timer.getTime()
dt = string.format("%.3f", (t2 - t1) * 1000)
end
function love.resize(w, h)
local render = Tree.level.render
if not render then return end
render:free()
Tree.level.render = (require "lib.level.render").new { w, h }
end