|  |  |  | extends Node3D | 
					
						
							|  |  |  | class_name Level | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var level_instance_list: Array[LevelInstance] | 
					
						
							|  |  |  | var born_pos: Vector3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @onready var grid_block_material: Material = load("res://render/material/level_grid_block.tres") as Material | 
					
						
							|  |  |  | @onready var grass_material: Material = load("res://render/material/level_grass.tres") as Material | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func init() -> void: | 
					
						
							|  |  |  | 	grid_block_material.set_shader_parameter("is_link", false) | 
					
						
							|  |  |  | 	grid_block_material.set_shader_parameter("is_target", true) | 
					
						
							|  |  |  | 	grid_block_material.set_shader_parameter("is_focus", true) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func get_level_instance_list() -> Array[LevelInstance]: | 
					
						
							|  |  |  | 	if not level_instance_list: | 
					
						
							|  |  |  | 		level_instance_list = [] | 
					
						
							|  |  |  | 		var rooms_node: Node3D       = %Levels as Node3D | 
					
						
							|  |  |  | 		var level_character: GridMap = %LevelGridCharacter as GridMap | 
					
						
							|  |  |  | 		level_character.visible = false | 
					
						
							|  |  |  | 		for rooms_node_child in rooms_node.get_children(): | 
					
						
							|  |  |  | 			if not rooms_node_child is LevelArea: | 
					
						
							|  |  |  | 				continue | 
					
						
							|  |  |  | 			for rooms_node_child_child in rooms_node_child.get_children(): | 
					
						
							|  |  |  | 				if rooms_node_child_child is LevelInstance: | 
					
						
							|  |  |  | 					rooms_node_child_child.level_area_cfg = rooms_node_child.cfg | 
					
						
							|  |  |  | 					rooms_node_child_child.set_level_range_visible(false) | 
					
						
							|  |  |  | 					level_instance_list.append(rooms_node_child_child) | 
					
						
							|  |  |  | 					rooms_node_child_child.init() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return level_instance_list | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func get_born_pos() -> Vector3: | 
					
						
							|  |  |  | 	if not born_pos: | 
					
						
							|  |  |  | 		var born_pos_node: Node3D = %BornPos as Node3D | 
					
						
							|  |  |  | 		born_pos = born_pos_node.get_global_position() | 
					
						
							|  |  |  | 	return born_pos | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func set_player_position(pos: Vector3) -> void: | 
					
						
							|  |  |  | 	grid_block_material.set_shader_parameter("target_position", pos) | 
					
						
							|  |  |  | 	grass_material.set_shader_parameter("character_position", pos) |