Simple Tiled Implementation - STI v1.2.3.0
Re: Simple Tiled Implementation - STI v0.18.2.1
Sensors don't have collision responses, only detections. They are used for walking over top of things like a button that triggers a door to open.
STI - An awesome Tiled library
LÖVE3D - A 3D library for LÖVE 0.10+
Dev Blog | GitHub | excessive ❤ moé
LÖVE3D - A 3D library for LÖVE 0.10+
Dev Blog | GitHub | excessive ❤ moé
Re: Simple Tiled Implementation - STI v1.2.3.0
It's been quite a while since I've made a formal release, but here we are! STI v1.2.3.0 is now out and supports most of the new features added to Tiled since the big 1.0 version bump. Most of the changes and bug fixes in this release actually came from pull requests, so I am very happy that the LOVE community has chipped in to keep STI functioning while I've been distracted with life and other things.
The only feature I am aware of that this release does not currently support is TIled's Text Objects. While I would like to keep STI in feature parity with Tiled, text is one of those things that is a lot more difficult to get right than you'd expect and the amount of work to get text objects working exactly like they do in Tiled begs the question: Is there really a legitimate use for text objects? Does anyone care if they are, or are not in STI? Would a basic implementation be better than none?
As always, please report any bugs or crashes on Github (or here!) and I'll do my best to keep STI maintained as both Tiled and LOVE change and evolve.
The only feature I am aware of that this release does not currently support is TIled's Text Objects. While I would like to keep STI in feature parity with Tiled, text is one of those things that is a lot more difficult to get right than you'd expect and the amount of work to get text objects working exactly like they do in Tiled begs the question: Is there really a legitimate use for text objects? Does anyone care if they are, or are not in STI? Would a basic implementation be better than none?
As always, please report any bugs or crashes on Github (or here!) and I'll do my best to keep STI maintained as both Tiled and LOVE change and evolve.
STI - An awesome Tiled library
LÖVE3D - A 3D library for LÖVE 0.10+
Dev Blog | GitHub | excessive ❤ moé
LÖVE3D - A 3D library for LÖVE 0.10+
Dev Blog | GitHub | excessive ❤ moé
-
- Citizen
- Posts: 65
- Joined: Wed Mar 07, 2018 11:21 pm
Re: Simple Tiled Implementation - STI v1.2.3.0
The only feature I would like to see (because it'd make my life a lot easier) would be a way to get the image from an object, I can get the name, x/y coordinates and so on but not the image. I have my own system for dealing with drawing order, so I need that image for things like NPCs or objects that aren't in the background
Re: Simple Tiled Implementation - STI v1.2.3.0
Can I see an example map? I'd like to see how you are structuring your data so I can determine the best way to add such a feature.
STI - An awesome Tiled library
LÖVE3D - A 3D library for LÖVE 0.10+
Dev Blog | GitHub | excessive ❤ moé
LÖVE3D - A 3D library for LÖVE 0.10+
Dev Blog | GitHub | excessive ❤ moé
-
- Citizen
- Posts: 65
- Joined: Wed Mar 07, 2018 11:21 pm
Re: Simple Tiled Implementation - STI v1.2.3.0
It won't let me send the map files here, but the way I do it currently is simple but tedious. I add in let's say a light pole (the player needs to be able to walk behind that) and then I add the ID of the image (which corresponds to this image database I have) I want in some custom data attached to the object. The maploader then goes through all the objects and spawns in the object. but to get the image currently it has to look through a database with all the images, since I can't rip the image from the map data with STI's current system.
It'd be much simpler if I could just get the data from the same way you get all the other information from objects (name, x,y etc), like going through all the map objects in a loop. No idea how this would be implemented but something like object.image or some function to get the image would be nice
Re: Simple Tiled Implementation - STI v1.2.3.0
Hm.. Tiled allows for custom properties and STI respects those, so couldn't you do something like this in Tiled:
And then this in love:
Or am I misunderstanding something?
Code: Select all
{
id = 1,
name = "",
type = "",
x = 5,
y = 20,
properties = {
collidable = true,
image = "assets/images/tree.png"
-- image = 47 -- if you have an id in a lookup table instead
}
}
Code: Select all
for _, object in ipairs(map.objects) do
if object.properties.image then
object.properties.image = love.graphics.newImage(object.properties.image)
-- object.properties.image = db:get(object.properties.image)
end
end
STI - An awesome Tiled library
LÖVE3D - A 3D library for LÖVE 0.10+
Dev Blog | GitHub | excessive ❤ moé
LÖVE3D - A 3D library for LÖVE 0.10+
Dev Blog | GitHub | excessive ❤ moé
-
- Prole
- Posts: 4
- Joined: Mon Dec 23, 2019 7:52 pm
Re: Simple Tiled Implementation - STI v1.2.3.0
Hey, I see this thread isn't that active anymore but hoping for some help.
The data structure for this module has my head turning. Trying to figure out how to swap a tile with a different tile (door open, door closed). Dug through a few "solutions" that I can't seem to get to work. Mainly due to the lack of explanation on how to retrieve global ID of a tile at (x, y).
Simply put, does anyone have a working example or explanation for how to swap a tile with another tile from the same tileset? Any help is appreciated. Until then, I'm gonna keep banging my head at this to get it to work. Thanks in advance!
The data structure for this module has my head turning. Trying to figure out how to swap a tile with a different tile (door open, door closed). Dug through a few "solutions" that I can't seem to get to work. Mainly due to the lack of explanation on how to retrieve global ID of a tile at (x, y).
Simply put, does anyone have a working example or explanation for how to swap a tile with another tile from the same tileset? Any help is appreciated. Until then, I'm gonna keep banging my head at this to get it to work. Thanks in advance!
- master both
- Party member
- Posts: 262
- Joined: Tue Nov 08, 2011 12:39 am
- Location: Chile
Re: Simple Tiled Implementation - STI v1.2.3.0
I had the same problem a while back and this was what I found:
To swap a tile in a layer you need the tile instance that you want to swap, and the new tile that you want, so you can call map:swapTile.
To get the tile instance, you first need to get the it's tile from it's position:
then, the only way to find it's instance is to search for it and match it's position (this is the only way that I found to do this):
Now that you have the instance, you need the gid of the new tile (it's the id number on "properties" when you click on a tile in Tiled) and use it to get the tile, then you just call map:swapTile with the instance and the new tile:
I hope this helps
To swap a tile in a layer you need the tile instance that you want to swap, and the new tile that you want, so you can call map:swapTile.
To get the tile instance, you first need to get the it's tile from it's position:
Code: Select all
local layer = map.layers["layer_name"]
local tile = layer.data[y][x] -- tile position (+1 for lua indexing)
Code: Select all
local instance = false
local px, py = map:convertTileToPixel(x-1, y-1) -- or (x-1)*map.tilewidth, (y-1)*map.tileheight
for _, ti in pairs(map.tileInstances[tile.gid]) do
if ti.x == px and ti.y == py then
instance = ti
break
end
end
Code: Select all
local new_tile = map.tiles[gid]
map:swapTile(instance, new_tile)
Last edited by master both on Tue Dec 24, 2019 12:36 am, edited 2 times in total.
-
- Prole
- Posts: 4
- Joined: Mon Dec 23, 2019 7:52 pm
Re: Simple Tiled Implementation - STI v1.2.3.0
The way you layed this out makes a lot more sense to me compared to what I've read elsewhere. I understand it now, I just need to know one more detail.
However, it's giving me an error for indexing a nil value for
So how should I go about getting the tile x and y if this isn't working?
Thank you so much for the help though, you have no idea how excited I am to tackle this issue.
What type of x and y value is expected for the layer.data index? On tiled, the door which I want to manipulate is at position (5,8) which correlates to tile position. So in my code I'm doing this.master both wrote: ↑Mon Dec 23, 2019 8:56 pm To get the tile instance, you first need to get the it's tile from it's position:Code: Select all
local layer = map.layers["layer_name"] local tile = layer.data[y][x]
Code: Select all
local tile_x, tile_y = tilemap.map:convertTileToPixel(5, 8)
local layer = tilemap.map.layers['Door']
local tile = layer.data[tile_y][tile_x]
Code: Select all
local tile = layer.data[tile_y][tile_x]
Thank you so much for the help though, you have no idea how excited I am to tackle this issue.
Re: Simple Tiled Implementation - STI v1.2.3.0
Why don't you use objects if it is something like a door? Changing the tilelayer feels somewhat strange
and did you try:
and did you try:
Code: Select all
local tile = layer.data[8][5]
Who is online
Users browsing this forum: No registered users and 3 guests