Files
sporel-module-spine-prototype/init.lua

78 lines
2.7 KiB
Lua

local maps = require("lib-core.maps")
local r_lib = require("lib-core.render")
local camera = require("lib-core.camera")
local input = require("lib-core.input")
-- inline stubs (extract in P.0.lib.{player_control,actor,interaction})
local player_control = { hello = function() return "player_control stub" end }
local actor = { hello = function() return "actor stub" end }
local interaction = { hello = function() return "interaction stub" end }
local demo_map = maps.load("maps/demo.map.json")
maps.set_current(demo_map)
local m_size = maps.size()
local t_size = maps.tile_size()
camera.set_target((m_size.w * t_size) / 2, (m_size.h * t_size) / 2)
camera.set_zoom(1.0)
-- Bind input actions: ESC quits; WASD/arrows pan camera
input.bind("quit", { engine.input.KEY_ESCAPE })
input.bind("pan_left", { engine.input.KEY_A, engine.input.KEY_LEFT })
input.bind("pan_right", { engine.input.KEY_D, engine.input.KEY_RIGHT })
input.bind("pan_up", { engine.input.KEY_W, engine.input.KEY_UP })
input.bind("pan_down", { engine.input.KEY_S, engine.input.KEY_DOWN })
local PAN_SPEED = 200 -- pixels per second
local frames = 0
local TARGET_FRAMES = 60
function init(ctx)
engine.print("spine-prototype init: maps loaded")
engine.print("inline stubs loaded: "
.. player_control.hello() .. ", "
.. actor.hello() .. ", "
.. interaction.hello())
engine.print(string.format("map size: %dx%d", m_size.w, m_size.h))
local corner = maps.tile_at(0, 0)
local interior = maps.tile_at(5, 5)
engine.print("tile at (0,0): " .. corner.id)
engine.print("tile at (5,5): " .. interior.id)
engine.print("walkable at (0,0): " .. tostring(maps.is_walkable(0, 0)))
engine.print("walkable at (5,5): " .. tostring(maps.is_walkable(5, 5)))
engine.print(string.format("render: %d tiles per frame", m_size.w * m_size.h))
local t = camera.target()
engine.print(string.format("camera: target=(%d,%d) zoom=%.2f", t.x, t.y, camera.zoom()))
engine.print(string.format("input: %d actions bound", input.action_count()))
end
function render(ctx)
engine.render.clear_color(engine.render.rgb(20, 20, 30))
camera.begin()
r_lib.draw_map()
camera.finish()
end
function update(ctx, dt)
if input.was_action_pressed("quit") then
engine.exit(0)
end
local d = input.direction("pan_left", "pan_right", "pan_up", "pan_down")
if d.x ~= 0 or d.y ~= 0 then
local t = camera.target()
camera.set_target(t.x + d.x * PAN_SPEED * dt,
t.y + d.y * PAN_SPEED * dt)
end
frames = frames + 1
if frames >= TARGET_FRAMES then
engine.exit(0)
end
end
function cleanup(ctx)
engine.print("spine-prototype cleanup: total_frames=" .. frames)
end