You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When creating a tileset by code with custom data layers, removing a layer with remove_custom_data_layer does not update the name-to-layer mapping; get_custom_data_layer_by_name will continue to return that layer's original index.
This has a downstream effect of causing TileData objects attempting to use get_custom_data('Layer B') to return invalid data (whatever custom data is now in Layer B's old index; e.g. Layer C).
I would expect that after using remove_custom_data_layer, I would be able to still use get_custom_data_layer_by_name on that tileset.
Steps to reproduce
Run this code to see that getting Layer B by name after removing the first layer continues to return its original index (1) when in reality it is now at index 0.
var tileset:TileSet = TileSet.new()
tileset.add_custom_data_layer()
tileset.set_custom_data_layer_name(0, 'Layer A')
tileset.set_custom_data_layer_type(0, TYPE_INT)
tileset.add_custom_data_layer()
tileset.set_custom_data_layer_name(1, 'Layer B')
tileset.set_custom_data_layer_type(1, TYPE_STRING)
print('Layer index 0 name : ', tileset.get_custom_data_layer_name(0)) # Layer A
print('Layer index 1 name : ', tileset.get_custom_data_layer_name(1)) # Layer B
print('Layer B is on index : ', tileset.get_custom_data_layer_by_name("Layer B")) # 1
print('----- removing custom data layer 0 -----')
tileset.remove_custom_data_layer(0)
print('Layer index 0 name : ', tileset.get_custom_data_layer_name(0)) # Layer B
print('Layer index 1 name : ', tileset.get_custom_data_layer_name(1)) # prints an error, as expected
print('Layer B is on index : ', tileset.get_custom_data_layer_by_name("Layer B")) # returns 1 still! should return 0.
Godot version
v4.0.3.stable.mono.official [5222a99]
System information
macOS Monterey 12.6.6 (21G646)
Issue description
When creating a tileset by code with custom data layers, removing a layer with
remove_custom_data_layer
does not update the name-to-layer mapping;get_custom_data_layer_by_name
will continue to return that layer's original index.This has a downstream effect of causing TileData objects attempting to use
get_custom_data('Layer B')
to return invalid data (whatever custom data is now in Layer B's old index; e.g. Layer C).I would expect that after using
remove_custom_data_layer
, I would be able to still useget_custom_data_layer_by_name
on that tileset.Steps to reproduce
Run this code to see that getting Layer B by name after removing the first layer continues to return its original index (1) when in reality it is now at index 0.
Minimal reproduction project
RemoveCustomDataLayer.zip
The text was updated successfully, but these errors were encountered: