129 lines
3.0 KiB
C#
129 lines
3.0 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Animancer;
|
|
using BITFALL.Player.Movement;
|
|
using BITKit.Entities;
|
|
using BITKit.StateMachine;
|
|
using UnityEngine;
|
|
|
|
namespace BITFALL.Player.Animation.States
|
|
{
|
|
[Serializable]
|
|
public class Climb : PlayerAnimateStates
|
|
{
|
|
public override void OnStateEntry(IState old)
|
|
{
|
|
animationController.animator.Play("Climb");
|
|
}
|
|
public override void OnMovementStateChanged(IEntityMovementState oldState, IEntityMovementState newState)
|
|
{
|
|
if (newState is IPlayerClimbState or IPlayerLinkState { LinkArea: 4 })
|
|
{
|
|
animationController.TransitionState<Climb>();
|
|
}
|
|
else if(Enabled)
|
|
{
|
|
Exit();
|
|
}
|
|
}
|
|
}
|
|
[Serializable]
|
|
public class Vault : PlayerAnimateStates
|
|
{
|
|
[SerializeField] private AnimationClip vaultClip;
|
|
private AnimancerState state;
|
|
private IPlayerVaultState _vaultState;
|
|
public override void OnStateEntry(IState old)
|
|
{
|
|
base.OnStateEntry(old);
|
|
animationController.animancerComponent.Stop();
|
|
state = animationController.animancerComponent.Play(vaultClip);
|
|
}
|
|
|
|
public override void OnStateExit(IState old, IState newState)
|
|
{
|
|
state?.Stop();
|
|
base.OnStateExit(old, newState);
|
|
state = null;
|
|
}
|
|
|
|
public override void OnStateUpdate(float deltaTime)
|
|
{
|
|
base.OnStateUpdate(deltaTime);
|
|
if (_vaultState.Phase is 1)
|
|
_vaultState.NormalizedTime = state.NormalizedTime;
|
|
}
|
|
|
|
public override void OnMovementStateChanged(IEntityMovementState oldState, IEntityMovementState newState)
|
|
{
|
|
if (newState is IPlayerVaultState _state)
|
|
{
|
|
_vaultState = _state;
|
|
animationController.TransitionState<Vault>();
|
|
}
|
|
else if(Enabled)
|
|
{
|
|
Exit();
|
|
}
|
|
}
|
|
}
|
|
[Serializable]
|
|
public class EdgeClimb : PlayerAnimateStates
|
|
{
|
|
[SerializeField] private AnimationClip edgeClimbClip;
|
|
[SerializeField] private AnimationClip climbUpClip;
|
|
private int _phase;
|
|
private AnimancerState state;
|
|
public override void OnStateEntry(IState old)
|
|
{
|
|
base.OnStateEntry(old);
|
|
_phase = -1;
|
|
}
|
|
|
|
public override void OnStateExit(IState old, IState newState)
|
|
{
|
|
base.OnStateExit(old, newState);
|
|
state.Stop();
|
|
state = null;
|
|
}
|
|
|
|
public override void OnStateUpdate(float deltaTime)
|
|
{
|
|
if(animationController._movement.CurrentState is not IPlayerEdgeClimbState edgeClimbState) return;
|
|
|
|
if(_phase==edgeClimbState.Phase) return;
|
|
_phase = edgeClimbState.Phase;
|
|
switch (edgeClimbState.Phase)
|
|
{
|
|
case 1:
|
|
state?.Stop();
|
|
state = animationController.animancerComponent.Play(edgeClimbClip);
|
|
break;
|
|
case 2:
|
|
state?.Stop();
|
|
state = animationController.animancerComponent.Play(climbUpClip);
|
|
state.Events.OnEnd = () =>
|
|
{
|
|
state.Events.OnEnd = null;
|
|
edgeClimbState.ManualCancel();
|
|
return;
|
|
};
|
|
break;
|
|
}
|
|
}
|
|
|
|
public override void OnMovementStateChanged(IEntityMovementState oldState, IEntityMovementState newState)
|
|
{
|
|
if (newState is IPlayerEdgeClimbState)
|
|
{
|
|
animationController.TransitionState<EdgeClimb>();
|
|
}
|
|
else if(Enabled)
|
|
{
|
|
Exit();
|
|
}
|
|
}
|
|
}
|
|
}
|