Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 66be7838bb | |||
| 1eb65d1520 | |||
| f2a39316ba | |||
| fffd8c947b | |||
| a1d57d6a1a | |||
| 941205af2b |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -10,6 +10,7 @@
|
||||
.import/
|
||||
|
||||
/builds
|
||||
/communication
|
||||
|
||||
# Imported translations (automatically generated from CSV files)
|
||||
*.translation
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -27,7 +27,7 @@ shader_parameter/floorRoughnessMap = ExtResource("4_rir86")
|
||||
shader_parameter/floorNormalMap = ExtResource("3_f1b6h")
|
||||
shader_parameter/floorHeightMap = ExtResource("2_0e3id")
|
||||
shader_parameter/floorUvScale = 0.5
|
||||
shader_parameter/enablePom = true
|
||||
shader_parameter/enablePom = false
|
||||
shader_parameter/heightMinLayers = 8
|
||||
shader_parameter/heightMaxLayers = 64
|
||||
shader_parameter/heightScale = 0.08
|
||||
|
||||
@@ -28,6 +28,7 @@ uniform float heightScale = 1.0;
|
||||
|
||||
varying vec3 worldPos;
|
||||
varying vec3 worldNormal;
|
||||
varying vec3 diffuse;
|
||||
|
||||
|
||||
void vertex() {
|
||||
@@ -177,12 +178,14 @@ void fragment() {
|
||||
// sample and output
|
||||
SPECULAR = specular;
|
||||
ALBEDO = triplanarSample(texCoordX, texCoordY, texCoordZ, blend, yDot).rgb;
|
||||
diffuse = ALBEDO;
|
||||
ROUGHNESS = triplanarRoughness(texCoordX, texCoordY, texCoordZ, blend, yDot).r;
|
||||
NORMAL = mix(worldNormal, triplanarNormal(yDot, texCoordX, texCoordY, texCoordZ, blend), normalMapStrength);
|
||||
NORMAL = normalize((VIEW_MATRIX * vec4(NORMAL, 0.0)).xyz);
|
||||
}
|
||||
|
||||
//void light() {
|
||||
// // Called for every pixel for every light affecting the material.
|
||||
// // Uncomment to replace the default light processing function with this one.
|
||||
//}
|
||||
void light() {
|
||||
float lambert = clamp(dot(NORMAL, LIGHT), 0.0, 1.0);
|
||||
float halfLambert = pow(lambert*0.5 + 0.5, 5);
|
||||
DIFFUSE_LIGHT += halfLambert * ATTENUATION * LIGHT_COLOR / PI;
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ shader_parameter/floorRoughnessMap = ExtResource("4_4vhk1")
|
||||
shader_parameter/floorNormalMap = ExtResource("3_ytvoj")
|
||||
shader_parameter/floorHeightMap = ExtResource("2_4vhk1")
|
||||
shader_parameter/floorUvScale = 0.5
|
||||
shader_parameter/enablePom = true
|
||||
shader_parameter/enablePom = false
|
||||
shader_parameter/heightMinLayers = 8
|
||||
shader_parameter/heightMaxLayers = 64
|
||||
shader_parameter/heightScale = 0.2
|
||||
|
||||
@@ -27,7 +27,7 @@ shader_parameter/floorRoughnessMap = ExtResource("4_ob11h")
|
||||
shader_parameter/floorNormalMap = ExtResource("3_ff2cr")
|
||||
shader_parameter/floorHeightMap = ExtResource("2_roy1o")
|
||||
shader_parameter/floorUvScale = 0.5
|
||||
shader_parameter/enablePom = true
|
||||
shader_parameter/enablePom = false
|
||||
shader_parameter/heightMinLayers = 8
|
||||
shader_parameter/heightMaxLayers = 64
|
||||
shader_parameter/heightScale = 1.0
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -567,6 +567,12 @@ use_collision = true
|
||||
size = Vector3(3, 1, 0.25)
|
||||
material = ExtResource("3_vvhq3")
|
||||
|
||||
[node name="CSGBox3D57" type="CSGBox3D" parent="Greybox/Mantles"]
|
||||
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -13, 3.5, -21.629175)
|
||||
use_collision = true
|
||||
size = Vector3(5, 1, 0.25)
|
||||
material = ExtResource("3_vvhq3")
|
||||
|
||||
[node name="CSGBox3D54" type="CSGBox3D" parent="Greybox/Mantles"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.5, 1, 20.125)
|
||||
use_collision = true
|
||||
|
||||
@@ -63,16 +63,17 @@ blend_mode = 1
|
||||
[node name="Player" type="CharacterBody3D"]
|
||||
script = ExtResource("1_poq2x")
|
||||
WalkSpeed = 7.5
|
||||
AccelerationAir = 2.0
|
||||
DecelerationAir = 0.1
|
||||
Weight = 5.0
|
||||
MantleTime = 0.2
|
||||
AccelerationAir = 0.8
|
||||
DecelerationAir = 0.02
|
||||
Weight = 4.0
|
||||
MantlePath = ExtResource("2_6lejt")
|
||||
MantleDashStrength = 20.0
|
||||
MantleJumpStartVelocity = 13.0
|
||||
CoyoteTime = 0.3
|
||||
SimpleJumpStartVelocity = 8.0
|
||||
InputBufferFrames = 5
|
||||
SimpleJumpStartVelocity = 6.0
|
||||
SimpleJumpHangTimeInFrames = 1
|
||||
SimpleJumpGravityLesseningFactor = 2.5
|
||||
DoubleJumpStartVelocity = 15.0
|
||||
SimpleJumpGravityLesseningFactor = 2.0
|
||||
DoubleJumpHangTimeInFrames = 3
|
||||
DoubleJumpGravityLesseningFactor = 1.5
|
||||
MegaJumpStartVelocity = 30.0
|
||||
@@ -236,6 +237,11 @@ transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 0
|
||||
mesh = SubResource("CylinderMesh_nodcl")
|
||||
|
||||
[node name="DashCooldown" type="Timer" parent="."]
|
||||
wait_time = 0.8
|
||||
one_shot = true
|
||||
|
||||
[node name="AirborneDashCooldown" type="Timer" parent="."]
|
||||
wait_time = 0.5
|
||||
one_shot = true
|
||||
|
||||
[node name="PowerCooldown" type="Timer" parent="."]
|
||||
@@ -255,6 +261,7 @@ offset_bottom = 1.0
|
||||
initial_node_to_watch = NodePath("../StateChart")
|
||||
|
||||
[node name="UI" type="Control" parent="."]
|
||||
visible = false
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
@@ -500,6 +507,12 @@ to = NodePath("../../Grounded")
|
||||
event = &"grounded"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="OnMantleOtherSide" type="Node" parent="StateChart/Root/Movement/Mantling"]
|
||||
script = ExtResource("28_n7qhm")
|
||||
to = NodePath("../../OnWall/Hugging")
|
||||
event = &"on_wall"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="Jump" type="Node" parent="StateChart/Root/Movement"]
|
||||
script = ExtResource("26_infe6")
|
||||
initial_state = NodePath("SimpleJump")
|
||||
@@ -608,7 +621,7 @@ default_state = NodePath("../CoyoteEnabled")
|
||||
|
||||
[node name="OnWallRun" type="Node" parent="StateChart/Root/Movement/Airborne"]
|
||||
script = ExtResource("28_n7qhm")
|
||||
to = NodePath("../../OnWall/RunningCoyoteEnabled")
|
||||
to = NodePath("../../OnWall/Running")
|
||||
event = &"wall_run"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
@@ -671,7 +684,7 @@ script = ExtResource("27_34snm")
|
||||
|
||||
[node name="OnWallHug" type="Node" parent="StateChart/Root/Movement/Airborne/Falling"]
|
||||
script = ExtResource("28_n7qhm")
|
||||
to = NodePath("../../../OnWall/HuggingCoyoteEnabled")
|
||||
to = NodePath("../../../OnWall/Hugging")
|
||||
event = &"wall_hug"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
@@ -735,7 +748,7 @@ script = ExtResource("27_34snm")
|
||||
|
||||
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall/Hugging"]
|
||||
script = ExtResource("28_n7qhm")
|
||||
to = NodePath("../../../Jump/SimpleJump")
|
||||
to = NodePath("../../../Jump/DoubleJump")
|
||||
event = &"jump"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
@@ -744,7 +757,7 @@ script = ExtResource("27_34snm")
|
||||
|
||||
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall/Hanging"]
|
||||
script = ExtResource("28_n7qhm")
|
||||
to = NodePath("../../../Jump/SimpleJump")
|
||||
to = NodePath("../../../Jump/DoubleJump")
|
||||
event = &"jump"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
|
||||
@@ -16,6 +16,16 @@ public partial class PlayerController : CharacterBody3D
|
||||
}
|
||||
private bool _isUsingGamepad;
|
||||
|
||||
public enum BufferedActions
|
||||
{
|
||||
None,
|
||||
Jump,
|
||||
MantleJump,
|
||||
Dash,
|
||||
MantleDash
|
||||
}
|
||||
private BufferedActions _bufferedAction = BufferedActions.None;
|
||||
|
||||
// User API to important child nodes.
|
||||
public HeadSystem HeadSystem;
|
||||
public Bobbing Bobbing;
|
||||
@@ -58,6 +68,7 @@ public partial class PlayerController : CharacterBody3D
|
||||
// Timers
|
||||
private Timer _timeScaleAimInAirTimer;
|
||||
private Timer _simpleDashCooldownTimer;
|
||||
private Timer _airborneDashCooldownTimer;
|
||||
private Timer _powerCooldownTimer;
|
||||
|
||||
[Export] public Marker3D TutorialWeaponTarget;
|
||||
@@ -78,16 +89,25 @@ public partial class PlayerController : CharacterBody3D
|
||||
public float DecelerationAir = 1.0f;
|
||||
[Export(PropertyHint.Range, "0,10,0.01,or_greater")]
|
||||
public float Weight { get; set; } = 3.0f;
|
||||
|
||||
// Mantle
|
||||
[ExportGroup("Mantle")]
|
||||
[Export(PropertyHint.Range, "0,1,0.01,or_greater")]
|
||||
public float MantleTime { get; set; } = 0.1f;
|
||||
[Export]
|
||||
public PackedScene MantlePath { get; set; }
|
||||
|
||||
[Export(PropertyHint.Range, "0,50,0.1")]
|
||||
public float MantleDashStrength { get; set; } = 15f;
|
||||
[Export(PropertyHint.Range, "0,100,1,or_greater")]
|
||||
public float MantleJumpStartVelocity { get; set; } = 20.0f;
|
||||
|
||||
// Jump
|
||||
[ExportGroup("Jump")]
|
||||
[Export(PropertyHint.Range, "0,1,0.01")]
|
||||
public float CoyoteTime { get; set; } = 0.2f;
|
||||
[Export(PropertyHint.Range, "0,10,1,or_greater")]
|
||||
public int InputBufferFrames { get; set; } = 3;
|
||||
|
||||
// Simple jump
|
||||
[ExportSubgroup("Simple jump")]
|
||||
@@ -204,7 +224,6 @@ public partial class PlayerController : CharacterBody3D
|
||||
private StateChartState _grounded;
|
||||
private StateChartState _airborne;
|
||||
private StateChartState _coyoteEnabled;
|
||||
// private StateChartState _doubleJumpEnabled;
|
||||
private StateChartState _simpleJump;
|
||||
private StateChartState _doubleJump;
|
||||
private StateChartState _megaJump;
|
||||
@@ -228,6 +247,8 @@ public partial class PlayerController : CharacterBody3D
|
||||
private Transition _onLeaveWallFromRunCoyote;
|
||||
private Transition _onLeaveWallFromRun;
|
||||
|
||||
private int _currentInputBufferFrames;
|
||||
|
||||
private float _playerHeight;
|
||||
private float _playerRadius;
|
||||
private bool _isJumpInputPressed;
|
||||
@@ -327,6 +348,7 @@ public partial class PlayerController : CharacterBody3D
|
||||
_powerCooldownTimer = GetNode<Timer>("PowerCooldown");
|
||||
_timeScaleAimInAirTimer = GetNode<Timer>("TimeScaleAimInAir");
|
||||
_simpleDashCooldownTimer = GetNode<Timer>("DashCooldown");
|
||||
_airborneDashCooldownTimer = GetNode<Timer>("AirborneDashCooldown");
|
||||
|
||||
///////////////////////////
|
||||
// Initialize components //
|
||||
@@ -398,6 +420,7 @@ public partial class PlayerController : CharacterBody3D
|
||||
_aimedDash.StateExited += OnAimedDashFinished;
|
||||
|
||||
_simpleDashCooldownTimer.Timeout += DashCooldownTimeout;
|
||||
_airborneDashCooldownTimer.Timeout += AirborneDashCooldownTimeout;
|
||||
|
||||
_onWall.StateEntered += OnWallStarted;
|
||||
_onWall.StateExited += OnWallStopped;
|
||||
@@ -463,16 +486,48 @@ public partial class PlayerController : CharacterBody3D
|
||||
|
||||
if (_simpleDashCooldownTimer.IsStopped())
|
||||
_simpleDashCooldownTimer.Start();
|
||||
|
||||
if (_bufferedAction == BufferedActions.Jump && _currentInputBufferFrames > 0)
|
||||
{
|
||||
_currentInputBufferFrames = 0;
|
||||
PerformJump();
|
||||
}
|
||||
if (_bufferedAction == BufferedActions.Dash && _currentInputBufferFrames > 0)
|
||||
{
|
||||
_currentInputBufferFrames = 0;
|
||||
SimpleDash();
|
||||
}
|
||||
|
||||
if (_bufferedAction == BufferedActions.MantleJump)
|
||||
{
|
||||
SimpleDash();
|
||||
OnJumpStarted(MantleJumpStartVelocity);
|
||||
}
|
||||
if (_bufferedAction == BufferedActions.MantleDash)
|
||||
{
|
||||
SimpleDash(MantleDashStrength);
|
||||
}
|
||||
|
||||
_bufferedAction = BufferedActions.None;
|
||||
}
|
||||
|
||||
public void DashCooldownTimeout()
|
||||
{
|
||||
_canDash = true;
|
||||
}
|
||||
public void AirborneDashCooldownTimeout()
|
||||
{
|
||||
_canDashAirborne = true;
|
||||
}
|
||||
|
||||
public bool IsPlayerInputtingForward()
|
||||
{
|
||||
return GetMoveInput().Z < -0.5f;
|
||||
}
|
||||
|
||||
public bool IsTryingToMantle()
|
||||
{
|
||||
return MantleSystem.IsMantlePossible && GetMoveInput().Z < -0.5f && _isJumpInputPressed;
|
||||
return MantleSystem.IsMantlePossible && IsPlayerInputtingForward() && _isJumpInputPressed;
|
||||
}
|
||||
|
||||
public void HandleGrounded(float delta)
|
||||
@@ -627,7 +682,15 @@ public partial class PlayerController : CharacterBody3D
|
||||
// Jump
|
||||
public void OnInputJumpStarted()
|
||||
{
|
||||
_currentInputBufferFrames = InputBufferFrames;
|
||||
_bufferedAction = _mantling.Active ? BufferedActions.MantleJump : BufferedActions.Jump;
|
||||
_isJumpInputPressed = true;
|
||||
|
||||
PerformJump();
|
||||
}
|
||||
|
||||
public void PerformJump()
|
||||
{
|
||||
if (MantleSystem.IsMantlePossible)
|
||||
{
|
||||
_playerState.SendEvent("mantle");
|
||||
@@ -640,16 +703,15 @@ public partial class PlayerController : CharacterBody3D
|
||||
return;
|
||||
}
|
||||
|
||||
if (_onWallHuggingCoyoteEnabled.Active || _onWallRunningCoyoteEnabled.Active)
|
||||
{
|
||||
if (!_isWallJumpAvailable)
|
||||
{
|
||||
OnJumpFromWall();
|
||||
}
|
||||
}
|
||||
if (_onWall.Active && !_isWallJumpAvailable && IsFacingWall()) return;
|
||||
_playerState.SendEvent("jump");
|
||||
}
|
||||
|
||||
public bool IsFacingWall()
|
||||
{
|
||||
return _wallHugStartNormal.Dot(GetGlobalForwardFacingVector()) < -0.5f;
|
||||
}
|
||||
|
||||
public void OnInputJumpOngoing()
|
||||
{
|
||||
}
|
||||
@@ -672,7 +734,7 @@ public partial class PlayerController : CharacterBody3D
|
||||
public void OnDoubleJumpStarted()
|
||||
{
|
||||
_canDash = true;
|
||||
_canDashAirborne = true;
|
||||
// _canDashAirborne = true;
|
||||
OnJumpStarted(DoubleJumpStartVelocity);
|
||||
}
|
||||
public void OnMegaJumpStarted()
|
||||
@@ -704,7 +766,14 @@ public partial class PlayerController : CharacterBody3D
|
||||
|
||||
public void OnJumpFromWall()
|
||||
{
|
||||
ComputeJumpFromWallHSpeed(WallJumpStartVelocity);
|
||||
if (!IsFacingWall())
|
||||
{
|
||||
ComputeJumpFromWallHSpeed(WallJumpStartVelocity);
|
||||
}
|
||||
// Remove the ability to dash straight away so you cannot scale up the wall
|
||||
_canDashAirborne = false;
|
||||
_airborneDashCooldownTimer.Start();
|
||||
_isWallJumpAvailable = false;
|
||||
}
|
||||
public void OnMegajumpFromWall()
|
||||
{
|
||||
@@ -767,6 +836,11 @@ public partial class PlayerController : CharacterBody3D
|
||||
private Transform3D _customMantleStartTransform;
|
||||
private Curve3D _customMantleCurve;
|
||||
private Vector3 _mantleStartPosition;
|
||||
|
||||
private Vector3 _velocityOnMantleStarted = Vector3.Zero;
|
||||
|
||||
private bool _mantleEndedOnOtherSideOfWall;
|
||||
private bool _mantleFoundGround;
|
||||
public void OnMantleStarted()
|
||||
{
|
||||
HeadSystem.OnMantle();
|
||||
@@ -777,17 +851,22 @@ public partial class PlayerController : CharacterBody3D
|
||||
GD.PrintErr("Failed to instantiate MantlePath");
|
||||
return;
|
||||
}
|
||||
|
||||
_velocityOnMantleStarted = Velocity;
|
||||
|
||||
var transform = _customMantle ? _customMantleStartTransform : MantleSystem.GlobalTransform;
|
||||
var curve = _customMantle ? _customMantleCurve : MantleSystem.MantleCurve;
|
||||
_mantleEndedOnOtherSideOfWall = _customMantle ? _mantleEndedOnOtherSideOfWall : MantleSystem.EndedOnOtherSideOfWall;
|
||||
_mantleFoundGround = _customMantle ? _mantleFoundGround : MantleSystem.FoundGround;
|
||||
GetTree().GetRoot().AddChild(_mantlePath);
|
||||
_mantlePath.Setup(transform, curve);
|
||||
_mantleStartPosition = GlobalPosition;
|
||||
|
||||
|
||||
var curveLength = curve.GetBakedLength();
|
||||
var tween = GetTree().CreateTween();
|
||||
tween.SetTrans(Tween.TransitionType.Linear);
|
||||
tween.SetEase(Tween.EaseType.InOut);
|
||||
tween.TweenProperty(_mantlePath.PathFollow, "progress_ratio", 1, MantleTime);
|
||||
tween.SetEase(Tween.EaseType.In);
|
||||
tween.TweenProperty(_mantlePath.PathFollow, "progress_ratio", 1, MantleTime*curveLength);
|
||||
tween.Finished += MantleFinished;
|
||||
}
|
||||
|
||||
@@ -796,26 +875,31 @@ public partial class PlayerController : CharacterBody3D
|
||||
GlobalPosition = _mantlePath.Target.GlobalPosition;
|
||||
}
|
||||
|
||||
public void SimpleDashInDirection(Vector3 direction)
|
||||
public void SimpleDashInDirection(Vector3 direction, float strength = -1)
|
||||
{
|
||||
SetVelocity(direction * SimpleDashStrength);
|
||||
if (strength < 0) strength = SimpleDashStrength;
|
||||
SetVelocity(direction * strength);
|
||||
}
|
||||
|
||||
public void SimpleDash()
|
||||
public void SimpleDash(float strength = -1)
|
||||
{
|
||||
SimpleDashInDirection(GetInputGlobalHDirection());
|
||||
SimpleDashInDirection(GetInputGlobalHDirection(), strength);
|
||||
}
|
||||
|
||||
public void MantleFinished()
|
||||
{
|
||||
_mantlePath.Teardown();
|
||||
|
||||
// SetVelocity(_finalCurveDirection.Normalized() * _speedOverCurve);
|
||||
|
||||
var isThereMovementInput = GetMoveInput().Length() > 0;
|
||||
if (isThereMovementInput)
|
||||
{
|
||||
// If there's a movement input on Mantle, we dash in the direction the mantle took place
|
||||
// If there's a movement input on Mantle, we dash in the direction the mantle ended with
|
||||
var positionDifference = GlobalPosition - _mantleStartPosition;
|
||||
var directionHorizontal = new Vector3(positionDifference.X, 0, positionDifference.Z);
|
||||
SimpleDashInDirection(directionHorizontal.Normalized());
|
||||
// SimpleDashInDirection(directionHorizontal.Normalized());
|
||||
SetVelocity(directionHorizontal.Normalized() * WalkSpeed);
|
||||
}
|
||||
|
||||
_customMantle = false;
|
||||
@@ -852,8 +936,8 @@ public partial class PlayerController : CharacterBody3D
|
||||
SetVerticalVelocity(Velocity.Y - 2.0f);
|
||||
}
|
||||
|
||||
// Move back to Airborne state management when starting to go down again
|
||||
if (_framesSinceJumpAtApex > hangFrames)
|
||||
// Move back to Airborne state when starting to go down again or if input isn't held anymore (buffered jump)
|
||||
if (_framesSinceJumpAtApex > hangFrames || !_isJumpInputPressed)
|
||||
_playerState.SendEvent("jump_ended");
|
||||
}
|
||||
public void HandleSimpleJump(float delta)
|
||||
@@ -966,7 +1050,9 @@ public partial class PlayerController : CharacterBody3D
|
||||
return;
|
||||
_canDashAirborne = false;
|
||||
}
|
||||
|
||||
|
||||
_currentInputBufferFrames = InputBufferFrames;
|
||||
_bufferedAction = _mantling.Active ? BufferedActions.MantleDash : BufferedActions.Dash;
|
||||
_playerState.SendEvent("dash");
|
||||
}
|
||||
public void OnAimingEntered()
|
||||
@@ -1090,6 +1176,8 @@ public partial class PlayerController : CharacterBody3D
|
||||
_customMantle = DashSystem.ShouldMantle;
|
||||
_customMantleCurve = DashSystem.MantleSystem.MantleCurve;
|
||||
_customMantleStartTransform = DashSystem.MantleSystem.GlobalTransform;
|
||||
_mantleEndedOnOtherSideOfWall = DashSystem.MantleSystem.EndedOnOtherSideOfWall;
|
||||
_mantleFoundGround = DashSystem.MantleSystem.FoundGround;
|
||||
}
|
||||
|
||||
Tween CreatePositionTween(Vector3 targetLocation, float tweenTime)
|
||||
@@ -1366,12 +1454,19 @@ public partial class PlayerController : CharacterBody3D
|
||||
{
|
||||
WeaponRoot.SetRotation(HeadSystem.Rotation);
|
||||
}
|
||||
|
||||
public Vector3 GetGlobalForwardFacingVector()
|
||||
{
|
||||
return Transform.Basis * HeadSystem.Transform.Basis * Vector3.Forward;
|
||||
}
|
||||
|
||||
///////////////////////////
|
||||
// Processes //////////////
|
||||
///////////////////////////
|
||||
public override void _PhysicsProcess(double delta)
|
||||
{
|
||||
if (_currentInputBufferFrames > 0) _currentInputBufferFrames -= 1;
|
||||
|
||||
LookAround(delta);
|
||||
CameraModifications((float) delta);
|
||||
HandleStairs((float) delta);
|
||||
|
||||
@@ -161,5 +161,6 @@ common/physics_interpolation=true
|
||||
[rendering]
|
||||
|
||||
textures/vram_compression/import_etc2_astc=true
|
||||
lights_and_shadows/directional_shadow/soft_shadow_filter_quality=5
|
||||
environment/volumetric_fog/volume_size=256
|
||||
environment/volumetric_fog/volume_depth=256
|
||||
|
||||
@@ -21,6 +21,8 @@ public partial class MantleSystem: Node3D
|
||||
public Vector3 FirstMantleProfilePoint { get; private set; } = Vector3.Zero;
|
||||
|
||||
public bool IsMantlePossible { get; private set; } = false;
|
||||
public bool EndedOnOtherSideOfWall { get; private set; } = false;
|
||||
public bool FoundGround { get; private set; } = false;
|
||||
public const int WallProfileCastCount = 7;
|
||||
|
||||
private ShapeCast3D[] _wallProfileShapecasts = new ShapeCast3D[WallProfileCastCount];
|
||||
@@ -55,6 +57,8 @@ public partial class MantleSystem: Node3D
|
||||
|
||||
// Reset state
|
||||
IsMantlePossible = false;
|
||||
EndedOnOtherSideOfWall = false;
|
||||
FoundGround = false;
|
||||
if (!isColliding) return;
|
||||
|
||||
// Check if face something wall-like that should be climbable
|
||||
@@ -62,6 +66,7 @@ public partial class MantleSystem: Node3D
|
||||
if (collisionNormal.Y > 0.7f) return;
|
||||
|
||||
var spaceState = GetWorld3D().DirectSpaceState;
|
||||
|
||||
MantleCurve = new Curve3D();
|
||||
MantleCurve.AddPoint(Vector3.Zero);
|
||||
var hasFirstProfileHit = false;
|
||||
@@ -76,7 +81,19 @@ public partial class MantleSystem: Node3D
|
||||
// Got to the other side of the wall, we stop there
|
||||
if (!wallProfileShapecast.IsColliding())
|
||||
{
|
||||
// MantleCurve.AddPoint(ToLocal(globalTargetPosition));
|
||||
/*EndedOnOtherSideOfWall = true;
|
||||
|
||||
var origin = globalTargetPosition;
|
||||
var end = origin + Vector3.Down*0.51f; // We check for the ground a bit below our target
|
||||
var groundQuery = PhysicsRayQueryParameters3D.Create(origin, end, wallProfileShapecast.CollisionMask);
|
||||
var groundResult = spaceState.IntersectRay(groundQuery);
|
||||
if (groundResult.Count > 0)
|
||||
{
|
||||
// We found the ground, this is our final location
|
||||
FoundGround = true;
|
||||
Vector3 position = (Vector3) groundResult["position"];
|
||||
MantleCurve.AddPoint(ToLocal(position));
|
||||
}*/
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user