-- CameraLoader = require 'lib/camera' local ui = require "lib.ui.core" local character = require "lib/character/character" require "lib/tree" function love.conf(t) t.console = true end local width = 30 local height = 30 function love.load() character.spawn("Hero", "warrior", Tree.assets.files.sprites.character) Grass = Tree.assets.files.tiles.grass.atlas Gr1 = love.graphics.newQuad(0, 32, 32, 32, Grass) Tilemap = {} for y = 0, height - 1 do Tilemap[y] = {} for x = 0, width - 1 do Tilemap[y][x] = love.graphics.newQuad(math.random(0, 7) * 32, math.random(0, 7) * 32, 32, 32, Grass) end end Widgets = ui.Root { child = ui.Column { children = { ui.Row { gap = 8, children = { ui.Rectangle { size = Vec3 { 100, 100 }, color = { 0, 0, 1 } }, ui.Rectangle { size = Vec3 { 200, 100 }, color = { 1, 0, 0 } }, ui.Padding { padding = { left = 10, right = 10 }, child = ui.Rectangle { size = Vec3 { 100, 150 }, color = { 0, 1, 0 } } }, ui.Rectangle { size = Vec3 { 100, 100 }, color = { 1, 1, 0 } }, } }, ui.Expanded {}, ui.Row { gap = 8, children = { ui.Rectangle { size = Vec3 { 100, 100 }, color = { 0, 0, 1 } }, ui.Rectangle { size = Vec3 { 200, 100 }, color = { 1, 0, 0 } }, ui.Expanded { flex = 1, child = ui.Rectangle { size = Vec3 { 100, 150 }, color = { 0, 1, 0 } } }, ui.Rectangle { size = Vec3 { 100, 100 }, color = { 1, 1, 0 } }, } }, } } } -- PlayerFaction.characters = { Hero1, Hero2 } 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() Tree.panning:update(dt) Tree.level:update(dt) Tree.controls:cache() Widgets:update(dt) 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() for y = 0, height - 1 do for x = 0, width - 1 do love.graphics.draw(Grass, Tilemap[x][y], x, y, nil, 1 / 32, 1 / 32) end end --- Это отрисовка пути персонажа к мышке if Tree.level.selector.id then local charPos = Tree.level.characters[Tree.level.selector.id].logic.mapLogic.position:floor() --- @type Vec3 local mpos = Tree.level.camera:toWorldPosition(Vec3 { love.mouse.getX(), love.mouse.getY() }):floor() local path = (require "lib.pathfinder")(charPos, mpos) love.graphics.setColor(0.6, 0.75, 0.5) for p in path:values() do love.graphics.circle("fill", p.x + 0.45, p.y + 0.45, 0.1) end love.graphics.setColor(1, 1, 1) end 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