Compare commits

...

2 Commits

Author SHA1 Message Date
27130257c9 small camera animation on mantle
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 6m0s
2025-11-11 11:38:49 +01:00
e70a2e7537 keeping more intertia after dashes and mantles
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 6m6s
2025-11-11 09:52:57 +01:00
7 changed files with 89 additions and 6 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -63,7 +63,7 @@ WalkSpeed = 7.5
AccelerationAir = 2.0 AccelerationAir = 2.0
DecelerationAir = 0.1 DecelerationAir = 0.1
Weight = 5.0 Weight = 5.0
MantleTime = 0.2 MantleTime = 0.3
SimpleJumpStartVelocity = 8.0 SimpleJumpStartVelocity = 8.0
SimpleJumpHangTimeInFrames = 1 SimpleJumpHangTimeInFrames = 1
SimpleJumpGravityLesseningFactor = 2.5 SimpleJumpGravityLesseningFactor = 2.5

View File

@@ -823,6 +823,8 @@ public partial class PlayerController : CharacterBody3D
_playerState.SendEvent(resultingEvent); _playerState.SendEvent(resultingEvent);
} }
private Vector3 _preDashVelocity = Vector3.Zero;
public void OnAimedDashStarted() public void OnAimedDashStarted()
{ {
// Adjusting for player height, where the middle of the capsule should get to the dash location instead of the // Adjusting for player height, where the middle of the capsule should get to the dash location instead of the
@@ -830,6 +832,9 @@ public partial class PlayerController : CharacterBody3D
var correction = DashSystem.CollisionNormal == Vector3.Down ? _playerHeight : DashSystem.DashCastRadius; var correction = DashSystem.CollisionNormal == Vector3.Down ? _playerHeight : DashSystem.DashCastRadius;
var correctedLocation = DashSystem.PlannedLocation + Vector3.Down * correction; var correctedLocation = DashSystem.PlannedLocation + Vector3.Down * correction;
_preDashVelocity = Velocity;
_dashDirection = (correctedLocation - GlobalPosition).Normalized();
var dashTween = CreatePositionTween(correctedLocation, AimedDashTime); var dashTween = CreatePositionTween(correctedLocation, AimedDashTime);
// dashTween.TweenMethod(Callable.From<float>(AimedDashTweenOngoing), 0.0f, 1.0f, AimedDashTime); // dashTween.TweenMethod(Callable.From<float>(AimedDashTweenOngoing), 0.0f, 1.0f, AimedDashTime);
dashTween.Finished += AimedDashTweenEnded; dashTween.Finished += AimedDashTweenEnded;
@@ -880,6 +885,9 @@ public partial class PlayerController : CharacterBody3D
public void OnAimedDashFinished() public void OnAimedDashFinished()
{ {
var postDashVelocity = _preDashVelocity.Length() > PostDashSpeed ? PostDashSpeed : _preDashVelocity.Length();
Velocity = _dashDirection * postDashVelocity;
if (_shouldMantleOnDashEnded) if (_shouldMantleOnDashEnded)
MantleToLocation(_mantleLocation); MantleToLocation(_mantleLocation);
} }
@@ -922,8 +930,8 @@ public partial class PlayerController : CharacterBody3D
public void OnPoweredDashFinished() public void OnPoweredDashFinished()
{ {
// Try mantling but don't know if this is useful // Try mantling but don't know if this is useful
if (CanMantle()) // if (CanMantle())
MantleToLocation(MantleSystem.FindMantleForHeadRotation(HeadSystem.Rotation.Y).Unwrap()); // MantleToLocation(MantleSystem.FindMantleForHeadRotation(HeadSystem.Rotation.Y).Unwrap());
} }
public void FinishPoweredDash() public void FinishPoweredDash()
@@ -967,13 +975,19 @@ public partial class PlayerController : CharacterBody3D
var mantleLocationResult = MantleSystem.FindMantleForHeadRotation(HeadSystem.Rotation.Y); var mantleLocationResult = MantleSystem.FindMantleForHeadRotation(HeadSystem.Rotation.Y);
return mantleLocationResult.IsSome(out _); return mantleLocationResult.IsSome(out _);
} }
private Vector3 _preMantleVelocity = Vector3.Zero;
public void MantleToLocation(Vector3 location) public void MantleToLocation(Vector3 location)
{ {
HeadSystem.OnMantle();
_preMantleVelocity = Velocity;
var mantleTween = CreatePositionTween(location, MantleTime); var mantleTween = CreatePositionTween(location, MantleTime);
mantleTween.Finished += MantleFinished; mantleTween.Finished += MantleFinished;
} }
public void MantleFinished() public void MantleFinished()
{ {
Velocity = _preMantleVelocity;
_playerState.SendEvent("grounded"); _playerState.SendEvent("grounded");
} }

View File

@@ -7,6 +7,7 @@ public partial class HeadSystem : Node3D
{ {
private Camera3D _camera; private Camera3D _camera;
private Marker3D _cameraAnchor; private Marker3D _cameraAnchor;
private AnimationPlayer _animationPlayer;
[Export(PropertyHint.Range, "0,10,0.1,or_greater")] [Export(PropertyHint.Range, "0,10,0.1,or_greater")]
public float LookSensitivity { get; set; } = 1f; public float LookSensitivity { get; set; } = 1f;
@@ -16,6 +17,12 @@ public partial class HeadSystem : Node3D
Input.SetMouseMode(Input.MouseModeEnum.Captured); Input.SetMouseMode(Input.MouseModeEnum.Captured);
_camera = GetNode<Camera3D>("CameraSmooth/Camera3D"); _camera = GetNode<Camera3D>("CameraSmooth/Camera3D");
_cameraAnchor = GetNode<Marker3D>("CameraAnchor"); _cameraAnchor = GetNode<Marker3D>("CameraAnchor");
_animationPlayer = GetNode<AnimationPlayer>("AnimationPlayer");
}
public void OnMantle()
{
_animationPlayer.Play("mantle");
} }
public void LookAround(Vector2 lookDir, float sensitivitMultiplier = 1f) public void LookAround(Vector2 lookDir, float sensitivitMultiplier = 1f)

View File

@@ -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="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"] [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/limit = 0.0
shader_parameter/blur = 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"] [node name="HeadSystem" type="Node3D"]
script = ExtResource("1_8abgy") script = ExtResource("1_8abgy")
[node name="CameraSmooth" type="Node3D" parent="."] [node name="CameraSmooth" type="Node3D" parent="."]
[node name="Camera3D" type="Camera3D" parent="CameraSmooth"] [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 current = true
fov = 90.0 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 visible = false
[node name="CameraAnchor" type="Marker3D" parent="."] [node name="CameraAnchor" type="Marker3D" parent="."]
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
root_node = NodePath("../CameraSmooth/Camera3D")
libraries = {
&"": SubResource("AnimationLibrary_0hyrq")
}

View File

@@ -15,8 +15,6 @@ public partial class MantleSystem: Node3D
private ShapeCast3D _wallInFrontCast3D; private ShapeCast3D _wallInFrontCast3D;
private ShapeCast3D _mantleCast3D; private ShapeCast3D _mantleCast3D;
private RayCast3D _mantleCheckCast3D; private RayCast3D _mantleCheckCast3D;
private Option<Vector3> _mantleLocation;
public void Init() public void Init()
{ {