/// <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;
        }
Example #2
0
 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;
        }