gai-ca2/project/scripts/tilemap/TileMapLayerAccess.gd

60 lines
1.6 KiB
GDScript

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)