From 27130257c9a012ea99e4bda95612b9868db870b5 Mon Sep 17 00:00:00 2001 From: Minimata Date: Tue, 11 Nov 2025 11:38:49 +0100 Subject: [PATCH] small camera animation on mantle --- player_controller/PlayerController.tscn | 2 +- player_controller/Scripts/PlayerController.cs | 2 + systems/head/HeadSystem.cs | 7 ++ systems/head/head_system.tscn | 66 ++++++++++++++++++- 4 files changed, 75 insertions(+), 2 deletions(-) diff --git a/player_controller/PlayerController.tscn b/player_controller/PlayerController.tscn index 5f2b983d..5e698556 100644 --- a/player_controller/PlayerController.tscn +++ b/player_controller/PlayerController.tscn @@ -63,7 +63,7 @@ WalkSpeed = 7.5 AccelerationAir = 2.0 DecelerationAir = 0.1 Weight = 5.0 -MantleTime = 0.2 +MantleTime = 0.3 SimpleJumpStartVelocity = 8.0 SimpleJumpHangTimeInFrames = 1 SimpleJumpGravityLesseningFactor = 2.5 diff --git a/player_controller/Scripts/PlayerController.cs b/player_controller/Scripts/PlayerController.cs index 41d5da30..05cb543e 100644 --- a/player_controller/Scripts/PlayerController.cs +++ b/player_controller/Scripts/PlayerController.cs @@ -979,6 +979,8 @@ public partial class PlayerController : CharacterBody3D private Vector3 _preMantleVelocity = Vector3.Zero; public void MantleToLocation(Vector3 location) { + HeadSystem.OnMantle(); + _preMantleVelocity = Velocity; var mantleTween = CreatePositionTween(location, MantleTime); mantleTween.Finished += MantleFinished; diff --git a/systems/head/HeadSystem.cs b/systems/head/HeadSystem.cs index 6c865d8c..022a9cc8 100644 --- a/systems/head/HeadSystem.cs +++ b/systems/head/HeadSystem.cs @@ -7,6 +7,7 @@ public partial class HeadSystem : Node3D { private Camera3D _camera; private Marker3D _cameraAnchor; + private AnimationPlayer _animationPlayer; [Export(PropertyHint.Range, "0,10,0.1,or_greater")] public float LookSensitivity { get; set; } = 1f; @@ -16,6 +17,12 @@ public partial class HeadSystem : Node3D Input.SetMouseMode(Input.MouseModeEnum.Captured); _camera = GetNode("CameraSmooth/Camera3D"); _cameraAnchor = GetNode("CameraAnchor"); + _animationPlayer = GetNode("AnimationPlayer"); + } + + public void OnMantle() + { + _animationPlayer.Play("mantle"); } public void LookAround(Vector2 lookDir, float sensitivitMultiplier = 1f) diff --git a/systems/head/head_system.tscn b/systems/head/head_system.tscn index 95f1440d..c740a996 100644 --- a/systems/head/head_system.tscn +++ b/systems/head/head_system.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=6 format=3 uid="uid://0ysqmqphq6mq"] +[gd_scene load_steps=9 format=3 uid="uid://0ysqmqphq6mq"] [ext_resource type="Script" uid="uid://dtkdrnsmlwm67" path="res://systems/head/HeadSystem.cs" id="1_8abgy"] [ext_resource type="Material" uid="uid://dtq8i1ka1f2pn" path="res://player_controller/Assets/Materials/Health/CameraVignette.tres" id="2_urko7"] @@ -10,12 +10,70 @@ shader = ExtResource("4_ubhf8") shader_parameter/limit = 0.0 shader_parameter/blur = 0.0 +[sub_resource type="Animation" id="Animation_8abgy"] +resource_name = "mantle" +length = 0.3 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("..:rotation:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(2, 2, 2), +"points": PackedFloat32Array(0, 0, 0, 0.050000004, 0, -0.17453292, -0.050000004, 0, 0.050000004, 0, 0, -0.050000004, 0, 0, 0), +"times": PackedFloat32Array(0, 0.15, 0.3) +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("..:rotation:z") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(2, 2, 2, 2), +"points": PackedFloat32Array(0.00011616433, 0, 0, 0.033333335, 0, -0.05235988, -0.033333335, 0, 0.033333335, 0, 0.05235988, -0.033333335, 0, 0.03333334, 0, 0, -0.03333334, 0, 0, 0), +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3) +} + +[sub_resource type="Animation" id="Animation_urko7"] +length = 0.001 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("..:rotation:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.15, 0, 0.15, 0), +"times": PackedFloat32Array(0) +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("..:rotation:z") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.15, 0, 0.15, 0), +"times": PackedFloat32Array(0) +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_0hyrq"] +_data = { +&"RESET": SubResource("Animation_urko7"), +&"mantle": SubResource("Animation_8abgy") +} + [node name="HeadSystem" type="Node3D"] script = ExtResource("1_8abgy") [node name="CameraSmooth" type="Node3D" parent="."] [node name="Camera3D" type="Camera3D" parent="CameraSmooth"] +transform = Transform3D(1, 0, 0, 0, 0.99999994, 0, 0, 0, 0.99999994, 0, 0, 0) current = true fov = 90.0 @@ -59,3 +117,9 @@ transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, visible = false [node name="CameraAnchor" type="Marker3D" parent="."] + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +root_node = NodePath("../CameraSmooth/Camera3D") +libraries = { +&"": SubResource("AnimationLibrary_0hyrq") +}