gd: added the drop action. Set up state managed coyote time, jump, double jump and overall movement.

This commit is contained in:
2025-06-10 10:30:15 +02:00
parent 974e0bb522
commit 141688ef32
6 changed files with 321 additions and 111 deletions

View File

@ -1,4 +1,4 @@
[gd_resource type="Resource" script_class="GUIDEMappingContext" load_steps=60 format=3 uid="uid://bl5crtu1gkrtr"]
[gd_resource type="Resource" script_class="GUIDEMappingContext" load_steps=65 format=3 uid="uid://bl5crtu1gkrtr"]
[ext_resource type="Script" uid="uid://cpplm41b5bt6m" path="res://addons/guide/guide_action_mapping.gd" id="1_qmhk6"]
[ext_resource type="Resource" uid="uid://htqvokm8mufq" path="res://systems/inputs/base_mode/move.tres" id="2_g6bbx"]
@ -21,6 +21,7 @@
[ext_resource type="Script" uid="uid://rvttn472ix6v" path="res://addons/guide/inputs/guide_input_joy_button.gd" id="19_qkgmj"]
[ext_resource type="Resource" uid="uid://bdit2jy5gbpts" path="res://systems/inputs/base_mode/jump.tres" id="21_818lq"]
[ext_resource type="Resource" uid="uid://b5gx3q8nvu72e" path="res://systems/inputs/base_mode/hit.tres" id="22_2hs2y"]
[ext_resource type="Resource" uid="uid://d2r0ur8k3cuu3" path="res://systems/inputs/base_mode/drop.tres" id="22_qmhk6"]
[ext_resource type="Script" uid="uid://dsa1dnifd6w32" path="res://addons/guide/guide_mapping_context.gd" id="23_llfhp"]
[sub_resource type="Resource" id="Resource_vkvga"]
@ -251,8 +252,33 @@ script = ExtResource("1_qmhk6")
action = ExtResource("22_2hs2y")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_500v3")])
[sub_resource type="Resource" id="Resource_g6bbx"]
script = ExtResource("19_qkgmj")
button = 1
joy_index = -1
[sub_resource type="Resource" id="Resource_yp12v"]
script = ExtResource("15_fykw6")
actuation_threshold = 0.5
[sub_resource type="Resource" id="Resource_1rw8g"]
script = ExtResource("3_yp12v")
override_action_settings = false
is_remappable = false
display_name = ""
display_category = ""
input = SubResource("Resource_g6bbx")
modifiers = Array[ExtResource("5_0qat1")]([])
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_yp12v")])
[sub_resource type="Resource" id="Resource_0qat1"]
script = ExtResource("1_qmhk6")
action = ExtResource("22_qmhk6")
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_1rw8g")])
metadata/_guide_input_mappings_collapsed = false
[resource]
script = ExtResource("23_llfhp")
display_name = ""
mappings = Array[ExtResource("1_qmhk6")]([SubResource("Resource_88x08"), SubResource("Resource_tgr2g"), SubResource("Resource_iarn8"), SubResource("Resource_0hmrk"), SubResource("Resource_iihs4"), SubResource("Resource_0s4kt"), SubResource("Resource_xt1x5"), SubResource("Resource_ew1hw")])
mappings = Array[ExtResource("1_qmhk6")]([SubResource("Resource_88x08"), SubResource("Resource_tgr2g"), SubResource("Resource_iarn8"), SubResource("Resource_0hmrk"), SubResource("Resource_iihs4"), SubResource("Resource_0s4kt"), SubResource("Resource_xt1x5"), SubResource("Resource_ew1hw"), SubResource("Resource_0qat1")])
metadata/_custom_type_script = "uid://dsa1dnifd6w32"

View File

@ -0,0 +1,14 @@
[gd_resource type="Resource" script_class="GUIDEAction" load_steps=2 format=3 uid="uid://d2r0ur8k3cuu3"]
[ext_resource type="Script" uid="uid://cluhc11vixkf1" path="res://addons/guide/guide_action.gd" id="1_3acf8"]
[resource]
script = ExtResource("1_3acf8")
name = &""
action_value_type = 0
block_lower_priority_actions = true
emit_as_godot_actions = false
is_remappable = false
display_name = ""
display_category = ""
metadata/_custom_type_script = "uid://cluhc11vixkf1"

View File

@ -15,6 +15,7 @@ class_name InputController
@export var aim_canceled:GUIDEAction
@export var jump:GUIDEAction
@export var hit:GUIDEAction
@export var drop:GUIDEAction
signal input_move(value: Vector3)
signal input_rotate_y(value: float)
@ -25,6 +26,7 @@ signal input_aim_released
signal input_aim_canceled
signal input_jump
signal input_hit
signal input_drop
func _ready() -> void:
GUIDE.enable_mapping_context(base_mode)
@ -34,6 +36,10 @@ func _ready() -> void:
aim_canceled.triggered.connect(on_input_aim_canceled)
jump.triggered.connect(on_input_jump)
hit.triggered.connect(on_input_hit)
drop.triggered.connect(on_input_drop)
func on_input_drop():
input_drop.emit()
func on_input_hit():
input_hit.emit()

View File

@ -1,5 +1,6 @@
using Godot;
using Movementtests.player_controller.Scripts;
using RustyOptions;
namespace Movementtests.systems;
@ -38,8 +39,6 @@ public partial class MoveSystem : Node3D
[Export(PropertyHint.Range, "0,5,0.1,or_greater")]
public float DoubleJumpSpeedFactor { get; set; } = 2f;
public bool CanDoubleJump { get; set; } = true;
private float _lastFrameWasOnFloor = -Mathf.Inf;
private Gravity _gravity;
private CharacterBody3D _parent;
@ -81,12 +80,6 @@ public partial class MoveSystem : Node3D
y: _parent.Velocity.Y - (_gravity.CalculateGravityForce() * (float)delta),
z: _parent.Velocity.Z);
}
if (isOnFloor)
{
_lastFrameWasOnFloor = Engine.GetPhysicsFrames();
CanDoubleJump = true;
}
// The code below is required to quickly adjust player's position on Y-axis when there's a ceiling on the
// trajectory of player's jump and player is standing
@ -174,29 +167,33 @@ public partial class MoveSystem : Node3D
}
}
public void Jump(bool isOnFloor)
public void Jump(bool isDoubleJump)
{
var jumpForce = isDoubleJump
? _gravity.CalculateJumpForce() * DoubleJumpSpeedFactor
: _gravity.CalculateJumpForce();
_parent.Velocity = new Vector3(
x: _parent.Velocity.X,
y: jumpForce,
z: _parent.Velocity.Z);
}
public bool CanMantle()
{
var mantleLocationResult = _mantleSystem.FindMantleInFrontOfPlayer();
return mantleLocationResult.IsSome(out _);
}
public Option<Tween> Mantle()
{
var mantleLocationResult = _mantleSystem.FindMantleInFrontOfPlayer();
if (mantleLocationResult.IsSome(out var mantleLocation))
{
var duration = 0.1f * mantleLocation.DistanceTo(_parent.Position);
_tweenQueueSystem.QueueTween(mantleLocation, duration);
var tween = _tweenQueueSystem.TweenToLocation(new TweenQueueSystem.TweenInputs(mantleLocation, duration));
return tween.Some();
}
else if (isOnFloor)
{
_parent.Velocity = new Vector3(
x: _parent.Velocity.X,
y: _gravity.CalculateJumpForce(),
z: _parent.Velocity.Z);
}
else if (CanDoubleJump)
{
CanDoubleJump = false;
_parent.Velocity = new Vector3(
x: _parent.Velocity.X,
y: _gravity.CalculateJumpForce() * DoubleJumpSpeedFactor,
z: _parent.Velocity.Z);
}
return Option<Tween>.None;
}
}