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
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()
-- 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
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)
function love.handlers.collision(collider, tile)
end
-
-end
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',
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
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
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,
}
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
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
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
tilewidth = 16,
tileheight = 16,
nextlayerid = 5,
- nextobjectid = 2,
+ nextobjectid = 6,
properties = {
["viewclass"] = "sidescroll"
},
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,
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 = {}
}
}
},
<?xml version="1.0" encoding="UTF-8"?>
-<map version="1.10" tiledversion="1.11.2" orientation="orthogonal" renderorder="right-up" width="30" height="20" tilewidth="16" tileheight="16" infinite="0" nextlayerid="5" nextobjectid="2">
+<map version="1.10" tiledversion="1.11.2" orientation="orthogonal" renderorder="right-up" width="30" height="20" tilewidth="16" tileheight="16" infinite="0" nextlayerid="5" nextobjectid="6">
<editorsettings>
<export target="side_scroll.lua" format="lua"/>
</editorsettings>
</tileset>
<layer id="1" name="Background" width="30" height="20">
<data encoding="csv">
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,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,
</layer>
<objectgroup id="4" name="Object Layer 1">
<object id="1" name="Player" gid="515" x="112" y="256" width="16" height="16"/>
+ <object id="5" name="CameraFocus" type="Meta" x="32" y="160">
+ <point/>
+ </object>
</objectgroup>
<layer id="2" name="CityWalls_fg" width="30" height="20">
<data encoding="csv">
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,
<layer id="1" name="Decoration" width="30" height="20">
<data encoding="csv">
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,
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