ld-gd: basic greyboxing, double jump

This commit is contained in:
2025-05-21 19:36:40 +02:00
parent b3a28436bc
commit 67461aa4be
4 changed files with 128 additions and 18 deletions

View File

@ -29,7 +29,9 @@ public partial class FieldOfView: Node3D
public void PerformFovAdjustment(FovParameters parameters)
{
float velocityClamped = Mathf.Clamp(
parameters.Velocity.Length(), 0.5f, parameters.SprintSpeed * 2.0f);
Mathf.Abs(parameters.Velocity.X) + Mathf.Abs(parameters.Velocity.Z),
0.5f,
parameters.SprintSpeed * 2.0f);
float targetFov = BaseFov + FovChangeFactor * velocityClamped;

View File

@ -24,6 +24,11 @@ public partial class PlayerController : CharacterBody3D
[Export(PropertyHint.Range, "0,100,0.1,or_greater")]
public float CrouchTransitionSpeed { get; set; } = 20.0f;
[Export(PropertyHint.Range, "0,5,0.1,or_greater")]
public float DoubleJumpSpeedFactor { get; set; } = 2f;
private bool _canDoubleJump = true;
private float _currentSpeed;
private const float DecelerationSpeedFactorFloor = 15.0f;
@ -115,6 +120,7 @@ public partial class PlayerController : CharacterBody3D
if (isOnFloorCustom())
{
_lastFrameWasOnFloor = Engine.GetPhysicsFrames();
_canDoubleJump = true;
}
// Adding the gravity
@ -139,6 +145,15 @@ public partial class PlayerController : CharacterBody3D
y: Gravity.CalculateJumpForce() * (float)delta,
z: Velocity.Z);
}
else if (Input.IsActionJustPressed("jump") && !isOnFloorCustom()
&& !doesCapsuleHaveCrouchingHeight && !isPlayerDead && _canDoubleJump)
{
_canDoubleJump = false;
Velocity = new Vector3(
x: Velocity.X,
y: Gravity.CalculateJumpForce() * (float)delta * DoubleJumpSpeedFactor,
z: Velocity.Z);
}
bool isHeadTouchingCeiling = IsHeadTouchingCeiling();
bool doesCapsuleHaveDefaultHeight = CapsuleCollider.IsDefaultHeight();

117
main.tscn
View File

@ -21,13 +21,16 @@ glow_enabled = true
environment = SubResource("Environment_1bvp3")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(-0.866024, -0.433016, 0.250001, -0.320371, 0.864432, 0.387452, -0.383882, 0.255449, -0.887345, 0, 0, 0)
transform = Transform3D(-0.772218, 0.611111, 0.173844, 0.0446935, -0.220691, 0.974319, 0.633783, 0.760157, 0.143109, 0, 0, 0)
shadow_enabled = true
[node name="Player" parent="." instance=ExtResource("1_ig7tw")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.25692, 0.0273442, 30.8297)
WalkSpeed = 10.0
SprintSpeed = 15.0
[node name="Greybox" type="Node" parent="."]
[node name="Greybox" type="CSGCombiner3D" parent="."]
use_collision = true
[node name="CSGBox3D" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.09619, -0.472656, -0.958893)
@ -35,57 +38,137 @@ use_collision = true
size = Vector3(100, 1, 100)
[node name="CSGBox3D2" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22.4157, 5, 14.9013)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22, 5, 11.0613)
use_collision = true
size = Vector3(10, 10, 50)
size = Vector3(10, 10, 57.8774)
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Greybox"]
[node name="Stairs" type="CSGCombiner3D" parent="Greybox"]
use_collision = true
[node name="CSGBox3D5" type="CSGBox3D" parent="Greybox/CSGCombiner3D"]
[node name="CSGBox3D5" type="CSGBox3D" parent="Greybox/Stairs"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.0294, 0.5, 32.891)
size = Vector3(3, 1, 3)
[node name="CSGBox3D6" type="CSGBox3D" parent="Greybox/CSGCombiner3D"]
[node name="CSGBox3D6" type="CSGBox3D" parent="Greybox/Stairs"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.029, 1, 29.905)
size = Vector3(3, 2, 3)
[node name="CSGBox3D7" type="CSGBox3D" parent="Greybox/CSGCombiner3D"]
[node name="CSGBox3D7" type="CSGBox3D" parent="Greybox/Stairs"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.029, 1.5, 26.9138)
size = Vector3(3, 3, 3)
[node name="CSGBox3D8" type="CSGBox3D" parent="Greybox/CSGCombiner3D"]
[node name="CSGBox3D8" type="CSGBox3D" parent="Greybox/Stairs"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.029, 2, 23.9462)
size = Vector3(3, 4, 3)
[node name="CSGBox3D9" type="CSGBox3D" parent="Greybox/CSGCombiner3D"]
[node name="CSGBox3D9" type="CSGBox3D" parent="Greybox/Stairs"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.029, 2.5, 20.975)
size = Vector3(3, 5, 3)
[node name="CSGBox3D10" type="CSGBox3D" parent="Greybox/CSGCombiner3D"]
[node name="CSGBox3D10" type="CSGBox3D" parent="Greybox/Stairs"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.029, 3, 17.9825)
size = Vector3(3, 6, 3)
[node name="CSGBox3D11" type="CSGBox3D" parent="Greybox/CSGCombiner3D"]
[node name="CSGBox3D11" type="CSGBox3D" parent="Greybox/Stairs"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.029, 3.5, 15)
size = Vector3(3, 7, 3)
[node name="CSGBox3D12" type="CSGBox3D" parent="Greybox/CSGCombiner3D"]
[node name="CSGBox3D12" type="CSGBox3D" parent="Greybox/Stairs"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.029, 4, 12.018)
size = Vector3(3, 8, 3)
[node name="CSGBox3D13" type="CSGBox3D" parent="Greybox/CSGCombiner3D"]
[node name="CSGBox3D13" type="CSGBox3D" parent="Greybox/Stairs"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.029, 4.5, 9.04904)
size = Vector3(3, 9, 3)
[node name="CSGBox3D3" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.01999, 4.9845, 6.27246)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.0524, 10.795, 6.27246)
use_collision = true
size = Vector3(43.9793, 10, 2.62695)
size = Vector3(39.9961, 21.6211, 2.62695)
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Greybox/CSGBox3D3"]
transform = Transform3D(4.2, 0, 0, 0, -6.11959e-08, -7, 0, 1.4, -3.0598e-07, 8, -5, -0.293446)
transform = Transform3D(4.2, 0, 0, 0, -6.11959e-08, -7, 0, 1.4, -3.0598e-07, 8.96759, -10.8105, -0.293446)
operation = 2
radius = 1.0
height = 5.0
sides = 40
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="Greybox/CSGBox3D3"]
transform = Transform3D(4.2, 0, 0, 0, -6.11959e-08, -7, 0, 1.4, -3.0598e-07, -11.9615, -10.8105, -0.293446)
operation = 2
radius = 1.0
height = 5.0
sides = 40
[node name="CSGBox3D4" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 35.9586, 5, 15.3133)
use_collision = true
size = Vector3(25.9171, 10, 66.0572)
[node name="CSGBox3D9" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 21.5038, 2.5, 7.30957)
size = Vector3(3, 5, 25.3809)
[node name="CSGBox3D10" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 11.517, 1.29345, 21.5)
size = Vector3(3, 2.5, 22.978)
[node name="CSGBox3D5" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.45774, 10.7885, -6.46509)
use_collision = true
size = Vector3(2.15405, 21.577, 22.8794)
[node name="CSGBox3D6" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -7.80455, 10.8026, -16.8324)
use_collision = true
size = Vector3(2.15405, 21.6052, 18.459)
[node name="CSGBox3D7" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 45.6363, 5, -30.4887)
use_collision = true
size = Vector3(6.8864, 10, 40.8848)
[node name="CSGBox3D8" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 50.0149, 26.122, -0.963737)
use_collision = true
size = Vector3(2.14108, 52.2441, 99.9347)
[node name="CSGBox3D11" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -28.1405, 26.122, -0.963737)
use_collision = true
size = Vector3(2.14108, 52.2441, 99.9347)
[node name="CSGBox3D12" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 8.92915, 26.122, -49.9656)
use_collision = true
size = Vector3(2.14108, 52.2441, 99.9347)
[node name="CSGBox3D13" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 10.7529, 26.122, 49.3889)
use_collision = true
size = Vector3(2.14108, 52.2441, 99.9347)
[node name="CSGBox3D14" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -17.534, 10.8779, 27.1386)
use_collision = true
size = Vector3(1.10791, 1.71436, 25.7228)
[node name="CSGBox3D15" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.9058, 10.795, 47.0594)
use_collision = true
size = Vector3(76.2239, 21.6211, 2.62695)
[node name="CSGBox3D16" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14.0259, 22.0567, -5.15678)
use_collision = true
size = Vector3(74.1406, 1, 25.474)
[node name="CSGBox3D17" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -22.0327, 10.786, -16.8929)
use_collision = true
size = Vector3(2.03296, 2.20193, 10.1753)
[node name="CSGBox3D18" type="CSGBox3D" parent="Greybox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -17.534, 10.9583, -4.19618)
use_collision = true
size = Vector3(1.10791, 1.71436, 23.4043)

View File

@ -6,3 +6,13 @@
[node name="HealthSystem" parent="." index="3"]
ThresholdVelYForDamage = 0.0
[node name="Stamina" parent="." index="4"]
MaxRunTime = 1000.0
[node name="Gravity" parent="." index="8"]
AdditionalGravityPower = 4.02
[node name="Bobbing" parent="." index="9"]
BobbingFrequency = 1.41
BobbingAmplitude = 0.05