GameMaker Layer type mismatch?

cidwel

Member
Hello.

I want to iterate a bunch of layers, then retrieve the ones that are tilesets and do some operations. So I have this:

layerlisty.png

And I have this code for testing the type of layers:

Code:
var tilesetList = layer_get_all();

for (var i = 0; i < array_length_1d(tilesetList); i++) {
    var tileset = tilesetList[i];
    var layerName = layer_get_name(tileset);
    var layerId = layer_get_id(layerName)
 
    if (layer_get_element_type(layerId) == layerelementtype_tilemap) {
        log(string(layer_get_name(tileset)) + " IS tilemap");
    } else if (layer_get_element_type(layerId) == layerelementtype_background) {
        log(string(layer_get_name(tileset)) + " IS bg");
    } else if (layer_get_element_type(layerId) == layerelementtype_instance) {
        log(string(layer_get_name(tileset)) + " IS instance");
    } else if (layer_get_element_type(layerId) == layerelementtype_sprite) {
        log(string(layer_get_name(tileset)) + " IS sprite");
    } else if (layer_get_element_type(layerId) == layerelementtype_particlesystem) {
        log(string(layer_get_name(tileset)) + " IS part");
    } else if (layer_get_element_type(layerId) == layerelementtype_tile) {
        log(string(layer_get_name(tileset)) + " IS tile");
    }
}
When I execute it I get this in the console:
Code:
[oCollisionGenerator(100000)] til_base1 IS tilemap
[oCollisionGenerator(100000)] til_atl_collisions IS tilemap
[oCollisionGenerator(100000)] til_atl_plain IS tilemap
[oCollisionGenerator(100000)] til_base0 IS instance
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_get_element_type() - can't find specified element
layer_tilemap_get_id() - specified tilemap not found
Why til_base0 is "instance"? Shouldn't be "tilemap"? Am I missing something?
rombug.png


I upload it here because I think I'm missing something and it is not a bug

Many thanks :)
 
Last edited:
Looks like you are not using layer_get_element_type incorrectly. You are supposed to pass the element that is on the layer, not the layer itself. So you would need to get the first element that is on that layer and then see what type that element is. Don't have GMS2 up and running, but guess something like this:
Code:
var tilesetList = layer_get_all();

for (var i = 0; i < array_length_1d(tilesetList); i++) {
   var tileset = tilesetList[i];
   var layerName = layer_get_name(tileset);
   var layerId = layer_get_id(layerName)

  var layerElements = layer_get_all_elements(layerId);

   if (layer_get_element_type(layerElements[0]) == layerelementtype_tilemap) {
       log(string(layerName) + " IS tilemap");
   } else if (layer_get_element_type(layerElements[0]) == layerelementtype_background) {
       log(string(layerName) + " IS bg");
   } else if (layer_get_element_type(layerElements[0]) == layerelementtype_instance) {
       log(string(layerName) + " IS instance");
   } else if (layer_get_element_type(layerElements[0]) == layerelementtype_sprite) {
       log(string(layerName) + " IS sprite");
   } else if (layer_get_element_type(layerElements[0]) == layerelementtype_particlesystem) {
       log(string(layerName) + " IS part");
   } else if (layer_get_element_type(layerElements[0]) == layerelementtype_tile) {
       log(string(layerName) + " IS tile");
   }
}
You were also calling layer_get_name(tileset) every time you were logging the message, but you already had the layer name in the layerName variable, so that's what else I changed.

See if this works for you.

Docs for layer_get_element_type: http://docs2.yoyogames.com/source/_...ence/rooms/layers/layer_get_element_type.html
 
Top