PeaAshMeter 30f8b1c769 reactive character state implementation
- @todo: refactor character submodules
2025-09-14 01:51:18 +03:00

77 lines
2.3 KiB
Lua

-- CameraLoader = require 'lib/camera'
local character = require "lib/character/character"
require "lib/tree"
local layout = require "lib.ui.layout"
local spellbook = require "lib.spellbook"
function love.conf(t)
t.console = true
end
function love.load()
for x = 0, 29, 1 do
for y = 0, 29, 1 do
if math.random() > 0.8 then
local c = character.spawn("Hero", "warrior", Tree.assets.files.sprites.character)
c.logic.mapLogic.position = Vec3 { x, y }
c.logic.mapLogic.displayedPosition = Vec3 { x, y }
c.spellbook = spellbook.of { spellbook.walk }
c.logic:setState("attack")
end
end
end
love.window.setMode(1080, 720, { resizable = true, msaa = 4, vsync = true })
end
local lt = "0"
function love.update(dt)
local t1 = love.timer.getTime()
Tree.controls:poll()
Widgets = layout:build()
Widgets:update(dt) -- логика UI-слоя должна отработать раньше всех, потому что нужно перехватить жесты и не пустить их дальше
Tree.panning:update(dt)
Tree.level: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.camera:attach()
Tree.level:draw()
Tree.level.camera:detach()
Widgets:draw()
love.graphics.setColor(1, 1, 1)
local stats = "fps: " .. love.timer.getFPS() .. " lt: " .. lt .. " dt: " .. dt
love.graphics.print(stats, 10, 10)
local t2 = love.timer.getTime()
dt = string.format("%.3f", (t2 - t1) * 1000)
end