53 lines
1.0 KiB
GDScript
53 lines
1.0 KiB
GDScript
extends Node
|
|
class_name Room
|
|
|
|
var room_tile_array = []: set = setup_path_grid
|
|
|
|
var path_grid = AStar3D.new()
|
|
|
|
var room_door_array = []
|
|
|
|
var place_id: int = 0
|
|
|
|
#TODO: replace with global dict?
|
|
var direction_array = [
|
|
Vector3i(0, 0, -1),
|
|
Vector3i(1, 0, 0),
|
|
Vector3i(0, 0, 1),
|
|
Vector3i(-1, 0, 0),
|
|
]
|
|
|
|
func save():
|
|
var save_data = {
|
|
# Basics
|
|
"name": name,
|
|
"type": "Room",
|
|
"id": self.get_instance_id(),
|
|
"scene_file_path": scene_file_path,
|
|
"parent": get_parent().get_path(),
|
|
# Connections
|
|
"place_id": place_id,
|
|
# Data
|
|
}
|
|
return save_data
|
|
|
|
func init_room(new_dict):
|
|
setup_path_grid(new_dict)
|
|
for i in new_dict.values():
|
|
i.room = self
|
|
|
|
|
|
func setup_path_grid(new_array):
|
|
|
|
room_tile_array = new_array
|
|
|
|
for i in room_tile_array:
|
|
var id = path_grid.get_available_point_id()
|
|
path_grid.add_point(id, i.grid_pos)
|
|
|
|
for n in direction_array:
|
|
if room_tile_array.has(i.grid_pos + n):
|
|
var closest = path_grid.get_closest_point(i + n)
|
|
if (i + n) == Vector3i(path_grid.get_point_position(closest)):
|
|
path_grid.connect_points(id, closest)
|