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 @onready var material_grid_mark_white: Material = load("res://render/material/level_grid_mark_white.tres") as Material @onready var material_grid_mark_black: Material = load("res://render/material/level_grid_mark_black.tres") as Material @onready var material_grid_mark_green: Material = load("res://render/material/level_grid_mark_green.tres") as Material func init() -> void: grid_block_material.set_shader_parameter("is_target", true) grid_block_material.set_shader_parameter("is_focus", true) material_grid_mark_white.set_shader_parameter("is_open", true) material_grid_mark_black.set_shader_parameter("is_open", true) material_grid_mark_green.set_shader_parameter("is_open", true) for level_instance in level_instance_list: level_instance.init_level_character() level_instance.init_level_main() 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) 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_y", pos.y) grass_material.set_shader_parameter("character_position", pos)