From 5a4db21337bfb752115a03ce40a9a35024c8040f Mon Sep 17 00:00:00 2001 From: Zakarya Date: Tue, 9 Jan 2024 12:51:48 -0800 Subject: [PATCH] Much better headbob animation --- addons/fpc/character.gd | 9 +++-- addons/fpc/character.tscn | 71 +++++++++++++++++++++++++++++++-------- 2 files changed, 63 insertions(+), 17 deletions(-) diff --git a/addons/fpc/character.gd b/addons/fpc/character.gd index 19da935..bced8b6 100644 --- a/addons/fpc/character.gd +++ b/addons/fpc/character.gd @@ -59,6 +59,9 @@ var gravity : float = ProjectSettings.get_setting("physics/3d/default_gravity") func _ready(): Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + + # Reset the camera position + CAMERA_ANIMATION.play("RESET") func _physics_process(delta): @@ -203,10 +206,10 @@ func update_collision_scale(): func headbob_animation(moving): if moving and is_on_floor(): - CAMERA_ANIMATION.play("headbob") - CAMERA_ANIMATION.speed_scale = speed / base_speed + CAMERA_ANIMATION.play("headbob", 0.5) + CAMERA_ANIMATION.speed_scale = (speed / base_speed) * 1.75 else: - CAMERA_ANIMATION.play("RESET") + CAMERA_ANIMATION.play("RESET", 0.5) func _process(delta): diff --git a/addons/fpc/character.tscn b/addons/fpc/character.tscn index dd7aa20..41f693a 100644 --- a/addons/fpc/character.tscn +++ b/addons/fpc/character.tscn @@ -18,33 +18,76 @@ material = SubResource("StandardMaterial3D_kp17n") resource_name = "RESET" length = 0.001 loop_mode = 1 -tracks/0/type = "value" +tracks/0/type = "bezier" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("Camera:position") +tracks/0/path = NodePath("Camera:position:x") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector3(0, 0, 0)] +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Camera:position:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/2/type = "bezier" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Camera:position:z") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) } [sub_resource type="Animation" id="Animation_lrqmv"] resource_name = "headbob" +length = 2.0 loop_mode = 1 -tracks/0/type = "value" +tracks/0/type = "bezier" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("Camera:position") -tracks/0/interp = 2 +tracks/0/path = NodePath("Camera:position:x") +tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { -"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1), -"transitions": PackedFloat32Array(1, 1, 1, 1, 1), -"update": 0, -"values": [Vector3(0, 0, 0), Vector3(-0.05, -0.05, 0), Vector3(0, 0, 0), Vector3(0.05, -0.05, 0), Vector3(0, 0, 0)] +"handle_modes": PackedInt32Array(0, 0, 0, 0, 0), +"points": PackedFloat32Array(0.04, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0, -0.04, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0, 0.04, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 0.5, 1, 1.5, 2) +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Camera:position:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0, 0, 0, 0, 0), +"points": PackedFloat32Array(-0.05, -0.25, 0, 0.2, 0.005, 0, -0.25, 0, 0.25, 0, -0.05, -0.2, 0.005, 0.2, 0.005, 0, -0.25, 0, 0.25, 0, -0.05, -0.2, 0.005, 0.25, 0), +"times": PackedFloat32Array(0, 0.5, 1, 1.5, 2) +} +tracks/2/type = "bezier" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Camera:position:z") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"handle_modes": PackedInt32Array(0, 0, 0, 0, 0), +"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 0.5, 1, 1.5, 2) } [sub_resource type="AnimationLibrary" id="AnimationLibrary_o0unb"] @@ -80,7 +123,7 @@ shape = SubResource("CapsuleShape3D_uy03j") transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0) [node name="Camera" type="Camera3D" parent="Head"] -transform = Transform3D(0.999511, 0.000977888, -0.0312559, 0, 0.999511, 0.0312712, 0.0312712, -0.0312559, 0.999022, 0, 0, 0) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) [node name="camera_animation" type="AnimationPlayer" parent="Head"] libraries = {