Page 22 of 27

Posted: Wed Jan 23, 2013 9:46 pm
Thanks, I just put that code in and it works fine, so thanks again.

Posted: Sat Jan 26, 2013 5:56 pm
This is some code I wrote to convert all the rectangles, polygons, polylines and ellipses in an object layer into static shapes and import them into a love.physics world.

Code: Select all

``````function importObjectLayer(world, layer)
for i = 1, #layer.objects do
local obj = layer.objects[i]
local shp = nil
if obj.polyline then
shp = love.physics.newChainShape(false, unpack(obj.polyline))
elseif obj.polygon then
shp = love.physics.newChainShape(true, unpack(obj.polygon))
elseif obj.gid then
--object is a tile, skip
--todo: Consider reading the tile properties to determine if a special shape should be added.
elseif obj.ellipse then
if obj.width == obj.height then
--proper circle
local r = obj.width / 2
shp = love.physics.newCircleShape(r, r, r)
else
--an ellipse
local points = {}
local xr = obj.width / 2
local yr = obj.height / 2
for i=1, 8 do
local ang = math.pi * 2 * i / 8
points[#points + 1] = xr * (1 + math.cos(ang))
points[#points + 1] = yr * (1 + math.sin(ang))
end
shp = love.physics.newChainShape(true, unpack(points))
end
else
--rectangles
--Don't use love.physics.newRectangleShape(), as it will create a rectangle centered around 0, 0.
shp = love.physics.newPolygonShape(0, 0,  obj.width, 0,  obj.width, obj.height,  0, obj.height)
end
if shp ~= nil then
local bdy = love.physics.newBody(world, obj.x, obj.y, "static")
local fxt = love.physics.newFixture(bdy, shp)
end
end
end
``````
The function can be called like this:

Code: Select all

``````love.physics.setMeter(32)
world = love.physics.newWorld(0, 0, true)
importObjectLayer(world, map("Obstructions"))``````
Love's physic engine can then be used to handle collision detection with the terrain or whatever else you decide to mark out.

Posted: Tue Jan 29, 2013 3:41 pm
Tiled 0.9.0 was released yesterday so between getting support for that and refactoring the loading and rendering code I'm going to be busy. I just wanted to let everyone know I'm hard at work on the next version.

Also thanks for the code xenodora. I'm still reviewing your commit on github.

Posted: Tue Jan 29, 2013 8:15 pm
Thanks for all the hard work Kadoba!

Posted: Tue Feb 12, 2013 1:10 am
How does one currently access an object in an object layer?

Posted: Tue Feb 12, 2013 3:28 am

Code: Select all

``map("ObjectLayer").objects[number]``
I believe the number is the order of placement inside Tiled.

Posted: Thu Mar 21, 2013 7:43 pm
Just a status update.

I've been working on the next version of ATL for a while now and I've decided to take it in a new direction. I want to put more of an emphasis as ATL as a loader and less on rendering. I've realized that ATL just tries to do too many things outside of its design scope and it really affects the complexity and maintainability of the library. That means I'm going to cut out a lot of fat. In some cases this will mean more work for the user. However I'm convinced that by narrowing the focus this will ultimately make ATL easier to understand, more flexible, and a better library overall.

The new loading system will make it possible to convert formats between tmx files, lua files, simple tables, and ATL maps. This means you can do things like turn exported lua map files back into the native tmx format or use ATL just for loading/saving map data and come up with your own rendering scheme.

Additionally, I am seriously considering dropping rendering support for isometric maps. From what I have experienced it is a rarely used feature and it has a high cost in terms of maintainability and code complexity. It will be possible to load/save between isometric files and simple tables, you just wont be able to turn them into renderable ATL maps.

It will likely be late next week before I finish the new version. Here's what the current patch notes for 0.13.0 looks like:
• Removed rendering support for isometric maps
• Added Convert.lua to handle conversions between tmx, lua, tables, and ATL maps.
• Added support for Tiled 0.9.0 features
• Revamped rendering algorithm. Improved speeds significantly under certain conditions.
• Maps no longer keep track of the draw range. The values for it must be passed manually when calling draw functions.
• Improved interface for flipped and rotated tiles.

Posted: Fri Mar 22, 2013 5:35 am
I've been trying to learn to use ATL recently, and I have a situation where I need to know the first GID of one of the two tilesets attached to the map I'm loading. This seemed like it would be fairly straight forward. The map documentation says that tileset information is held in map.tilesets. When I try to access it, though, I get "Error: main.lua:26: attempt to call field 'tilesets' (a table value)"

I couldn't find anything in the documentation that would tell me how to get that information other that this, so anyone know how to actually do it?

Posted: Fri Mar 22, 2013 7:46 am
It sounds like you're trying to call the tilesets table like a function.

Code: Select all

``````-- you might be doing this:
map.tilesets("tilesetname").firstgid

-- when you need to be doing this:
map.tilesets["tilesetname"].firstgid``````