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(): # 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 create_occlusion_mask(): var tile_size = get_used_rect() var mask_image = Image.new() mask_image.create(tile_size.size.x, tile_size.size.y, false, Image.FORMAT_L8) mask_image.fill(Color.black) mask_image.lock() var occluder_ids = [] for occluder in occluders: occluder_ids.append(tile_set.find_tile_by_name(occluder)) for occluder_id in occluder_ids: for cell in get_used_cells_by_id(occluder_id): mask_image.set_pixelv(cell - tile_size.position, Color.white) mask_image.unlock() mask_image.save_png("res://test.png") var mask_texture = ImageTexture.new() mask_texture.create_from_image(mask_image, 0) return mask_texture