From 5451daf37c245359374b9a6fbf1ec1b51faec0e0 Mon Sep 17 00:00:00 2001 From: Olezen Date: Sun, 10 Nov 2019 13:07:11 +0100 Subject: [PATCH 1/5] Update SurfController.cs --- Modified fragsurf/Movement/SurfController.cs | 59 ++++++++++++++++---- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/Modified fragsurf/Movement/SurfController.cs b/Modified fragsurf/Movement/SurfController.cs index f988d39..e582fa2 100644 --- a/Modified fragsurf/Movement/SurfController.cs +++ b/Modified fragsurf/Movement/SurfController.cs @@ -47,7 +47,7 @@ namespace Fragsurf.Movement { if (_surfer.moveData.laddersEnabled && !_surfer.moveData.climbingLadder) { // Look for ladders - LadderCheck (new Vector3(1f, 0.5f, 1f), _surfer.moveData.velocity * Time.deltaTime * 2f); + LadderCheck (new Vector3(1f, 0.95f, 1f), _surfer.moveData.velocity * Time.deltaTime * 2f); } @@ -299,9 +299,7 @@ namespace Fragsurf.Movement { if (_surfer.moveData.velocity.sqrMagnitude <= 0f) return; - - Debug.Log ("Checking for ladders"); - + bool foundLadder = false; RaycastHit [] hits = Physics.BoxCastAll (_surfer.moveData.origin, Vector3.Scale (_surfer.collider.bounds.size * 0.5f, colliderScale), Vector3.Scale (direction, new Vector3 (1f, 0f, 1f)), Quaternion.identity, direction.magnitude, SurfPhysics.groundLayerMask, QueryTriggerInteraction.Collide); @@ -310,13 +308,43 @@ namespace Fragsurf.Movement { Ladder ladder = hit.transform.GetComponentInParent (); if (ladder != null) { - foundLadder = true; - if (_surfer.moveData.climbingLadder == false) { + bool allowClimb = true; + float ladderAngle = Vector3.Angle (Vector3.up, hit.normal); + if (_surfer.moveData.angledLaddersEnabled) { - _surfer.moveData.climbingLadder = true; - _surfer.moveData.ladderNormal = hit.normal; - _surfer.moveData.ladderDirection = direction; + if (hit.normal.y < 0f) + allowClimb = false; + else { + + if (ladderAngle <= _surfer.moveData.slopeLimit) + allowClimb = false; + } + + } else if (hit.normal.y != 0f) + allowClimb = false; + + if (allowClimb) { + foundLadder = true; + if (_surfer.moveData.climbingLadder == false) { + + _surfer.moveData.climbingLadder = true; + _surfer.moveData.ladderNormal = hit.normal; + _surfer.moveData.ladderDirection = direction; + + if (_surfer.moveData.angledLaddersEnabled) { + + Vector3 sideDir = hit.normal; + sideDir.y = 0f; + sideDir = Quaternion.AngleAxis (-90f, Vector3.up) * sideDir; + + _surfer.moveData.ladderClimbDir = Quaternion.AngleAxis (90f, sideDir) * hit.normal; + _surfer.moveData.ladderClimbDir *= 1f/ _surfer.moveData.ladderClimbDir.y; // Make sure Y is always 1 + + } else + _surfer.moveData.ladderClimbDir = Vector3.up; + + } } } @@ -328,6 +356,7 @@ namespace Fragsurf.Movement { _surfer.moveData.ladderNormal = Vector3.zero; _surfer.moveData.ladderVelocity = Vector3.zero; _surfer.moveData.climbingLadder = false; + _surfer.moveData.ladderClimbDir = Vector3.up; } @@ -335,7 +364,7 @@ namespace Fragsurf.Movement { private void LadderPhysics () { - _surfer.moveData.ladderVelocity = Vector3.up * _surfer.moveData.verticalAxis * 6f; + _surfer.moveData.ladderVelocity = _surfer.moveData.ladderClimbDir * _surfer.moveData.verticalAxis * 6f; _surfer.moveData.velocity = Vector3.Lerp (_surfer.moveData.velocity, _surfer.moveData.ladderVelocity, Time.deltaTime * 10f); LadderCheck (Vector3.one, _surfer.moveData.ladderDirection); @@ -357,6 +386,16 @@ namespace Fragsurf.Movement { } + } + + if (_surfer.moveData.wishJump) { + + _surfer.moveData.velocity = _surfer.moveData.ladderNormal * 4f; + _surfer.moveData.ladderVelocity = Vector3.zero; + _surfer.moveData.climbingLadder = false; + + } + } private void Accelerate (Vector3 wishDir, float wishSpeed, float acceleration, bool yMovement) { From 2dadade1ea4b7bba649677716d3c95de10564d51 Mon Sep 17 00:00:00 2001 From: Olezen Date: Sun, 10 Nov 2019 13:08:05 +0100 Subject: [PATCH 2/5] Update MoveData.cs --- Modified fragsurf/Movement/MoveData.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Modified fragsurf/Movement/MoveData.cs b/Modified fragsurf/Movement/MoveData.cs index 0fcab47..091d586 100644 --- a/Modified fragsurf/Movement/MoveData.cs +++ b/Modified fragsurf/Movement/MoveData.cs @@ -43,10 +43,12 @@ namespace Fragsurf.Movement { public bool slidingEnabled = false; public bool laddersEnabled = false; + public bool angledLaddersEnabled = false; public bool climbingLadder = false; public Vector3 ladderNormal = Vector3.zero; public Vector3 ladderDirection = Vector3.forward; + public Vector3 ladderClimbDir = Vector3.up; public Vector3 ladderVelocity = Vector3.zero; public bool underwater = false; From c068f3c9b37ec7f03859ec0c77fb810bf32b17a6 Mon Sep 17 00:00:00 2001 From: Olezen Date: Sun, 10 Nov 2019 13:08:44 +0100 Subject: [PATCH 3/5] Update SurfCharacter.cs --- Modified fragsurf/Movement/SurfCharacter.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Modified fragsurf/Movement/SurfCharacter.cs b/Modified fragsurf/Movement/SurfCharacter.cs index cfd7cab..0a8c00a 100644 --- a/Modified fragsurf/Movement/SurfCharacter.cs +++ b/Modified fragsurf/Movement/SurfCharacter.cs @@ -39,6 +39,7 @@ namespace Fragsurf.Movement { public bool crouchingEnabled = true; public bool slidingEnabled = false; public bool laddersEnabled = true; + public bool supportAngledLadders = true; [Header ("Step offset (can be buggy, enable at your own risk)")] public bool useStepOffset = false; @@ -196,6 +197,7 @@ namespace Fragsurf.Movement { _moveData.slidingEnabled = slidingEnabled; _moveData.laddersEnabled = laddersEnabled; + _moveData.angledLaddersEnabled = supportAngledLadders; _moveData.playerTransform = transform; _moveData.viewTransform = viewTransform; From cb19da31344b8a69163d14f3bd8edf1b701b9d55 Mon Sep 17 00:00:00 2001 From: Olezen Date: Sun, 10 Nov 2019 13:12:15 +0100 Subject: [PATCH 4/5] Update SurfController.cs --- Modified fragsurf/Movement/SurfController.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Modified fragsurf/Movement/SurfController.cs b/Modified fragsurf/Movement/SurfController.cs index e582fa2..5063d6b 100644 --- a/Modified fragsurf/Movement/SurfController.cs +++ b/Modified fragsurf/Movement/SurfController.cs @@ -386,16 +386,6 @@ namespace Fragsurf.Movement { } - } - - if (_surfer.moveData.wishJump) { - - _surfer.moveData.velocity = _surfer.moveData.ladderNormal * 4f; - _surfer.moveData.ladderVelocity = Vector3.zero; - _surfer.moveData.climbingLadder = false; - - } - } private void Accelerate (Vector3 wishDir, float wishSpeed, float acceleration, bool yMovement) { From 1c13790034581acfe556aa54970f88d115dc8e0d Mon Sep 17 00:00:00 2001 From: Olezen Date: Sun, 10 Nov 2019 13:25:00 +0100 Subject: [PATCH 5/5] Update SurfController.cs --- Modified fragsurf/Movement/SurfController.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Modified fragsurf/Movement/SurfController.cs b/Modified fragsurf/Movement/SurfController.cs index 5063d6b..54709e2 100644 --- a/Modified fragsurf/Movement/SurfController.cs +++ b/Modified fragsurf/Movement/SurfController.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; using Fragsurf.TraceUtil; namespace Fragsurf.Movement { @@ -47,7 +47,7 @@ namespace Fragsurf.Movement { if (_surfer.moveData.laddersEnabled && !_surfer.moveData.climbingLadder) { // Look for ladders - LadderCheck (new Vector3(1f, 0.95f, 1f), _surfer.moveData.velocity * Time.deltaTime * 2f); + LadderCheck (new Vector3(1f, 0.95f, 1f), _surfer.moveData.velocity * Mathf.Clamp (Time.deltaTime * 2f, 0.025f, 0.25f)); } @@ -330,7 +330,7 @@ namespace Fragsurf.Movement { _surfer.moveData.climbingLadder = true; _surfer.moveData.ladderNormal = hit.normal; - _surfer.moveData.ladderDirection = direction; + _surfer.moveData.ladderDirection = -hit.normal * direction.magnitude * 2f; if (_surfer.moveData.angledLaddersEnabled) { @@ -345,6 +345,7 @@ namespace Fragsurf.Movement { _surfer.moveData.ladderClimbDir = Vector3.up; } + } } @@ -363,14 +364,15 @@ namespace Fragsurf.Movement { } private void LadderPhysics () { - + _surfer.moveData.ladderVelocity = _surfer.moveData.ladderClimbDir * _surfer.moveData.verticalAxis * 6f; + _surfer.moveData.velocity = Vector3.Lerp (_surfer.moveData.velocity, _surfer.moveData.ladderVelocity, Time.deltaTime * 10f); LadderCheck (Vector3.one, _surfer.moveData.ladderDirection); Trace floorTrace = TraceToFloor (); - if (_surfer.moveData.verticalAxis < 0f && floorTrace.hitCollider != null) { + if (_surfer.moveData.verticalAxis < 0f && floorTrace.hitCollider != null && Vector3.Angle (Vector3.up, floorTrace.planeNormal) <= _surfer.moveData.slopeLimit) { _surfer.moveData.velocity = _surfer.moveData.ladderNormal * 0.5f; _surfer.moveData.ladderVelocity = Vector3.zero;