extends TileMap

class_name MapTiles

var transparentImage = preload("res://Graphics/transparent.png")

export(NodePath) var extended_tilemap_node 

export var occluders = ["Wall"]

export var shadow_intensity = 0.2

onready var extended_tilemap = get_node(extended_tilemap_node) as TileMap

func run_conversions():
	# Make occluders
	make_occluders()

	# Convert 2x2 tiles to 1x1 if possible
	convert_extended()


func convert_extended():
	var extended = extended_tilemap.tile_set
	for id in tile_set.get_tiles_ids():
		var name = tile_set.tile_get_name(id)
		var extended_id = extended.find_tile_by_name(name)
		if extended_id < 0:
			# Not found, skip it
			continue
		# Find all uses of this tile
		for cell in get_used_cells_by_id(id):
			var x = cell.x * 2
			var y = cell.y * 2
			extended_tilemap.set_cell(x, y, extended_id)
			extended_tilemap.set_cell(x+1, y, extended_id)
			extended_tilemap.set_cell(x, y+1, extended_id)
			extended_tilemap.set_cell(x+1, y+1, extended_id)
		tile_set.tile_set_texture(id, transparentImage)
	extended_tilemap.update_bitmask_region()
	extended_tilemap.update_dirty_quadrants()

func make_occluders():
	var occluder_ids = []
	for occluder_name in occluders:
		var id = tile_set.find_tile_by_name(occluder_name)
		if id >= 0:
			occluder_ids.push_back(id)
	for id in tile_set.get_tiles_ids():
		if occluder_ids.find(id) < 0:
			# Not an occluder, skip it
			continue
		# Find all uses of this tile
		for cell in get_used_cells_by_id(id):
			# Check sides
			var occluder = Occluder.new()
			occluder.ignore_sides = [
				occluder_ids.find(get_cell(cell.x, cell.y-1)) >= 0, # Top
				occluder_ids.find(get_cell(cell.x+1, cell.y)) >= 0, # Right
				occluder_ids.find(get_cell(cell.x, cell.y+1)) >= 0, # Bottom
				occluder_ids.find(get_cell(cell.x-1, cell.y)) >= 0  # Left
			]
			occluder.transform.origin = map_to_world(cell)
			add_child(occluder)
			

func set_occluder_origin(origin):
	for child in get_children():
		if child is Occluder:
			child.origin = origin
