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

86 lines
2.1 KiB
C#

// Amplify Animation Pack - Third-Person Character Controller
// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
using UnityEngine;
namespace AmplifyAnimationPack
{
public class LadderState : CharacterStateBase
{
public override void EnterState()
{
charRef.rigid.useGravity = false;
charRef.ChangeCollider( CharacterColliderTypes.baseCol );
charRef.baseColl.enabled = false;
charRef.animBeh.anim.SetFloat( "Speed" , 0f );
charRef.animBeh.anim.SetBool( "canLand" , false );
charRef.animBeh.anim.SetBool( "Ladder_IsSliding" , false );
charRef.ChangeMovementType( CharacterMovementTypes.ladder );
charRef.canMove = true;
}
public override void ExitState()
{
charRef.animBeh.anim.SetFloat( "InputFwd" , 0f );
charRef.animBeh.anim.SetFloat( "Speed" , 0f );
charRef.animBeh.anim.SetBool( "canLand" , false );
}
public override void UpdateState()
{
if( !charRef.canMove )
{
charRef.rigid.velocity = -charRef.transf.up * 3f;
charRef.animBeh.anim.SetBool( "canLand" , Physics.Raycast( new Ray( charRef.transf.position , -charRef.transf.up ) , 0.9f ) );
if( charRef.animBeh.anim.GetBool( "canLand" ) )
{
charRef.rigid.velocity = Vector3.zero;
}
}
}
public override void InputMoveForward( float _axisVal )
{
if( !charRef.canMove )
{
return;
}
charRef.animBeh.anim.SetFloat( "InputFwd" , _axisVal );
charRef.animBeh.anim.SetFloat( "Speed" , _axisVal );
if( _axisVal > 0f )
{
charRef.animBeh.anim.SetBool( "canLand" , !Physics.Raycast( new Ray( charRef.hangPosHelper.position - charRef.transf.up * 0.3f , charRef.transf.forward ) , 0.5f ) );
}
else if( _axisVal < 0f )
{
charRef.animBeh.anim.SetBool( "canLand" , Physics.Raycast( new Ray( charRef.transf.position , -charRef.transf.up ) , 1f ) );
}
}
public override void InputJump( bool _actionVal )
{
if( _actionVal )
{
if( charRef.animBeh.anim.GetFloat( "Speed" ) > 0f )
{
return;
}
charRef.animBeh.anim.SetBool( "Ladder_IsSliding" , true );
charRef.canMove = false;
}
}
}
}