/// <summary> /// Apply ground update /// </summary> /// <param name="groundCollision"></param> private void GroundUpdate(GroundCollision groundCollision) { if (!groundedLastFrame) { SwitchToGround(); } var collider = groundCollision.collider; if (collider.attachedRigidbody != null) { collider.attachedRigidbody.AddForceAtPosition(localUp * rigidbody.mass * stats.gravity, groundCollision.contactPoint, ForceMode.Force); } //Apply acceleration, and get the vlocity (Vector3 localVelocity, float yVelocity) = ApplyAcceleration(true); //snap to ground transform.position = groundCollision.contactPoint + localUp * groundCollisionStats.GetHoverDistance(); //Modify local velocity to follow the ground localVelocity = groundCollision.ModifyVelocity(localVelocity, localUp); velocity = localVelocity; }
private void OnGroundCollisionHandler(GroundCollision collision) { if (collision) { PlatformCollider coll = collision.collider.GetComponent <PlatformCollider>(); platform = coll?.platform; } }
/// <summary> /// Get the ground collision /// </summary> /// <returns></returns> public GroundCollision GetGround() { if (groundIgnoreFrames > 0) { groundIgnoreFrames--; return(new GroundCollision(false, Vector3.zero, Vector3.zero, null)); } return(GroundCollision.GetCollision(groundCollisionStats, transform.position, coordinateSpaceToWorldSpace.MultiplyVector(Vector3.down), true)); }
/// <summary> /// Apply air update /// </summary> /// <param name="groundCollision"></param> private void AirUpdate(GroundCollision groundCollision) { //Apply acceleration and get velocity (Vector3 localVelocity, float yVelocity) = ApplyAcceleration(false); //apply gravity yVelocity += stats.gravity * Time.deltaTime; //combine velocity and local velocity localVelocity += localUp * yVelocity; //set velocity velocity = localVelocity; }