Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Removing a custom data layer does not update custom data name-to-layer mappings. #78485

Closed
wickworks opened this issue Jun 20, 2023 · 0 comments · Fixed by #78492
Closed

Removing a custom data layer does not update custom data name-to-layer mappings. #78485

wickworks opened this issue Jun 20, 2023 · 0 comments · Fixed by #78492
Milestone

Comments

@wickworks
Copy link

wickworks commented Jun 20, 2023

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 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.

Minimal reproduction project

RemoveCustomDataLayer.zip

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Done
Development

Successfully merging a pull request may close this issue.

2 participants