From 4faa8f39294c1f43a089e1629fe89cc440626e00 Mon Sep 17 00:00:00 2001 From: Randy McShandy Date: Sun, 22 Feb 2026 21:14:41 -0600 Subject: [PATCH] Small map changes, some small cleanup in asset management and rendering. --- main/assets.lua | 20 ++++++++++++++------ main/handlers.lua | 4 ++-- main/main.lua | 7 ++++++- main/render.lua | 28 +++++++++++++--------------- main/tiled/side_scroll.lua | 27 ++++++++++++++++++++------- main/tiled/side_scroll.tmx | 17 ++++++++++------- main/tiled/test_1.lua | 2 +- main/tiled/test_1.tmx | 2 +- main/vector.lua | 7 +++++++ 9 files changed, 74 insertions(+), 40 deletions(-) diff --git a/main/assets.lua b/main/assets.lua index 1a05094..91cde40 100644 --- a/main/assets.lua +++ b/main/assets.lua @@ -100,8 +100,9 @@ function assets.get_source(name) end -- Load a map into STI and convert Object layers to custom layers -function assets.store_map(name, path) - local new_map = sti(path) +function assets.store_map(name, args) + local new_map = sti(args.path) + new_map.args = args assets.integrate_object_layers(new_map) AssetTables[AssetClass.TiledMap][name] = new_map end @@ -144,8 +145,7 @@ assets.store_object('Player', { path = 'assets/sprites/gilgamesh.png', vec = vector.new_xy(), viewspace = vector.new_xy(), - update = function(self, dt) - end + update = function(self, dt) end, }) function assets.all_objects() @@ -155,7 +155,15 @@ end -- STI only supports images for tilesheet sources in a tilemap, not a tsx file -- Mostly just embed the tileset in Tiled so it knows to reference the original -- tilesheet png directly. -assets.store_map('test_map_1', 'tiled/test_1.lua') -assets.store_map('side_scroll', 'tiled/side_scroll.lua') +assets.store_map('test_map_1', +{ + path = 'tiled/test_1.lua', + scale = 2.0, +}) +assets.store_map('side_scroll', +{ + path = 'tiled/side_scroll.lua', + scale = 2.0, +}) return assets diff --git a/main/handlers.lua b/main/handlers.lua index 899ddd4..643dc3d 100644 --- a/main/handlers.lua +++ b/main/handlers.lua @@ -13,6 +13,8 @@ function love.handlers.map_changed(new_map_name) else print('invalid map: '..new_map_name) end + render.viewport = render.update_viewport() +end -- Anything interested in a movement control should register its own handler here. function love.handlers.movement_control(key, value) @@ -27,5 +29,3 @@ end function love.handlers.collision(collider, tile) end - -end diff --git a/main/main.lua b/main/main.lua index d32100e..47b15d2 100644 --- a/main/main.lua +++ b/main/main.lua @@ -37,6 +37,11 @@ function love.keyreleased(key) end function love.draw() + local tile = { + w = render.map.active_map.tilewidth * render.map.scale, + h = render.map.active_map.tileheight * render.map.scale, + } + love.graphics.stencil( function() love.graphics.rectangle('fill', @@ -53,7 +58,7 @@ function love.draw() last_color = { love.graphics.getColor() } love.graphics.setColor(render.color.dark) local adjust = render.worldspace_to_viewspace(player.vec) - love.graphics.rectangle('line', adjust.x, adjust.y, 32, 32) + love.graphics.rectangle('line', adjust.x, adjust.y, tile.w, tile.h) --love.graphics.print(IntroMessage, math.floor((conf.window.width/16) * 1), math.floor((conf.window.height/16) * 1)) love.graphics.setColor(last_color) end diff --git a/main/render.lua b/main/render.lua index db59089..3c79517 100644 --- a/main/render.lua +++ b/main/render.lua @@ -46,28 +46,26 @@ render.viewport = function render.activate_map(new_map_name) local success = false local new_map = assets.get_map(new_map_name) + if new_map then success = true render.map.active_map = new_map + render.map.scale = new_map.args.scale render.active_viewclass = render.ViewClassData[new_map.properties.viewclass] - render.map.active_map.first_loop = true - -- Find all objects in the map we're switching to, and update their positional + -- Find all stored objects in the map we're switching to, and update their positional -- info with the unique copy stored in each map. for key,object in pairs(assets.all_objects()) do local object_in_map = render.map.active_map[key] if object_in_map then object.vec = object_in_map.vec - if key == 'Player' then - render.map.topleft = render.map.active_camera(object) - elseif key == 'CameraFocus' then + if object_in_map.name == 'Player' then + render.map.active_map.first_loop = true render.map.topleft = render.map.active_camera(object) end end end - render.viewport = render.update_viewport() - love.event.push('map_changed', new_map_name) end @@ -103,7 +101,7 @@ end function render.worldspace_to_viewspace(world_position) local view_position = utils.shallow_copy(world_position) local tile = { - w = render.map.active_map.tilewidth, + w = render.map.active_map.tilewidth , h = render.map.active_map.tileheight, } @@ -112,8 +110,8 @@ function render.worldspace_to_viewspace(world_position) x = (render.viewport.ex * math.floor((render.map.scale * world_position.x) / render.viewport.ex)), y = (render.viewport.ey * math.floor((render.map.scale * world_position.y) / render.viewport.ey)), } - view_position.x = (render.map.scale * (world_position.x )) + render.viewport.ox - offsets.x - view_position.y = (render.map.scale * (world_position.y )) + render.viewport.oy - offsets.y + view_position.x = (render.map.scale * world_position.x) + (render.viewport.ox) - offsets.x + view_position.y = (render.map.scale * world_position.y) + (render.viewport.oy) - offsets.y return view_position end @@ -160,7 +158,7 @@ function(focus) render.map.active_map.first_loop = false return { - x = render.map.active_map['CameraFocus'].vec.x + (tile.w/2), + x = render.map.active_map['CameraFocus'].vec.x + (tile.w / 2), y = render.map.active_map['CameraFocus'].vec.y + (tile.h), } end @@ -168,13 +166,13 @@ function(focus) local new_topleft = render.map.topleft local viewspace_focus = render.worldspace_to_viewspace(focus.vec) - if ((focus.vec.heading == utils.Headings.East) and viewspace_focus.x == render.viewport.ox) then + if ((focus.vec.heading == utils.Headings.East) and viewspace_focus.x <= render.viewport.ox) then new_topleft.x = new_topleft.x - (render.viewport.ex / render.map.scale) - elseif ((focus.vec.heading == utils.Headings.West) and viewspace_focus.x == render.viewport.ex) then + elseif ((focus.vec.heading == utils.Headings.West) and viewspace_focus.x >= render.viewport.ex) then new_topleft.x = new_topleft.x + (render.viewport.ex / render.map.scale) - elseif ((focus.vec.heading == utils.Headings.South) and viewspace_focus.y == render.viewport.oy) then + elseif ((focus.vec.heading == utils.Headings.South) and viewspace_focus.y <= render.viewport.oy) then new_topleft.y = new_topleft.y - (render.viewport.ey / render.map.scale) - elseif ((focus.vec.heading == utils.Headings.North) and viewspace_focus.y == render.viewport.ey) then + elseif ((focus.vec.heading == utils.Headings.North) and viewspace_focus.y >= render.viewport.ey) then new_topleft.y = new_topleft.y + (render.viewport.ey / render.map.scale) end return new_topleft diff --git a/main/tiled/side_scroll.lua b/main/tiled/side_scroll.lua index 1b2c4c4..f8c89a3 100644 --- a/main/tiled/side_scroll.lua +++ b/main/tiled/side_scroll.lua @@ -10,7 +10,7 @@ return { tilewidth = 16, tileheight = 16, nextlayerid = 5, - nextobjectid = 2, + nextobjectid = 6, properties = { ["viewclass"] = "sidescroll" }, @@ -93,12 +93,12 @@ return { properties = {}, encoding = "lua", data = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 869, 870, 871, 872, 873, 874, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 870, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 871, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 872, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 873, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 874, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 106, 100, 106, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 106, 99, 99, 1, 1, 105, 106, 1, 106, 99, 99, 100, 100, 1, 1, 99, 106, 100, 99, 99, 100, 1, 1, 1, 1, 1, 1, 1, @@ -182,6 +182,19 @@ return { gid = 515, visible = true, properties = {} + }, + { + id = 5, + name = "CameraFocus", + type = "Meta", + shape = "point", + x = 32, + y = 160, + width = 0, + height = 0, + rotation = 0, + visible = true, + properties = {} } } }, diff --git a/main/tiled/side_scroll.tmx b/main/tiled/side_scroll.tmx index ae974c3..d1f2c25 100644 --- a/main/tiled/side_scroll.tmx +++ b/main/tiled/side_scroll.tmx @@ -1,5 +1,5 @@ - + @@ -14,12 +14,12 @@ -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +869,870,871,872,873,874,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +870,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +871,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +872,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +873,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +874,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,106,100,106,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,106,99,99,1,1,105,106,1,106,99,99,100,100,1,1,99,106,100,99,99,100,1,1,1,1,1,1,1, @@ -62,6 +62,9 @@ + + + diff --git a/main/tiled/test_1.lua b/main/tiled/test_1.lua index ff8c73f..39600e8 100644 --- a/main/tiled/test_1.lua +++ b/main/tiled/test_1.lua @@ -196,7 +196,7 @@ return { encoding = "lua", data = { 51, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, + 918, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 919, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 921, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, diff --git a/main/tiled/test_1.tmx b/main/tiled/test_1.tmx index 28c2e29..31cc2ae 100644 --- a/main/tiled/test_1.tmx +++ b/main/tiled/test_1.tmx @@ -111,7 +111,7 @@ 51,869,870,871,872,873,874,875,876,877,878,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51, -918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51, +918,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51, 919,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51, 920,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 921,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, diff --git a/main/vector.lua b/main/vector.lua index ace01a5..3a0eb80 100644 --- a/main/vector.lua +++ b/main/vector.lua @@ -36,4 +36,11 @@ vector.snap_xy = function(vec) vec.speed = 0 end +vector.add_xy = function(left, right) + local new_vec = vector.new_xy() + new_vec.x = left.x + right.x + new_vec.y = left.y + right.y + return new_vec +end + return vector -- 2.49.0