extends Node class_name Room var room_to_tile = []: set = setup_path_grid var path_grid = AStar3D.new() var room_to_door = [] var place_id: int = 0 func save(): var save_data = { #Basics "id": self.get_instance_id(), "type": "Room", "scene_file_path": scene_file_path, "parent": get_parent().get_instance_id(), #Connections "place_id": place_id, #Data } return save_data func init_room(new_dict): #When a room is created, run through these steps setup_path_grid(new_dict) for i in new_dict.values(): i.room = self func setup_path_grid(new_array): #Sets up the A* grid of tiles that are in this room. #TODO: Better grid changing path_grid.clear() room_to_tile = new_array var room_to_tile_positions: Array for i in room_to_tile: var id = path_grid.get_available_point_id() var point_pos = Vector3(i.grid_pos) + Vector3(0.5, 0, 0.5) path_grid.add_point(id, point_pos) room_to_tile_positions.append(point_pos) for n in Tile.direction_vector_dict.values(): var neighbor_pos = point_pos + Vector3(n) if room_to_tile_positions.has(neighbor_pos): var closest = path_grid.get_closest_point(neighbor_pos) if (neighbor_pos) == Vector3(path_grid.get_point_position(closest)): path_grid.connect_points(id, closest) func get_room_path(start, end): for i in room_to_tile: if i.grid_pos == end: var start_point = path_grid.get_closest_point(Vector3(start) + Vector3(0.5, 0, 0.5)) var end_point = path_grid.get_closest_point(Vector3(end) + Vector3(0.5, 0, 0.5)) var path = path_grid.get_point_path(start_point, end_point) return path return false