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.

73 lines
2.2 KiB
GDScript

1 year ago
@tool
extends Node3D
class_name LevelInstance
@export var size: Vector3i = Vector3i.ONE:
set(value):
if (value.x<1) or (value.y<1) or (value.z<1):
value = Vector3i.ONE
size = value
_on_size_change()
@export var is_force_battle: bool
1 year ago
@export var focus: bool:
get: return false
set(value):
set_focus_from(false)
set_focus_to(true)
@export var cancel_focus: bool:
get: return false
set(value):
set_focus_from(false)
set_focus_to(false)
@onready var grid_block_material: Material = load("res://render/material/grid_block.tres") as Material
1 year ago
var level_area_cfg: LevelAreaCfg #运行时设置
func _on_size_change() -> void:
var level_range: CSGBox3D = $LevelRange as CSGBox3D
var size_basic: Vector3 = Setting.size_basic
level_range.size = Vector3(size.x*size_basic.x, size.y*size_basic.y, size.z*size_basic.z)
level_range.position = level_range.size / 2
1 year ago
func set_focus_from(is_focus: bool) -> void:
_set_focus(is_focus, "from")
func set_focus_to(is_focus: bool) -> void:
_set_focus(is_focus, "to")
func _set_focus(is_focus: bool, key: String) -> void:
if is_focus:
grid_block_material.set_shader_parameter("is_focus_"+key, true)
var level_range: CSGBox3D = $LevelRange as CSGBox3D
var level_size: Vector3 = level_range.size
var pos_min: Vector3 = get_global_position() + Vector3(0.640001, 0.640001, 0.640001)
var pos_max: Vector3 = get_global_position() + level_size - Vector3(0.640001, 0.639999, 0.639999)
grid_block_material.set_shader_parameter("focus_min_"+key, pos_min)
grid_block_material.set_shader_parameter("focus_max_"+key, pos_max)
else:
grid_block_material.set_shader_parameter("is_focus_"+key, false)
1 year ago
func level_size() -> Vector2:
var level_range: CSGBox3D = $LevelRange as CSGBox3D
var level_size: Vector3 = level_range.size
return Vector2(level_size.x, level_size.z)
func level_pos() -> Vector2:
var pos: Vector3 = get_global_position()
return Vector2(pos.x, pos.z)
1 year ago
func set_level_range_visible(visible: bool) -> void:
var level_range: CSGBox3D = $LevelRange as CSGBox3D
level_range.visible = visible