|  |  |  | @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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func set_level_range_visible(visible: bool) -> void: | 
					
						
							|  |  |  |     var level_range: CSGBox3D = $LevelRange as CSGBox3D | 
					
						
							|  |  |  |     level_range.visible = visible |