From bfddd3129f5a1feafa08acb6336bfb3abe3026ba Mon Sep 17 00:00:00 2001 From: Sofia Date: Wed, 29 Jul 2026 21:55:43 +0300 Subject: [PATCH] Add shield effects --- godot/scenes/player/local_player.tscn | 15 +++ godot/scenes/player/soldier_m.tscn | 45 +++++--- godot/shaders/bubble_shader.tres | 62 +++++++++++ godot/shaders/vignette.tres | 152 ++++++++++++++++++++++++++ rust/src/player/local_player.rs | 14 ++- 5 files changed, 271 insertions(+), 17 deletions(-) create mode 100644 godot/shaders/bubble_shader.tres create mode 100644 godot/shaders/vignette.tres diff --git a/godot/scenes/player/local_player.tscn b/godot/scenes/player/local_player.tscn index e5e2261..f5b5328 100644 --- a/godot/scenes/player/local_player.tscn +++ b/godot/scenes/player/local_player.tscn @@ -2,12 +2,19 @@ [ext_resource type="PackedScene" uid="uid://bod6b3befmyt5" path="res://scenes/player/soldier_m.tscn" id="1_jd651"] [ext_resource type="PackedScene" uid="uid://cl66unms2gim0" path="res://scenes/player/effects.tscn" id="2_ywmwa"] +[ext_resource type="Shader" uid="uid://datt1r440base" path="res://shaders/vignette.tres" id="3_7awel"] [ext_resource type="PackedScene" uid="uid://c1gs6cqek1qlq" path="res://scenes/ui/hud.tscn" id="5_cv68x"] [ext_resource type="Texture2D" uid="uid://bdfqu6p74pfwe" path="res://raw_assets/crosshair/Crosshair 1.png" id="6_7awel"] [ext_resource type="AudioStream" uid="uid://bfg31e3s4jv8c" path="res://raw_assets/sfx/Hit.mp3" id="7_dguuj"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_oh8vq"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_dguuj"] +shader = ExtResource("3_7awel") +shader_parameter/Color = Color(1, 0, 0, 1) +shader_parameter/RimDistance = 0.7 +shader_parameter/FloatParameter = 3.0 + [node name="player" type="LocalPlayer" unique_id=863055906 node_paths=PackedStringArray("camera", "soldier_mesh", "collider", "effects", "dead_cam_target", "respawn_label", "camera_origin", "weapon_node", "hud", "hit_sound")] look_sensitivity = 1.5 camera = NodePath("camera_3d") @@ -49,6 +56,14 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.16157162, 1.4223524, 0) [node name="dead_camera_target" type="Node3D" parent="." unique_id=559969559] transform = Transform3D(1, 0, 0, 0, 0.9069022, 0.4213412, 0, -0.4213412, 0.9069022, 0, 2.3258846, 1.5254744) +[node name="vignette" type="ColorRect" parent="." unique_id=1797767615] +material = SubResource("ShaderMaterial_dguuj") +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + [node name="crosshair" type="TextureRect" parent="." unique_id=1329977849] modulate = Color(1, 1, 1, 0.5058824) anchors_preset = 8 diff --git a/godot/scenes/player/soldier_m.tscn b/godot/scenes/player/soldier_m.tscn index 0b1fd68..e2c45da 100644 --- a/godot/scenes/player/soldier_m.tscn +++ b/godot/scenes/player/soldier_m.tscn @@ -5,8 +5,9 @@ [ext_resource type="PackedScene" uid="uid://ci8r4lgijtalh" path="res://scenes/player/ball_weapon.tscn" id="2_jbny0"] [ext_resource type="PackedScene" uid="uid://deyfeiqyi0wmj" path="res://scenes/player/shotgun.tscn" id="2_kknoo"] [ext_resource type="Texture2D" uid="uid://cbvxh8xp8ilac" path="res://assets/Soldier.png" id="5_hjbn3"] +[ext_resource type="Shader" uid="uid://canvckfs02odw" path="res://shaders/bubble_shader.tres" id="6_3lfhi"] -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_3lfhi"] +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_hjbn3"] resource_local_to_scene = true albedo_texture = ExtResource("5_hjbn3") texture_filter = 0 @@ -51,6 +52,16 @@ nodes/Movement/node = SubResource("AnimationNodeBlendSpace2D_tt88r") nodes/Movement/position = Vector2(350, 90) node_connections = [&"output", 0, &"Movement"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_tt88r"] +render_priority = 0 +shader = ExtResource("6_3lfhi") +shader_parameter/BubbleColor = Color(1, 1, 1, 1) + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_1cgct"] +material = SubResource("ShaderMaterial_tt88r") +radius = 1.3764648 +height = 4.480774 + [node name="soldier_m" type="SoldierMesh" unique_id=281995630 node_paths=PackedStringArray("hand_attachment", "animation_tree", "skeleton", "mesh", "look_at", "hand_remover")] hand_attachment = NodePath("bone_attachment_3d/hand") animation_tree = NodePath("animation_tree") @@ -67,10 +78,10 @@ hand_remover = NodePath("SoldierM/Soldier/Skeleton3D/player_hand_remover") [node name="Skeleton3D" parent="SoldierM/Soldier" parent_id_path=PackedInt32Array(1868587353, 1101404322) index="0" unique_id=1074852808] bones/0/position = Vector3(0, 0, 0.00071418716) bones/1/position = Vector3(0, 0, -0.007) -bones/1/rotation = Quaternion(0.707061, 0, 0, 0.70715255) +bones/1/rotation = Quaternion(0.6956638, 0, 0, 0.71836746) bones/1/scale = Vector3(1, 1, 1) bones/2/position = Vector3(0.002, 3.469447e-18, -1.4901118e-10) -bones/2/rotation = Quaternion(0.9515771, 2.0946482e-08, 2.3652152e-08, -0.30741027) +bones/2/rotation = Quaternion(0.94657123, 2.131974e-08, 2.3316254e-08, -0.3224949) bones/2/scale = Vector3(1, 1, 1) bones/3/position = Vector3(0, 0.0069999984, 5.169879e-25) bones/3/scale = Vector3(1, 0.99999994, 1) @@ -78,7 +89,7 @@ bones/4/position = Vector3(-2.39752e-11, 0.010049875, -1.4156722e-10) bones/4/rotation = Quaternion(0.73982674, -2.6881349e-08, 7.0005948e-09, 0.67279744) bones/4/scale = Vector3(1, 0.99999994, 0.99999994) bones/6/position = Vector3(-0.002, 3.469447e-18, -1.4901205e-10) -bones/6/rotation = Quaternion(0.99906224, 1.784155e-08, 1.8973411e-08, 0.043298792) +bones/6/rotation = Quaternion(0.99957573, 1.8108768e-08, 1.8718543e-08, 0.029129328) bones/6/scale = Vector3(1, 1, 1) bones/7/position = Vector3(0, 0.0069999984, -5.169879e-25) bones/7/rotation = Quaternion(-0.21973656, 4.264305e-08, 9.604991e-09, 0.9755593) @@ -87,33 +98,33 @@ bones/8/position = Vector3(-2.3975525e-11, 0.010049875, -4.6138777e-11) bones/8/rotation = Quaternion(0.86758894, -7.867721e-09, 3.036851e-08, 0.4972821) bones/8/scale = Vector3(1, 0.99999994, 0.99999994) bones/10/position = Vector3(0, 0.009, 0) -bones/10/rotation = Quaternion(-0.17217702, -0.13130672, 0.022171758, 0.9760237) +bones/10/rotation = Quaternion(-0.15655811, -0.13162379, 0.020073986, 0.9786531) bones/10/scale = Vector3(1, 1, 1) bones/11/position = Vector3(6.8186457e-17, 0.008, 0.001) -bones/11/rotation = Quaternion(5.6336947e-05, 1.1336415e-07, -1.5418686e-05, 1) +bones/11/rotation = Quaternion(0.050897807, 0.0001023451, -0.013928697, 0.9986068) bones/11/scale = Vector3(1, 1, 1) bones/12/position = Vector3(-2.2285185e-16, 0.0035, 0.0015000002) bones/12/rotation = Quaternion(-0.70710677, 0, 0, 0.70710677) bones/12/scale = Vector3(1, 1, 1) bones/14/position = Vector3(0.005, 0.005, -1.7336413e-21) -bones/14/rotation = Quaternion(0.8812731, 0.032443736, 0.4378821, -0.17482696) +bones/14/rotation = Quaternion(0.8931964, 0.033241358, 0.4331066, -0.11624925) bones/14/scale = Vector3(1, 0.99999994, 1) bones/15/position = Vector3(-1.3005262e-15, 0.0050000004, -6.938894e-18) -bones/15/rotation = Quaternion(1.0136929e-08, -7.095393e-09, 0.9187736, 0.3947851) +bones/15/rotation = Quaternion(1.0327169e-08, -6.815531e-09, 0.9292259, 0.36951232) bones/15/scale = Vector3(1, 1, 1) bones/16/position = Vector3(7.632945e-11, 0.007071071, 6.938894e-18) -bones/16/rotation = Quaternion(0.029925434, -0.03646163, -0.18585494, 0.98144436) +bones/16/rotation = Quaternion(0.009291643, -0.08686193, -0.18488745, 0.9788695) bones/16/scale = Vector3(0.99999994, 0.9999999, 1) bones/18/position = Vector3(-0.005, 0.005, -1.7303326e-21) -bones/18/rotation = Quaternion(0.64453954, 0.21452981, -0.0943058, -0.72777206) +bones/18/rotation = Quaternion(0.65577567, 0.17340483, -0.12684758, -0.72373945) bones/18/scale = Vector3(1, 0.99999994, 1) bones/19/position = Vector3(-1.3005262e-15, 0.0050000004, -6.938894e-18) -bones/19/rotation = Quaternion(-1.7099223e-08, -3.7721332e-08, -0.15766992, 0.98749197) +bones/19/rotation = Quaternion(-2.0834433e-08, -3.5793978e-08, -0.25694573, 0.96642584) bones/19/scale = Vector3(1, 1, 1) bones/20/position = Vector3(-2.2286711e-10, 0.007071072, 0) -bones/20/rotation = Quaternion(-0.14211333, -0.45638156, -0.17767368, 0.8602045) +bones/20/rotation = Quaternion(-0.1155467, -0.46956262, -0.13840127, 0.8642945) bones/20/scale = Vector3(1, 0.9999999, 1) -bones/22/position = Vector3(0.012581623, -0.0085772155, 0.0021672463) +bones/22/position = Vector3(0.011440838, -0.0085772155, 0.002479433) bones/22/rotation = Quaternion(3.090862e-08, 0.70710677, 0.70710677, 3.090862e-08) bones/22/scale = Vector3(1, 1, 1) bones/24/position = Vector3(-0.011000002, 0.0050000013, 0.0070000007) @@ -133,7 +144,7 @@ bones/36/position = Vector3(-0.002, -0.00568604, -0.02264523) bones/36/rotation = Quaternion(0, 0, 0, 1) [node name="Soldier_Male_Mesh" parent="SoldierM/Soldier/Skeleton3D" index="0" unique_id=1117347105] -surface_material_override/0 = SubResource("StandardMaterial3D_3lfhi") +surface_material_override/0 = SubResource("StandardMaterial3D_hjbn3") [node name="look_at_modifier_3d" type="LookAtModifier3D" parent="SoldierM/Soldier/Skeleton3D" index="1" unique_id=1054155740] target_node = NodePath("../../../../look_at_root/look_at") @@ -168,7 +179,7 @@ origin_external_node = NodePath("../../../../look_at_root") transform = Transform3D(1, -2.2737368e-13, 0, 2.2737368e-13, 1, 0, -1.3552527e-20, 0, 1, 0, 0, 0) [node name="bone_attachment_3d" type="BoneAttachment3D" parent="." unique_id=1964353847] -transform = Transform3D(-31.442406, 3.474139, -94.86467, -87.30682, 38.17428, 30.335432, 37.26781, 92.36152, -8.969748, -0.47997, 3.3490868, 0.74448436) +transform = Transform3D(-34.56755, 3.8521445, -93.756294, -84.08145, 43.085724, 32.77075, 41.657993, 90.15971, -11.654766, -0.4726672, 3.3849456, 0.7415116) bone_name = "HAND.R_end" bone_idx = 17 use_external_skeleton = true @@ -189,4 +200,8 @@ transform = Transform3D(1, 0, 0, 0, 1.0000001, 0, 0, 0, 1.0000001, 0, 3.7622375, [node name="look_at" type="Node3D" parent="look_at_root" unique_id=1308525699] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 2.698) +[node name="bubble" type="MeshInstance3D" parent="." unique_id=2033209152] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.0816538, 0) +mesh = SubResource("CapsuleMesh_1cgct") + [editable path="SoldierM"] diff --git a/godot/shaders/bubble_shader.tres b/godot/shaders/bubble_shader.tres new file mode 100644 index 0000000..26843d5 --- /dev/null +++ b/godot/shaders/bubble_shader.tres @@ -0,0 +1,62 @@ +[gd_resource type="VisualShader" format=3 uid="uid://canvckfs02odw"] + +[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_m0u34"] +default_input_values = [0, 0.0, 1, 0.5] +operator = 2 + +[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_aiwsy"] +operator = 2 + +[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_7h3f8"] +default_input_values = [0, 0.0, 1, 0.5] + +[sub_resource type="VisualShaderNodeFresnel" id="VisualShaderNodeFresnel_m0u34"] + +[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_rsany"] +operator = 2 + +[sub_resource type="VisualShaderNodeColorParameter" id="VisualShaderNodeColorParameter_aiwsy"] +parameter_name = "BubbleColor" +default_value_enabled = true + +[sub_resource type="VisualShaderNodeVectorDecompose" id="VisualShaderNodeVectorDecompose_m0u34"] +default_input_values = [0, Quaternion(0, 0, 0, 0)] +op_type = 2 + +[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_rsany"] +operator = 2 + +[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_5614y"] +input_name = "time" + +[sub_resource type="VisualShaderNodeFloatFunc" id="VisualShaderNodeFloatFunc_om1j3"] +function = 0 + +[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_6ouiq"] +default_input_values = [0, 0.0, 1, 1.0] + +[resource] +nodes/fragment/0/position = Vector2(1150, 120) +nodes/fragment/2/node = SubResource("VisualShaderNodeFresnel_m0u34") +nodes/fragment/2/position = Vector2(-370, 170) +nodes/fragment/3/node = SubResource("VisualShaderNodeVectorOp_rsany") +nodes/fragment/3/position = Vector2(120, 200) +nodes/fragment/4/node = SubResource("VisualShaderNodeColorParameter_aiwsy") +nodes/fragment/4/position = Vector2(-480, 410) +nodes/fragment/5/node = SubResource("VisualShaderNodeVectorDecompose_m0u34") +nodes/fragment/5/position = Vector2(-40, 500) +nodes/fragment/6/node = SubResource("VisualShaderNodeFloatOp_rsany") +nodes/fragment/6/position = Vector2(210, 470) +nodes/fragment/7/node = SubResource("VisualShaderNodeInput_5614y") +nodes/fragment/7/position = Vector2(250, 1250) +nodes/fragment/8/node = SubResource("VisualShaderNodeFloatFunc_om1j3") +nodes/fragment/8/position = Vector2(270, 1130) +nodes/fragment/9/node = SubResource("VisualShaderNodeFloatOp_6ouiq") +nodes/fragment/9/position = Vector2(270, 960) +nodes/fragment/10/node = SubResource("VisualShaderNodeFloatOp_m0u34") +nodes/fragment/10/position = Vector2(270, 790) +nodes/fragment/11/node = SubResource("VisualShaderNodeFloatOp_aiwsy") +nodes/fragment/11/position = Vector2(650, 490) +nodes/fragment/12/node = SubResource("VisualShaderNodeFloatOp_7h3f8") +nodes/fragment/12/position = Vector2(510, 730) +nodes/fragment/connections = PackedInt32Array(2, 0, 3, 0, 3, 0, 0, 0, 4, 0, 5, 0, 4, 0, 3, 1, 2, 0, 6, 0, 5, 3, 6, 1, 7, 0, 8, 0, 8, 0, 9, 0, 9, 0, 10, 0, 6, 0, 11, 0, 11, 0, 0, 1, 10, 0, 12, 0, 12, 0, 11, 1) diff --git a/godot/shaders/vignette.tres b/godot/shaders/vignette.tres new file mode 100644 index 0000000..a8ca432 --- /dev/null +++ b/godot/shaders/vignette.tres @@ -0,0 +1,152 @@ +[gd_resource type="VisualShader" format=3 uid="uid://datt1r440base"] + +[sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_jyxcy"] +parameter_name = "FloatParameter" +hint = 2 +min = 1.0 +max = 10.0 +step = 0.5 +default_value_enabled = true +default_value = 3.0 + +[sub_resource type="VisualShaderNodeColorParameter" id="VisualShaderNodeColorParameter_jyxcy"] +expanded_output_ports = [0] +parameter_name = "Color" +default_value_enabled = true +default_value = Color(1, 0, 0, 1) + +[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_de6xh"] +operator = 2 + +[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_de6xh"] +input_name = "time" + +[sub_resource type="VisualShaderNodeFloatFunc" id="VisualShaderNodeFloatFunc_c4357"] +function = 0 + +[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_fcsw6"] +operator = 2 + +[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_pksew"] +default_input_values = [0, 0.0, 1, 2.0] + +[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_k2y31"] +default_input_values = [0, 0.0, 1, 0.5] +operator = 2 + +[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_jyxcy"] +input_name = "uv" + +[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_gbuoh"] +default_input_values = [0, Vector2(0, 0), 1, Vector2(0.5, 0.5)] +op_type = 0 +operator = 1 + +[sub_resource type="VisualShaderNodeVectorFunc" id="VisualShaderNodeVectorFunc_de6xh"] +output_port_for_preview = 0 +default_input_values = [0, Vector2(0, 0)] +expanded_output_ports = [0] +op_type = 0 +function = 4 + +[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_jyxcy"] +default_input_values = [0, Vector2(0, 0), 1, Vector2(2, 2)] +op_type = 0 +operator = 2 + +[sub_resource type="VisualShaderNodeVectorDistance" id="VisualShaderNodeVectorDistance_jyxcy"] +default_input_values = [0, Vector2(0, 0), 1, Vector2(0, 0)] +op_type = 0 + +[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_jyxcy"] +default_input_values = [0, 0.0, 1, 0.7] +operator = 1 + +[sub_resource type="VisualShaderNodeFloatOp" id="VisualShaderNodeFloatOp_gbuoh"] +default_input_values = [0, 0.0, 1, 3.0] +operator = 3 + +[sub_resource type="VisualShaderNodeFloatParameter" id="VisualShaderNodeFloatParameter_de6xh"] +parameter_name = "RimDistance" +hint = 2 +default_value_enabled = true +default_value = 0.7 + +[sub_resource type="VisualShaderNodeColorConstant" id="VisualShaderNodeColorConstant_jyxcy"] +constant = Color(1, 0, 0, 1) + +[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_gbuoh"] +input_name = "uv" + +[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_de6xh"] +default_input_values = [0, Vector2(0, 0), 1, Vector2(0.5, 0.5)] +op_type = 0 +operator = 1 + +[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_c4357"] +output_port_for_preview = 0 +default_input_values = [0, Vector2(0, 0), 1, Vector2(2, 2)] +op_type = 0 +operator = 2 + +[sub_resource type="VisualShaderNodeVectorFunc" id="VisualShaderNodeVectorFunc_fcsw6"] +output_port_for_preview = 1 +default_input_values = [0, Vector2(0, 0)] +expanded_output_ports = [0] +op_type = 0 +function = 4 + +[sub_resource type="VisualShaderNodeVec3Constant" id="VisualShaderNodeVec3Constant_pksew"] +constant = Vector3(1, 0, 0) + +[resource] +mode = 1 +flags/light_only = false +nodes/vertex/0/position = Vector2(710, 300) +nodes/vertex/2/node = SubResource("VisualShaderNodeColorConstant_jyxcy") +nodes/vertex/2/position = Vector2(-230, 100) +nodes/vertex/3/node = SubResource("VisualShaderNodeInput_gbuoh") +nodes/vertex/3/position = Vector2(-600, 300) +nodes/vertex/4/node = SubResource("VisualShaderNodeVectorOp_de6xh") +nodes/vertex/4/position = Vector2(-280, 440) +nodes/vertex/6/node = SubResource("VisualShaderNodeVectorOp_c4357") +nodes/vertex/6/position = Vector2(-40, 430) +nodes/vertex/7/node = SubResource("VisualShaderNodeVectorFunc_fcsw6") +nodes/vertex/7/position = Vector2(220, 380) +nodes/vertex/8/node = SubResource("VisualShaderNodeVec3Constant_pksew") +nodes/vertex/8/position = Vector2(180, 100) +nodes/vertex/connections = PackedInt32Array(4, 0, 6, 0, 6, 0, 7, 0, 3, 0, 4, 0, 8, 0, 0, 2, 7, 1, 0, 3) +nodes/fragment/0/position = Vector2(2820, 0) +nodes/fragment/2/node = SubResource("VisualShaderNodeInput_jyxcy") +nodes/fragment/2/position = Vector2(-520, 330) +nodes/fragment/3/node = SubResource("VisualShaderNodeVectorOp_gbuoh") +nodes/fragment/3/position = Vector2(-110, 390) +nodes/fragment/4/node = SubResource("VisualShaderNodeVectorFunc_de6xh") +nodes/fragment/4/position = Vector2(190, 380) +nodes/fragment/5/node = SubResource("VisualShaderNodeVectorOp_jyxcy") +nodes/fragment/5/position = Vector2(490, 320) +nodes/fragment/6/node = SubResource("VisualShaderNodeVectorDistance_jyxcy") +nodes/fragment/6/position = Vector2(840, 320) +nodes/fragment/7/node = SubResource("VisualShaderNodeFloatOp_jyxcy") +nodes/fragment/7/position = Vector2(1070, 270) +nodes/fragment/8/node = SubResource("VisualShaderNodeFloatOp_gbuoh") +nodes/fragment/8/position = Vector2(1300, 250) +nodes/fragment/9/node = SubResource("VisualShaderNodeFloatParameter_de6xh") +nodes/fragment/9/position = Vector2(730, 530) +nodes/fragment/10/node = SubResource("VisualShaderNodeFloatParameter_jyxcy") +nodes/fragment/10/position = Vector2(1080, 550) +nodes/fragment/11/node = SubResource("VisualShaderNodeColorParameter_jyxcy") +nodes/fragment/11/position = Vector2(1100, -180) +nodes/fragment/12/node = SubResource("VisualShaderNodeFloatOp_de6xh") +nodes/fragment/12/position = Vector2(2470, 160) +nodes/fragment/13/node = SubResource("VisualShaderNodeInput_de6xh") +nodes/fragment/13/position = Vector2(1480, 740) +nodes/fragment/14/node = SubResource("VisualShaderNodeFloatFunc_c4357") +nodes/fragment/14/position = Vector2(1560, 550) +nodes/fragment/15/node = SubResource("VisualShaderNodeFloatOp_fcsw6") +nodes/fragment/15/position = Vector2(2330, 290) +nodes/fragment/16/node = SubResource("VisualShaderNodeFloatOp_pksew") +nodes/fragment/16/position = Vector2(1870, 460) +nodes/fragment/17/node = SubResource("VisualShaderNodeFloatOp_k2y31") +nodes/fragment/17/position = Vector2(2080, 420) +nodes/fragment/connections = PackedInt32Array(2, 0, 3, 0, 3, 0, 4, 0, 4, 0, 5, 0, 5, 0, 6, 0, 6, 0, 7, 0, 7, 0, 8, 0, 9, 0, 7, 1, 10, 0, 8, 1, 11, 0, 0, 0, 12, 0, 0, 1, 11, 4, 12, 0, 13, 0, 14, 0, 8, 0, 15, 0, 15, 0, 12, 1, 14, 0, 16, 0, 16, 0, 17, 0, 17, 0, 15, 1) diff --git a/rust/src/player/local_player.rs b/rust/src/player/local_player.rs index 81c79c2..1ed6d31 100644 --- a/rust/src/player/local_player.rs +++ b/rust/src/player/local_player.rs @@ -2,8 +2,8 @@ use std::{f32::consts::PI, ops::Neg}; use godot::{ classes::{ - AudioStreamPlayer, Camera3D, CharacterBody3D, CollisionShape3D, ICharacterBody3D, Input, - InputEvent, InputEventMouseMotion, Label, input::MouseMode, + AudioStreamPlayer, Camera3D, CharacterBody3D, CollisionShape3D, ColorRect, + ICharacterBody3D, Input, InputEvent, InputEventMouseMotion, Label, input::MouseMode, }, obj::WithBaseField, prelude::*, @@ -43,6 +43,8 @@ pub struct LocalPlayer { #[export] camera: Option>, #[export] + vignette: Option>, + #[export] move_speed: f32, #[export] soldier_mesh: Option>, @@ -782,6 +784,14 @@ impl LocalPlayer { None } } + + fn change_vignette_color(&mut self, color: Color) { + if let Some(rect) = &mut self.vignette + && let Some(mut mat) = rect.get_material() + { + mat.set("shader_parameter/Color", &color.to_variant()); + } + } } #[godot_dyn]