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
129 lines
4.6 KiB
Lua
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
|