feat: P.0.lib.interaction integration — sign + interact action + trigger registration
This commit is contained in:
41
init.lua
41
init.lua
@@ -1,12 +1,13 @@
|
||||
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")
|
||||
local player = require("lib-core.player_control")
|
||||
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")
|
||||
local player = require("lib-core.player_control")
|
||||
local interaction = require("lib-core.interaction")
|
||||
|
||||
-- inline stubs (extract in P.0.lib.{actor,interaction})
|
||||
local actor = { hello = function() return "actor stub" end }
|
||||
local interaction = { hello = function() return "interaction stub" end }
|
||||
-- inline stub (extract in P.0.lib.actor — currently DEFERRED per
|
||||
-- meta/docs/superpowers/specs/2026-05-10-p0-actor-deferral.md)
|
||||
local actor = { hello = function() return "actor stub" end }
|
||||
|
||||
local demo_map = maps.load("maps/demo.map.json")
|
||||
maps.set_current(demo_map)
|
||||
@@ -19,12 +20,13 @@ local map_center_y = (m_size.h * t_size) / 2
|
||||
camera.set_target(map_center_x, map_center_y)
|
||||
camera.set_zoom(1.0)
|
||||
|
||||
-- Bind input actions: ESC quits; WASD/arrows drive player movement
|
||||
-- Bind input actions
|
||||
input.bind("quit", { engine.input.KEY_ESCAPE })
|
||||
input.bind("move_left", { engine.input.KEY_A, engine.input.KEY_LEFT })
|
||||
input.bind("move_right", { engine.input.KEY_D, engine.input.KEY_RIGHT })
|
||||
input.bind("move_up", { engine.input.KEY_W, engine.input.KEY_UP })
|
||||
input.bind("move_down", { engine.input.KEY_S, engine.input.KEY_DOWN })
|
||||
input.bind("interact", { engine.input.KEY_E })
|
||||
|
||||
-- Configure player: defaults are 24x24 + 200 px/sec; place at map-center
|
||||
local p_size = player.size()
|
||||
@@ -33,12 +35,17 @@ player.bind_movement("move_left", "move_right", "move_up", "move_down")
|
||||
|
||||
local PLAYER_R, PLAYER_G, PLAYER_B = 200, 60, 80
|
||||
|
||||
-- Sign as module-local (actor deferred — see actor-deferral spec)
|
||||
-- Tile (4,4) center: 4*32+16 = 144 px in walkable grass-area
|
||||
local sign = { x = 144, y = 144, text = "Hier steht: Willkommen im Spine." }
|
||||
local SIGN_R, SIGN_G, SIGN_B = 220, 200, 60
|
||||
|
||||
local frames = 0
|
||||
local TARGET_FRAMES = 60
|
||||
|
||||
function init(ctx)
|
||||
engine.print("spine-prototype init: maps loaded")
|
||||
engine.print("inline stubs loaded: " .. actor.hello() .. ", " .. interaction.hello())
|
||||
engine.print("inline stubs loaded: " .. actor.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)
|
||||
@@ -54,13 +61,22 @@ function init(ctx)
|
||||
local s = player.size()
|
||||
engine.print(string.format("player: pos=(%d,%d) size=%dx%d speed=%d",
|
||||
p.x, p.y, s.w, s.h, player.speed()))
|
||||
|
||||
interaction.register(sign.x, sign.y, 40, "interact", function(info)
|
||||
engine.print(sign.text)
|
||||
end)
|
||||
engine.print(string.format("interaction: %d trigger(s) registered",
|
||||
interaction.trigger_count()))
|
||||
end
|
||||
|
||||
function render(ctx)
|
||||
engine.render.clear_color(engine.render.rgb(20, 20, 30))
|
||||
camera.begin()
|
||||
r_lib.draw_map()
|
||||
-- draw player on top of map
|
||||
-- draw sign on top of map
|
||||
engine.render.draw_rect(sign.x - 6, sign.y - 6, 12, 12,
|
||||
engine.render.rgb(SIGN_R, SIGN_G, SIGN_B))
|
||||
-- draw player on top of sign
|
||||
local p = player.position()
|
||||
local s = player.size()
|
||||
engine.render.draw_rect(p.x, p.y, s.w, s.h,
|
||||
@@ -80,6 +96,9 @@ function update(ctx, dt)
|
||||
local s = player.size()
|
||||
camera.set_target(p.x + s.w / 2, p.y + s.h / 2)
|
||||
|
||||
-- Interaction proximity-check + dispatch
|
||||
interaction.update(p.x + s.w / 2, p.y + s.h / 2)
|
||||
|
||||
frames = frames + 1
|
||||
if frames >= TARGET_FRAMES then
|
||||
engine.exit(0)
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
{"id":"lib-core.render","version":"0.1.0"},
|
||||
{"id":"lib-core.camera","version":"0.1.0"},
|
||||
{"id":"lib-core.input","version":"0.1.0"},
|
||||
{"id":"lib-core.player_control","version":"0.1.0"}
|
||||
{"id":"lib-core.player_control","version":"0.1.0"},
|
||||
{"id":"lib-core.interaction","version":"0.1.0"}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user