You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			54 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			GDScript
		
	
			
		
		
	
	
			54 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			GDScript
		
	
| 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/grid_block.tres") as Material
 | |
| @onready var grid_block_link_material: Material = load("res://render/material/grid_block_link.tres") as Material
 | |
| @onready var grass_material: Material = load("res://render/material/wind_grass.tres") as Material
 | |
| 
 | |
| 
 | |
| func init() -> void:
 | |
| 	grid_block_material.set_shader_parameter("is_link", false)
 | |
| 	grid_block_link_material.set_shader_parameter("is_link", true)
 | |
| 	grid_block_material.set_shader_parameter("is_target", true)
 | |
| 	grid_block_link_material.set_shader_parameter("is_target", true)
 | |
| 	grid_block_material.set_shader_parameter("show_air_wall", false)
 | |
| 
 | |
| 
 | |
| 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 = %LevelCharacter 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_character_spots(level_character)
 | |
| 
 | |
| 	return level_instance_list
 | |
| 
 | |
| 
 | |
| func set_level_loading_rate(rate: float) -> void:
 | |
| 	grid_block_material.set_shader_parameter("focus_rate", rate)
 | |
| 
 | |
| 
 | |
| 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)
 | |
| 	grid_block_link_material.set_shader_parameter("target_position", pos)
 | |
| 	grass_material.set_shader_parameter("character_position", pos)
 |