BITFALL/Assets/Artists/Scripts/Player/PlayerAnimationController/PlayerMotionBasedAnimationS...

129 lines
3.0 KiB
C#
Raw Normal View History

2023-08-27 02:58:19 +08:00
using System;
using System.Collections;
using System.Collections.Generic;
2024-02-21 01:40:53 +08:00
using Animancer;
2023-08-27 02:58:19 +08:00
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)
{
2023-10-20 19:31:12 +08:00
if (newState is IPlayerClimbState or IPlayerLinkState { LinkArea: 4 })
2023-08-27 02:58:19 +08:00
{
animationController.TransitionState<Climb>();
}
else if(Enabled)
{
2023-11-30 00:23:23 +08:00
Exit();
2023-08-27 02:58:19 +08:00
}
}
}
2024-02-21 01:40:53 +08:00
[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();
}
}
}
2023-08-27 02:58:19 +08:00
}