tool
extends TileMap

class_name NavigationTileMap

var astar : AStar2D = AStar2D.new()

# 遮挡物
export(NodePath) var collsion_tilemap_path : NodePath

# 初始化tilemap配置
func _init():
	self.tile_set = load("res://images/mota_tileset.tres")
	self.cell_size = Vector2(32,32)
	
# 初始化node和edge
func _ready():
	var cells := get_cells()
	init_nodes(cells)
	init_edges(cells)

# 初始化nodes
func init_nodes(cells:Array):
	for index in range(cells.size()):
		var cell_position = cells[index] * cell_size
		cell_position.x += 16
		cell_position.y += 16
		astar.add_point(index, cell_position)

# 初始化edge
func init_edges(cells:Array):
	for index in range(cells.size()):
		var cell = cells[index]
		#left
		var left_cell_index = cells.find(Vector2(cell.x - 1,cell.y))
		if left_cell_index != -1:
			astar.connect_points(index,left_cell_index)
		#right
		var right_cell_index = cells.find(Vector2(cell.x + 1,cell.y))
		if right_cell_index != -1:
			astar.connect_points(index,right_cell_index)
		#up
		var up_cell_index = cells.find(Vector2(cell.x,cell.y - 1))
		if up_cell_index != -1:
			astar.connect_points(index,up_cell_index)
		#down
		var down_cell_index = cells.find(Vector2(cell.x,cell.y + 1))
		if down_cell_index != -1:
			astar.connect_points(index,down_cell_index)

# 返回显示的道路需要去除被遮挡的道路
func get_cells() -> Array:
	var cells = get_used_cells()
	if not collsion_tilemap_path.is_empty():
		var collsion_tilemap = get_node(collsion_tilemap_path) as TileMap
		print("collsion_tilemap ", collsion_tilemap)
		var collsion_cells = collsion_tilemap.get_used_cells()
		for collsion_cell in collsion_cells:
			var index = cells.find(collsion_cell)
			if index != -1:
				print("index ",index)
				print("cell ",cells[index])
				cells.remove(index)
	return cells
