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 _ready(): # 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