|
|
|
|
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("character_position", pos)
|
|
|
|
|
grass_material.set_shader_parameter("character_position", pos)
|