class_name TileMapLayerAccess extends Node var tilemap: TileMapLayer = null var sid: int = 0 func setup() -> void: pass func get_cells_by_type(atlas_coords: Vector2i) -> Array[Vector2i]: return tilemap.get_used_cells_by_id(sid, atlas_coords) func get_cells_by_custom_data(field_name: String, custom_data: Variant) -> Array[Vector2i]: var tiles_with_custom_data: Array = [] for coords in tilemap.get_used_cells(): var tile_data: TileData = tilemap.get_cell_tile_data(coords) if tile_data.get_custom_data(field_name) == custom_data: tiles_with_custom_data.append(coords) return tiles_with_custom_data func get_custom_data(coords: Vector2i, field_name: String) -> Variant: var tile_data: TileData = tilemap.get_cell_tile_data(coords) return tile_data.get_custom_data(field_name) func get_cells(positions: Array[Vector2i]) -> Array[TileData]: var tiles: Array = [] for coords in positions: tiles.append(tilemap.get_cell_tile_data(coords)) return tiles func get_cell(position: Vector2i) -> TileData: return tilemap.get_cell_tile_data(position) func set_cell(position: Vector2i, atlas_coords: Vector2i) -> void: tilemap.set_cell(position, sid, atlas_coords) func clear_cell(position: Vector2i) -> void: tilemap.set_cell(position, -1) func clear_cells() -> void: for coords in tilemap.get_used_cells(): tilemap.set_cell(coords, -1) func local_to_cell(global_position: Vector2) -> Vector2i: return tilemap.local_to_map(global_position) func cell_to_local(cell_position: Vector2i) -> Vector2: return tilemap.map_to_local(cell_position)