diff --git a/doc/classes/TileMap.xml b/doc/classes/TileMap.xml index f67b84f96fe..2fd42666b4f 100644 --- a/doc/classes/TileMap.xml +++ b/doc/classes/TileMap.xml @@ -104,7 +104,8 @@ - Returns the tile source ID of the cell on layer [param layer] at coordinates [param coords]. If [param use_proxies] is [code]false[/code], ignores the [TileSet]'s tile proxies, returning the raw alternative identifier. See [method TileSet.map_tile_proxy]. + Returns the tile source ID of the cell on layer [param layer] at coordinates [param coords]. Returns [code]-1[/code] if the cell does not exist. + If [param use_proxies] is [code]false[/code], ignores the [TileSet]'s tile proxies, returning the raw alternative identifier. See [method TileSet.map_tile_proxy]. @@ -113,8 +114,17 @@ - Returns the [TileData] object associated with the given cell, or [code]null[/code] if the cell is not a [TileSetAtlasSource]. + Returns the [TileData] object associated with the given cell, or [code]null[/code] if the cell does not exist or is not a [TileSetAtlasSource]. If [param use_proxies] is [code]false[/code], ignores the [TileSet]'s tile proxies, returning the raw alternative identifier. See [method TileSet.map_tile_proxy]. + [codeblock] + func get_clicked_tile_power(): + var clicked_cell = tile_map.local_to_map(tile_map.get_local_mouse_position()) + var data = tile_map.get_cell_tile_data(0, clicked_cell) + if data: + return data.get_custom_data("power") + else: + return 0 + [/codeblock] diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 4f282dc0abf..a30b3c900d0 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -2073,7 +2073,7 @@ void TileMap::erase_cell(int p_layer, const Vector2i &p_coords) { int TileMap::get_cell_source_id(int p_layer, const Vector2i &p_coords, bool p_use_proxies) const { ERR_FAIL_INDEX_V(p_layer, (int)layers.size(), TileSet::INVALID_SOURCE); - // Get a cell source id from position + // Get a cell source id from position. const HashMap &tile_map = layers[p_layer].tile_map; HashMap::ConstIterator E = tile_map.find(p_coords); @@ -2129,7 +2129,9 @@ int TileMap::get_cell_alternative_tile(int p_layer, const Vector2i &p_coords, bo TileData *TileMap::get_cell_tile_data(int p_layer, const Vector2i &p_coords, bool p_use_proxies) const { int source_id = get_cell_source_id(p_layer, p_coords, p_use_proxies); - ERR_FAIL_COND_V_MSG(source_id == TileSet::INVALID_SOURCE, nullptr, vformat("Invalid TileSetSource at cell %s. Make sure a tile exists at this cell.", p_coords)); + if (source_id == TileSet::INVALID_SOURCE) { + return nullptr; + } Ref source = tile_set->get_source(source_id); if (source.is_valid()) {