关卡 优化

master
chendian 1 year ago
parent f03080c0a8
commit 0eee0cc02c

@ -58,7 +58,11 @@ func _get_option_visibility(path, option, options):
func _import(source_path, destination_path, options, _platforms, _gen_files): func _import(source_path, destination_path, options, _platforms, _gen_files):
var meshes = VoxImporterCommon.new().import(source_path, destination_path, options, _platforms, _gen_files); var meshes = VoxImporterCommon.new().import(source_path, destination_path, options, _platforms, _gen_files);
var material_block: Material = load("res://render/material/grid_block.tres") as Material var material_block: Material
if destination_path.ends_with("link"):
material_block = load("res://render/material/grid_block_link.tres") as Material
else:
material_block = load("res://render/material/grid_block.tres") as Material
meshes[0].surface_set_material(0, material_block) meshes[0].surface_set_material(0, material_block)
var full_path = "%s.%s" % [ destination_path, _get_save_extension() ] var full_path = "%s.%s" % [ destination_path, _get_save_extension() ]
var res = ResourceSaver.save(meshes[0], full_path) var res = ResourceSaver.save(meshes[0], full_path)

@ -5,5 +5,14 @@
[resource] [resource]
render_priority = 0 render_priority = 0
shader = ExtResource("1_0sxqg") shader = ExtResource("1_0sxqg")
shader_parameter/is_link = false
shader_parameter/is_focus_from = false
shader_parameter/is_focus_to = false
shader_parameter/focus_min_from = Vector3(0, 0, 0)
shader_parameter/focus_max_from = Vector3(0, 0, 0)
shader_parameter/focus_min_to = Vector3(0.640001, 0.640001, -14.72)
shader_parameter/focus_max_to = Vector3(12.16, 4.48, -8.32)
shader_parameter/focus_rate = 1.0
shader_parameter/is_target = false
shader_parameter/target_position = Vector3(0, 1.28, 1) shader_parameter/target_position = Vector3(0, 1.28, 1)
shader_parameter/pixel_size = Vector2(0.02, 0.02) shader_parameter/pixel_size = Vector2(0.02, 0.02)

@ -0,0 +1,18 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://djv81olb3un82"]
[ext_resource type="Shader" path="res://render/shader/grid_block.gdshader" id="1_qhmtc"]
[resource]
render_priority = 0
shader = ExtResource("1_qhmtc")
shader_parameter/is_link = true
shader_parameter/is_focus_from = false
shader_parameter/is_focus_to = false
shader_parameter/focus_min_from = Vector3(0, 0, 0)
shader_parameter/focus_max_from = Vector3(0, 0, 0)
shader_parameter/focus_min_to = Vector3(115.84, 0.640001, -37.76)
shader_parameter/focus_max_to = Vector3(140.16, 4.48, -23.68)
shader_parameter/focus_rate = 1.0
shader_parameter/is_target = false
shader_parameter/target_position = Vector3(0, 1.28, 1)
shader_parameter/pixel_size = Vector2(0.02, 0.02)

@ -1,4 +1,14 @@
shader_type spatial; shader_type spatial;
render_mode depth_draw_always;
uniform bool is_link = false;
uniform bool is_focus_from = false;
uniform bool is_focus_to = false;
uniform vec3 focus_min_from = vec3(0,0,0);
uniform vec3 focus_max_from = vec3(0,0,0);
uniform vec3 focus_min_to = vec3(0,0,0);
uniform vec3 focus_max_to = vec3(0,0,0);
uniform float focus_rate = 1.0;
uniform bool is_target = false;
uniform vec3 target_position = vec3(0, 1.28, 1); uniform vec3 target_position = vec3(0, 1.28, 1);
varying vec3 world_position; varying vec3 world_position;
@ -9,16 +19,46 @@ void vertex()
world_position = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz; world_position = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
} }
bool is_in_focus(vec3 f_min,vec3 f_max){
if(world_position.x<f_min.x||world_position.x>f_max.x){return false;}
if(world_position.z>f_max.z){return false;}
if(world_position.y>f_max.y && world_position.z>f_min.z){return false;}
return true;
}
void fragment() { void fragment() {
vec3 c = COLOR.rgb; if(!is_link){
float offset_x = floor((world_position.x-target_position.x) / 0.02) * 0.02; if(is_focus_from || is_focus_to){
float offset_y = floor((world_position.y-target_position.y) / 0.02) * 0.02; bool is_in_focus_from = is_in_focus(focus_min_from,focus_max_from);
float offset_z = floor((world_position.z-target_position.z) / 0.02) * 0.02; bool is_in_focus_to = is_in_focus(focus_min_to,focus_max_to);
float brightness = clamp(1.0 + (offset_y)* 0.4,0.0,1.0); if(is_in_focus_from&&is_in_focus_to){
float contrast = 1.0 - (abs(offset_y)) * 0.05; ALPHA = 1.0;
float saturation = 1.0 - (abs(offset_y)) * 0.05; }
else if(is_focus_to&&is_in_focus_to){
//ALPHA = focus_rate;
ALPHA = 1.0;
}
else if(is_focus_from&&is_in_focus_from){
//ALPHA = 1.0 - focus_rate;
discard;
}else{
discard;
}
}
}
vec3 c = COLOR.rgb;
float brightness = 1.0;
if(is_target){
float offset_y = abs(floor((world_position.y-target_position.y) / 0.02) * 0.02);
offset_y = max(0.0,offset_y-0.64);
float rate = clamp(1.0-offset_y/4.48,0.0,1.0);
brightness = rate;
}
vec3 world_normal = (INV_VIEW_MATRIX * vec4(NORMAL, 0.0)).xyz;
if(world_normal.y<0.1){
brightness = brightness*0.6;
}
c.rgb = mix(vec3(0.0), c.rgb, brightness); c.rgb = mix(vec3(0.0), c.rgb, brightness);
c.rgb = mix(vec3(0.5), c.rgb, contrast);
c.rgb = mix(vec3(dot(vec3(1.0), c.rgb) * 0.33333), c.rgb, saturation);
ALBEDO = c.rgb; ALBEDO = c.rgb;
} }

@ -0,0 +1,18 @@
[remap]
importer="MagicaVoxel.With.Extensions.To.Mesh"
type="Mesh"
uid="uid://bxs50cstj2jdp"
path="res://.godot/imported/g_f_graybox_link.vox-f2a31f8e0f9ac2328106d4be7ab69abf.mesh"
[deps]
source_file="res://resource/mesh_level/g_f_graybox_link.vox"
dest_files=["res://.godot/imported/g_f_graybox_link.vox-f2a31f8e0f9ac2328106d4be7ab69abf.mesh"]
[params]
Scale=0.02
GreedyMeshGenerator=true
SnapToGround=false
FirstKeyframeOnly=true

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -31,58 +31,46 @@ tracks/1/keys = {
tracks/2/type = "value" tracks/2/type = "value"
tracks/2/imported = false tracks/2/imported = false
tracks/2/enabled = true tracks/2/enabled = true
tracks/2/path = NodePath("View:frame") tracks/2/path = NodePath("Status:break_level")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9), "times": PackedFloat32Array(0, 0.4, 0.6),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1),
"update": 1, "update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] "values": [0, 3, 4]
} }
tracks/3/type = "value" tracks/3/type = "value"
tracks/3/imported = false tracks/3/imported = false
tracks/3/enabled = true tracks/3/enabled = true
tracks/3/path = NodePath("Status:break_level") tracks/3/path = NodePath("Status:speed_up_rate")
tracks/3/interp = 1 tracks/3/interp = 1
tracks/3/loop_wrap = true tracks/3/loop_wrap = true
tracks/3/keys = { tracks/3/keys = {
"times": PackedFloat32Array(0, 0.4, 0.6), "times": PackedFloat32Array(0.2, 0.3),
"transitions": PackedFloat32Array(1, 1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 1, "update": 1,
"values": [0, 3, 4] "values": [-0.5, -1.0]
} }
tracks/4/type = "value" tracks/4/type = "value"
tracks/4/imported = false tracks/4/imported = false
tracks/4/enabled = true tracks/4/enabled = true
tracks/4/path = NodePath("Status:speed_up_rate") tracks/4/path = NodePath("Status:skill_move_speed")
tracks/4/interp = 1 tracks/4/interp = 1
tracks/4/loop_wrap = true tracks/4/loop_wrap = true
tracks/4/keys = { tracks/4/keys = {
"times": PackedFloat32Array(0.2, 0.3), "times": PackedFloat32Array(0.1, 0.3),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 1, "update": 1,
"values": [-0.5, -1.0] "values": [2.0, 0.0]
} }
tracks/5/type = "value" tracks/5/type = "method"
tracks/5/imported = false tracks/5/imported = false
tracks/5/enabled = true tracks/5/enabled = true
tracks/5/path = NodePath("Status:skill_move_speed") tracks/5/path = NodePath("Effect")
tracks/5/interp = 1 tracks/5/interp = 1
tracks/5/loop_wrap = true tracks/5/loop_wrap = true
tracks/5/keys = { tracks/5/keys = {
"times": PackedFloat32Array(0.1, 0.3),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [2.0, 0.0]
}
tracks/6/type = "method"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("Effect")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0.1), "times": PackedFloat32Array(0.1),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"values": [{ "values": [{
@ -90,3 +78,15 @@ tracks/6/keys = {
"method": &"cast_attack_particle1" "method": &"cast_attack_particle1"
}] }]
} }
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("View:frame")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
}

@ -29,117 +29,117 @@ tracks/1/keys = {
"update": 1, "update": 1,
"values": ["fist_skill02"] "values": ["fist_skill02"]
} }
tracks/2/type = "value" tracks/2/type = "position_3d"
tracks/2/imported = false tracks/2/imported = false
tracks/2/enabled = true tracks/2/enabled = true
tracks/2/path = NodePath("View:frame") tracks/2/path = NodePath("%Throw")
tracks/2/interp = 1 tracks/2/interp = 0
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = PackedFloat32Array(0, 1, 0.75, 0.4, 0, 0.1, 1, 0.5, 0.5, 0, 0.2, 1, 0, 1, 0, 0.3, 1, 0, 1, 0)
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9), tracks/3/type = "scale_3d"
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
}
tracks/3/type = "position_3d"
tracks/3/imported = false tracks/3/imported = false
tracks/3/enabled = true tracks/3/enabled = true
tracks/3/path = NodePath("%Throw") tracks/3/path = NodePath("%Throw")
tracks/3/interp = 0 tracks/3/interp = 1
tracks/3/loop_wrap = true tracks/3/loop_wrap = true
tracks/3/keys = PackedFloat32Array(0, 1, 0.75, 0.4, 0, 0.1, 1, 0.5, 0.5, 0, 0.2, 1, 0, 1, 0, 0.3, 1, 0, 1, 0) tracks/3/keys = PackedFloat32Array(0, 1, -1, 1, 1)
tracks/4/type = "scale_3d" tracks/4/type = "value"
tracks/4/imported = false tracks/4/imported = false
tracks/4/enabled = true tracks/4/enabled = true
tracks/4/path = NodePath("%Throw") tracks/4/path = NodePath("%Throw:animation")
tracks/4/interp = 1 tracks/4/interp = 1
tracks/4/loop_wrap = true tracks/4/loop_wrap = true
tracks/4/keys = PackedFloat32Array(0, 1, -1, 1, 1) tracks/4/keys = {
"times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [&"airhit1", &"airhit3"]
}
tracks/5/type = "value" tracks/5/type = "value"
tracks/5/imported = false tracks/5/imported = false
tracks/5/enabled = true tracks/5/enabled = true
tracks/5/path = NodePath("%Throw:animation") tracks/5/path = NodePath("%Throw:frame")
tracks/5/interp = 1 tracks/5/interp = 1
tracks/5/loop_wrap = true tracks/5/loop_wrap = true
tracks/5/keys = { tracks/5/keys = {
"times": PackedFloat32Array(0, 0.2), "times": PackedFloat32Array(0, 0.1, 0.2, 0.3),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 1, "update": 1,
"values": [&"airhit1", &"airhit3"] "values": [0, 1, 2, 3]
} }
tracks/6/type = "value" tracks/6/type = "value"
tracks/6/imported = false tracks/6/imported = false
tracks/6/enabled = true tracks/6/enabled = true
tracks/6/path = NodePath("%Throw:frame") tracks/6/path = NodePath("Status:break_level")
tracks/6/interp = 1 tracks/6/interp = 1
tracks/6/loop_wrap = true tracks/6/loop_wrap = true
tracks/6/keys = { tracks/6/keys = {
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3), "times": PackedFloat32Array(0, 0.6, 0.8),
"transitions": PackedFloat32Array(1, 1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1),
"update": 1, "update": 1,
"values": [0, 1, 2, 3] "values": [0, 3, 4]
} }
tracks/7/type = "value" tracks/7/type = "value"
tracks/7/imported = false tracks/7/imported = false
tracks/7/enabled = true tracks/7/enabled = true
tracks/7/path = NodePath("Status:break_level") tracks/7/path = NodePath("Status:speed_up_rate")
tracks/7/interp = 1 tracks/7/interp = 1
tracks/7/loop_wrap = true tracks/7/loop_wrap = true
tracks/7/keys = { tracks/7/keys = {
"times": PackedFloat32Array(0, 0.6, 0.8), "times": PackedFloat32Array(0.1, 0.4),
"transitions": PackedFloat32Array(1, 1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 1, "update": 1,
"values": [0, 3, 4] "values": [-0.5, -1.0]
} }
tracks/8/type = "value" tracks/8/type = "value"
tracks/8/imported = false tracks/8/imported = false
tracks/8/enabled = true tracks/8/enabled = true
tracks/8/path = NodePath("Status:speed_up_rate") tracks/8/path = NodePath("Status:skill_move_speed")
tracks/8/interp = 1 tracks/8/interp = 1
tracks/8/loop_wrap = true tracks/8/loop_wrap = true
tracks/8/keys = { tracks/8/keys = {
"times": PackedFloat32Array(0.1, 0.4), "times": PackedFloat32Array(0.1, 0.4),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 1, "update": 1,
"values": [-0.5, -1.0] "values": [2.0, 0.0]
} }
tracks/9/type = "value" tracks/9/type = "method"
tracks/9/imported = false tracks/9/imported = false
tracks/9/enabled = true tracks/9/enabled = true
tracks/9/path = NodePath("Status:skill_move_speed") tracks/9/path = NodePath("Battle")
tracks/9/interp = 1 tracks/9/interp = 1
tracks/9/loop_wrap = true tracks/9/loop_wrap = true
tracks/9/keys = { tracks/9/keys = {
"times": PackedFloat32Array(0.1, 0.4), "times": PackedFloat32Array(0.4),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1),
"update": 1, "values": [{
"values": [2.0, 0.0] "args": [],
"method": &"attack1"
}]
} }
tracks/10/type = "method" tracks/10/type = "method"
tracks/10/imported = false tracks/10/imported = false
tracks/10/enabled = true tracks/10/enabled = true
tracks/10/path = NodePath("Battle") tracks/10/path = NodePath("Effect")
tracks/10/interp = 1 tracks/10/interp = 1
tracks/10/loop_wrap = true tracks/10/loop_wrap = true
tracks/10/keys = { tracks/10/keys = {
"times": PackedFloat32Array(0.4), "times": PackedFloat32Array(0.3),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"values": [{ "values": [{
"args": [], "args": [],
"method": &"attack1" "method": &"cast_attack_particle1"
}] }]
} }
tracks/11/type = "method" tracks/11/type = "value"
tracks/11/imported = false tracks/11/imported = false
tracks/11/enabled = true tracks/11/enabled = true
tracks/11/path = NodePath("Effect") tracks/11/path = NodePath("View:frame")
tracks/11/interp = 1 tracks/11/interp = 1
tracks/11/loop_wrap = true tracks/11/loop_wrap = true
tracks/11/keys = { tracks/11/keys = {
"times": PackedFloat32Array(0.3), "times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"values": [{ "update": 1,
"args": [], "values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
"method": &"cast_attack_particle1"
}]
} }

@ -118,25 +118,13 @@ tracks/7/keys = {
"update": 1, "update": 1,
"values": [false, false] "values": [false, false]
} }
tracks/8/type = "value" tracks/8/type = "method"
tracks/8/imported = false tracks/8/imported = false
tracks/8/enabled = true tracks/8/enabled = true
tracks/8/path = NodePath("View:frame") tracks/8/path = NodePath("%Battle")
tracks/8/interp = 1 tracks/8/interp = 1
tracks/8/loop_wrap = true tracks/8/loop_wrap = true
tracks/8/keys = { tracks/8/keys = {
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]
}
tracks/9/type = "method"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("%Battle")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(1, 1.5), "times": PackedFloat32Array(1, 1.5),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"values": [{ "values": [{
@ -147,3 +135,15 @@ tracks/9/keys = {
"method": &"change_dir" "method": &"change_dir"
}] }]
} }
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("View:frame")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]
}

@ -31,10 +31,10 @@ radius = 1.0
[sub_resource type="ShaderMaterial" id="ShaderMaterial_3u7mw"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_3u7mw"]
render_priority = 0 render_priority = 0
shader = ExtResource("3_ed424") shader = ExtResource("3_ed424")
shader_parameter/tex = ExtResource("4_fcd8a")
shader_parameter/flash_white = null shader_parameter/flash_white = null
shader_parameter/deformation_dir = Vector2(0, 0) shader_parameter/deformation_dir = Vector2(0, 0)
shader_parameter/deformation_rate = 0.0 shader_parameter/deformation_rate = 0.0
shader_parameter/tex = ExtResource("4_fcd8a")
[sub_resource type="Animation" id="Animation_dbjx6"] [sub_resource type="Animation" id="Animation_dbjx6"]
length = 0.001 length = 0.001
@ -65,7 +65,7 @@ tracks/1/keys = {
[sub_resource type="AnimationLibrary" id="AnimationLibrary_avnjy"] [sub_resource type="AnimationLibrary" id="AnimationLibrary_avnjy"]
_data = { _data = {
"RESET": SubResource("Animation_dbjx6") &"RESET": SubResource("Animation_dbjx6")
} }
[sub_resource type="Curve" id="Curve_e7j3f"] [sub_resource type="Curve" id="Curve_e7j3f"]
@ -120,8 +120,8 @@ script = ExtResource("4_66r53")
[node name="Skill" type="AnimationPlayer" parent="."] [node name="Skill" type="AnimationPlayer" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
libraries = { libraries = {
"": SubResource("AnimationLibrary_avnjy"), &"": SubResource("AnimationLibrary_avnjy"),
"animation_library": ExtResource("6_pakq5") &"animation_library": ExtResource("6_pakq5")
} }
script = ExtResource("6_h4xqy") script = ExtResource("6_h4xqy")

File diff suppressed because one or more lines are too long

@ -4,6 +4,8 @@ class_name Level
var level_instance_list: Array[LevelInstance] var level_instance_list: Array[LevelInstance]
var born_pos: Vector3 var born_pos: Vector3
@onready var grid_block_material: Material = load("res://render/material/grid_block.tres") as Material
func get_level_instance_list() -> Array[LevelInstance]: func get_level_instance_list() -> Array[LevelInstance]:
if not level_instance_list: if not level_instance_list:
@ -15,10 +17,15 @@ func get_level_instance_list() -> Array[LevelInstance]:
for rooms_node_child_child in rooms_node_child.get_children(): for rooms_node_child_child in rooms_node_child.get_children():
if rooms_node_child_child is LevelInstance: if rooms_node_child_child is LevelInstance:
rooms_node_child_child.level_area_cfg = rooms_node_child.cfg 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) level_instance_list.append(rooms_node_child_child)
return level_instance_list 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: func get_born_pos() -> Vector3:
if not born_pos: if not born_pos:
var born_pos_node: Node3D = %BornPos as Node3D var born_pos_node: Node3D = %BornPos as Node3D

@ -11,6 +11,20 @@ class_name LevelInstance
@export var is_force_battle: bool @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 #运行时设置 var level_area_cfg: LevelAreaCfg #运行时设置
@ -21,6 +35,27 @@ func _on_size_change() -> void:
level_range.position = level_range.size / 2 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: func level_size() -> Vector2:
var level_range: CSGBox3D = $LevelRange as CSGBox3D var level_range: CSGBox3D = $LevelRange as CSGBox3D
var level_size: Vector3 = level_range.size var level_size: Vector3 = level_range.size
@ -30,3 +65,8 @@ func level_size() -> Vector2:
func level_pos() -> Vector2: func level_pos() -> Vector2:
var pos: Vector3 = get_global_position() var pos: Vector3 = get_global_position()
return Vector2(pos.x, pos.z) 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

@ -5,6 +5,7 @@ var target: int
var level: Level var level: Level
var cur_level_instance: LevelInstance var cur_level_instance: LevelInstance
var level_instance_dict: Dictionary = {} var level_instance_dict: Dictionary = {}
var level_loading_rate: float
func _ready(): func _ready():
@ -29,7 +30,13 @@ func init():
func _process(delta) -> void: func _process(delta) -> void:
pass if not level:
return
if level_loading_rate < 1:
level_loading_rate += delta *2
if level_loading_rate > 1:
level_loading_rate = 1
level.set_level_loading_rate(level_loading_rate)
func get_born_pos() -> Vector3: func get_born_pos() -> Vector3:
@ -58,9 +65,13 @@ func set_player_position(pos: Vector3) -> void:
if cur_level_instance: if cur_level_instance:
if new_level_instance == cur_level_instance: if new_level_instance == cur_level_instance:
return return
pass#todo 销毁原关卡实体 并存档 #todo 销毁原关卡实体 并存档
cur_level_instance.set_focus_from(true)
new_level_instance.set_focus_to(true)
cur_level_instance = new_level_instance cur_level_instance = new_level_instance
level_loading_rate = 1-level_loading_rate
level.set_level_loading_rate(level_loading_rate)
SignalManager.level_size_change.emit(cur_level_instance.level_size()) SignalManager.level_size_change.emit(cur_level_instance.level_size())
SignalManager.level_pos_change.emit(cur_level_instance.level_pos()) SignalManager.level_pos_change.emit(cur_level_instance.level_pos())

Loading…
Cancel
Save