Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 66be7838bb | |||
| 1eb65d1520 | |||
| f2a39316ba |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -10,6 +10,7 @@
|
||||
.import/
|
||||
|
||||
/builds
|
||||
/communication
|
||||
|
||||
# Imported translations (automatically generated from CSV files)
|
||||
*.translation
|
||||
@@ -2588,6 +2588,7 @@ shape = SubResource("ConcavePolygonShape3D_wkikw")
|
||||
|
||||
[node name="Cube_174" parent="." index="174"]
|
||||
material_override = ExtResource("5_2eqlu")
|
||||
cast_shadow = 2
|
||||
|
||||
[node name="Cube_174_col" type="StaticBody3D" parent="Cube_174" index="0"]
|
||||
collision_layer = 3
|
||||
@@ -2608,6 +2609,7 @@ shape = SubResource("ConcavePolygonShape3D_4au7w")
|
||||
|
||||
[node name="Cube_176" parent="." index="176"]
|
||||
material_override = ExtResource("4_7r3kr")
|
||||
cast_shadow = 2
|
||||
|
||||
[node name="Cube_176_col" type="StaticBody3D" parent="Cube_176" index="0"]
|
||||
collision_layer = 3
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -102,6 +102,7 @@ player = NodePath("../Player")
|
||||
pause = ExtResource("10_0ari0")
|
||||
|
||||
[node name="TutorialController" type="Control" parent="."]
|
||||
visible = false
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
@@ -374,9 +375,10 @@ shadow_opacity = 0.95
|
||||
shadow_blur = 2.435
|
||||
|
||||
[node name="Player" parent="." node_paths=PackedStringArray("TutorialWeaponTarget") instance=ExtResource("1_2vsi6")]
|
||||
transform = Transform3D(0.054514527, 0, -0.9985129, 0, 1, 0, 0.9985129, 0, 0.054514527, 0, -132.75, 118)
|
||||
transform = Transform3D(0.054514527, 0, -0.9985129, 0, 1, 0, 0.9985129, 0, 0.054514527, -6, 75.5, -13.5)
|
||||
collision_layer = 17
|
||||
TutorialWeaponTarget = NodePath("../PlacedTutorialWeapon/WeaponLocationTarget")
|
||||
TutorialDone = true
|
||||
AccelerationAir = 1.5
|
||||
|
||||
[node name="DebugLayer" type="CanvasLayer" parent="."]
|
||||
|
||||
@@ -66,8 +66,9 @@ WalkSpeed = 7.5
|
||||
AccelerationAir = 0.8
|
||||
DecelerationAir = 0.02
|
||||
Weight = 4.0
|
||||
MantleTime = 0.3
|
||||
MantlePath = ExtResource("2_6lejt")
|
||||
MantleDashStrength = 20.0
|
||||
MantleJumpStartVelocity = 13.0
|
||||
CoyoteTime = 0.3
|
||||
InputBufferFrames = 5
|
||||
SimpleJumpStartVelocity = 6.0
|
||||
@@ -257,10 +258,10 @@ offset_left = 1524.0
|
||||
offset_top = 1.0
|
||||
offset_right = -8.0
|
||||
offset_bottom = 1.0
|
||||
enabled = false
|
||||
initial_node_to_watch = NodePath("../StateChart")
|
||||
|
||||
[node name="UI" type="Control" parent="."]
|
||||
visible = false
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
@@ -506,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")
|
||||
|
||||
@@ -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;
|
||||
@@ -79,12 +89,19 @@ 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")]
|
||||
@@ -207,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;
|
||||
@@ -231,7 +247,7 @@ public partial class PlayerController : CharacterBody3D
|
||||
private Transition _onLeaveWallFromRunCoyote;
|
||||
private Transition _onLeaveWallFromRun;
|
||||
|
||||
private int _currentJumpBufferFrames = 0;
|
||||
private int _currentInputBufferFrames;
|
||||
|
||||
private float _playerHeight;
|
||||
private float _playerRadius;
|
||||
@@ -470,12 +486,29 @@ public partial class PlayerController : CharacterBody3D
|
||||
|
||||
if (_simpleDashCooldownTimer.IsStopped())
|
||||
_simpleDashCooldownTimer.Start();
|
||||
|
||||
if (_currentJumpBufferFrames > 0)
|
||||
|
||||
if (_bufferedAction == BufferedActions.Jump && _currentInputBufferFrames > 0)
|
||||
{
|
||||
_currentJumpBufferFrames = 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()
|
||||
@@ -649,8 +682,10 @@ public partial class PlayerController : CharacterBody3D
|
||||
// Jump
|
||||
public void OnInputJumpStarted()
|
||||
{
|
||||
_currentJumpBufferFrames = InputBufferFrames;
|
||||
_currentInputBufferFrames = InputBufferFrames;
|
||||
_bufferedAction = _mantling.Active ? BufferedActions.MantleJump : BufferedActions.Jump;
|
||||
_isJumpInputPressed = true;
|
||||
|
||||
PerformJump();
|
||||
}
|
||||
|
||||
@@ -801,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();
|
||||
@@ -811,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;
|
||||
}
|
||||
|
||||
@@ -830,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;
|
||||
@@ -1000,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()
|
||||
@@ -1124,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)
|
||||
@@ -1411,7 +1465,7 @@ public partial class PlayerController : CharacterBody3D
|
||||
///////////////////////////
|
||||
public override void _PhysicsProcess(double delta)
|
||||
{
|
||||
if (_currentJumpBufferFrames > 0) _currentJumpBufferFrames -= 1;
|
||||
if (_currentInputBufferFrames > 0) _currentInputBufferFrames -= 1;
|
||||
|
||||
LookAround(delta);
|
||||
CameraModifications((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