mirror of
https://github.com/celisej567/UnitySourceMovement.git
synced 2026-02-25 14:33:01 +03:00
@@ -43,10 +43,12 @@ namespace Fragsurf.Movement {
|
|||||||
|
|
||||||
public bool slidingEnabled = false;
|
public bool slidingEnabled = false;
|
||||||
public bool laddersEnabled = false;
|
public bool laddersEnabled = false;
|
||||||
|
public bool angledLaddersEnabled = false;
|
||||||
|
|
||||||
public bool climbingLadder = false;
|
public bool climbingLadder = false;
|
||||||
public Vector3 ladderNormal = Vector3.zero;
|
public Vector3 ladderNormal = Vector3.zero;
|
||||||
public Vector3 ladderDirection = Vector3.forward;
|
public Vector3 ladderDirection = Vector3.forward;
|
||||||
|
public Vector3 ladderClimbDir = Vector3.up;
|
||||||
public Vector3 ladderVelocity = Vector3.zero;
|
public Vector3 ladderVelocity = Vector3.zero;
|
||||||
|
|
||||||
public bool underwater = false;
|
public bool underwater = false;
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ namespace Fragsurf.Movement {
|
|||||||
public bool crouchingEnabled = true;
|
public bool crouchingEnabled = true;
|
||||||
public bool slidingEnabled = false;
|
public bool slidingEnabled = false;
|
||||||
public bool laddersEnabled = true;
|
public bool laddersEnabled = true;
|
||||||
|
public bool supportAngledLadders = true;
|
||||||
|
|
||||||
[Header ("Step offset (can be buggy, enable at your own risk)")]
|
[Header ("Step offset (can be buggy, enable at your own risk)")]
|
||||||
public bool useStepOffset = false;
|
public bool useStepOffset = false;
|
||||||
@@ -196,6 +197,7 @@ namespace Fragsurf.Movement {
|
|||||||
|
|
||||||
_moveData.slidingEnabled = slidingEnabled;
|
_moveData.slidingEnabled = slidingEnabled;
|
||||||
_moveData.laddersEnabled = laddersEnabled;
|
_moveData.laddersEnabled = laddersEnabled;
|
||||||
|
_moveData.angledLaddersEnabled = supportAngledLadders;
|
||||||
|
|
||||||
_moveData.playerTransform = transform;
|
_moveData.playerTransform = transform;
|
||||||
_moveData.viewTransform = viewTransform;
|
_moveData.viewTransform = viewTransform;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using Fragsurf.TraceUtil;
|
using Fragsurf.TraceUtil;
|
||||||
|
|
||||||
namespace Fragsurf.Movement {
|
namespace Fragsurf.Movement {
|
||||||
@@ -47,7 +47,7 @@ namespace Fragsurf.Movement {
|
|||||||
if (_surfer.moveData.laddersEnabled && !_surfer.moveData.climbingLadder) {
|
if (_surfer.moveData.laddersEnabled && !_surfer.moveData.climbingLadder) {
|
||||||
|
|
||||||
// Look for ladders
|
// 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 * Mathf.Clamp (Time.deltaTime * 2f, 0.025f, 0.25f));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -299,9 +299,7 @@ namespace Fragsurf.Movement {
|
|||||||
|
|
||||||
if (_surfer.moveData.velocity.sqrMagnitude <= 0f)
|
if (_surfer.moveData.velocity.sqrMagnitude <= 0f)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Debug.Log ("Checking for ladders");
|
|
||||||
|
|
||||||
bool foundLadder = false;
|
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);
|
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,44 @@ namespace Fragsurf.Movement {
|
|||||||
Ladder ladder = hit.transform.GetComponentInParent<Ladder> ();
|
Ladder ladder = hit.transform.GetComponentInParent<Ladder> ();
|
||||||
if (ladder != null) {
|
if (ladder != null) {
|
||||||
|
|
||||||
foundLadder = true;
|
bool allowClimb = true;
|
||||||
if (_surfer.moveData.climbingLadder == false) {
|
float ladderAngle = Vector3.Angle (Vector3.up, hit.normal);
|
||||||
|
if (_surfer.moveData.angledLaddersEnabled) {
|
||||||
|
|
||||||
_surfer.moveData.climbingLadder = true;
|
if (hit.normal.y < 0f)
|
||||||
_surfer.moveData.ladderNormal = hit.normal;
|
allowClimb = false;
|
||||||
_surfer.moveData.ladderDirection = direction;
|
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 = -hit.normal * direction.magnitude * 2f;
|
||||||
|
|
||||||
|
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,20 +357,22 @@ namespace Fragsurf.Movement {
|
|||||||
_surfer.moveData.ladderNormal = Vector3.zero;
|
_surfer.moveData.ladderNormal = Vector3.zero;
|
||||||
_surfer.moveData.ladderVelocity = Vector3.zero;
|
_surfer.moveData.ladderVelocity = Vector3.zero;
|
||||||
_surfer.moveData.climbingLadder = false;
|
_surfer.moveData.climbingLadder = false;
|
||||||
|
_surfer.moveData.ladderClimbDir = Vector3.up;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LadderPhysics () {
|
private void LadderPhysics () {
|
||||||
|
|
||||||
|
_surfer.moveData.ladderVelocity = _surfer.moveData.ladderClimbDir * _surfer.moveData.verticalAxis * 6f;
|
||||||
|
|
||||||
_surfer.moveData.ladderVelocity = Vector3.up * _surfer.moveData.verticalAxis * 6f;
|
|
||||||
_surfer.moveData.velocity = Vector3.Lerp (_surfer.moveData.velocity, _surfer.moveData.ladderVelocity, Time.deltaTime * 10f);
|
_surfer.moveData.velocity = Vector3.Lerp (_surfer.moveData.velocity, _surfer.moveData.ladderVelocity, Time.deltaTime * 10f);
|
||||||
|
|
||||||
LadderCheck (Vector3.one, _surfer.moveData.ladderDirection);
|
LadderCheck (Vector3.one, _surfer.moveData.ladderDirection);
|
||||||
|
|
||||||
Trace floorTrace = TraceToFloor ();
|
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.velocity = _surfer.moveData.ladderNormal * 0.5f;
|
||||||
_surfer.moveData.ladderVelocity = Vector3.zero;
|
_surfer.moveData.ladderVelocity = Vector3.zero;
|
||||||
|
|||||||
Reference in New Issue
Block a user