BITFALL/Assets/AmplifyAnimationPack/Scripts/Character/CharacterStates/FallingState.cs

75 lines
1.8 KiB
C#

// Amplify Animation Pack - Third-Person Character Controller
// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
using UnityEngine;
namespace AmplifyAnimationPack
{
public class FallingState : CharacterStateBase
{
public override void EnterState()
{
charRef.rigid.useGravity = true;
charRef.rigid.interpolation = RigidbodyInterpolation.Interpolate;
charRef.baseColl.enabled = true;
charRef.baseColl.radius = 0.1f;
charRef.hitbox.SetActive( false );
charRef.ChangeCollider( CharacterColliderTypes.baseCol );
charRef.ChangeMovementMode( CharacterMovementModes.physicsBased );
charRef.ChangeMovementType( CharacterMovementTypes.falling );
if( prevState != null )
{
if( prevState is GroundedState )
{
charRef.isJumpingForward = ( charRef.animBeh.anim.velocity.magnitude > 0f && Mathf.Abs( charRef.animBeh.anim.velocity.y ) < 0.5f );
if( charRef.isJumpingForward )
{
charRef.rigid.AddForce( charRef.transf.forward * ( charRef.currLocomotionType == CharacterLocomotionTypes.walking ? 3f : 7f ) , ForceMode.Impulse );
}
}
}
}
public override void ExitState()
{
charRef.baseColl.radius = 0.5f;
}
public override void UpdateState()
{
if( Physics.Raycast( charRef.transf.position , -Vector3.up , 0.9f ) )
{
if( charRef.currAttackAction == CharacterCombatActions.none )
{
charRef.ChangeState<GroundedState>();
}
else
{
charRef.animBeh.anim.SetBool( "canLand" , true );
}
}
}
public override void UpdateStatePhysics()
{
charRef.rigid.velocity += Vector3.up * Physics.gravity.y * charRef.fallMultiplier * Time.deltaTime;
}
public override void InputAttack( bool _actionVal , CharacterCombatActions _newAttack )
{
if( _actionVal )
{
charRef.ChangeAttackAction( _newAttack );
charRef.rigid.velocity *= 5f;
}
}
}
}