106 lines
4.7 KiB
C#
106 lines
4.7 KiB
C#
using MoreMountains.FeedbacksForThirdParty;
|
|
using SLSUtilities.General;
|
|
using UnityEngine;
|
|
|
|
namespace Cielonos.MainGame.Characters
|
|
{
|
|
public partial class PlayerAnimationSubcontroller
|
|
{
|
|
public void SetupDash(Vector3 direction, bool isInputDirection, float length)
|
|
{
|
|
if (player.movementSc.canDash && player.movementSc.canDodge && fullBodyFuncAnimSm.Play("Dash"))
|
|
{
|
|
length = length < 0 ? player.attributeSm["DashLength"] : length;
|
|
Debug.Log($"Dash length: {length}");
|
|
float dashMultiplier = length / fullBodyFuncAnimSm.collection["Dash"].variableCollection.GetVariable<float>("RootMoveZ");
|
|
player.landMovementSc.dashMoveMultiplier = dashMultiplier;
|
|
Vector3 cameraForward = player.viewSc.playerCamera.transform.forward.Flatten();
|
|
Vector3 dashCameraRotation;
|
|
if (isInputDirection)
|
|
{
|
|
player.landMovementSc.TurnToInputDirection(direction);
|
|
Vector3 playerForward = player.transform.forward.Flatten();
|
|
dashCameraRotation = CalculateDashAngles(playerForward, cameraForward);
|
|
}
|
|
else
|
|
{
|
|
player.landMovementSc.TurnToDirection(direction, 0f);
|
|
dashCameraRotation = CalculateDashAngles(direction, cameraForward);
|
|
}
|
|
player.feedbackSc["Dash"].feedback.GetFeedbackOfType<MMF_CinemachineRotation>().RotationAmplitude = dashCameraRotation;
|
|
player.feedbackSc["Dash"].feedback.GetFeedbackOfType<MMF_RadialBlur>().TargetCenter = player.GetNormalizedScreenPosition();
|
|
}
|
|
}
|
|
|
|
private void DashStart()
|
|
{
|
|
player.landMovementSc.isDashing = true;
|
|
player.audioSc.PlayDashSound();
|
|
player.feedbackSc["Dash"]?.Play();
|
|
//player.renderSc.dashTrails.ForEach(ds => ds.active = true);
|
|
//player.renderSc.dashTrails.ForEach(ds => ds.Restart());
|
|
|
|
DodgeSource defaultDodge = DodgeSource.Default(player);
|
|
player.reactionSc.dodgeSm.ApplyDodge(defaultDodge);
|
|
|
|
player.eventSm.onDashStart.Invoke();
|
|
player.eventSm.onDodgeStart.Invoke();
|
|
}
|
|
|
|
private void DashEnd()
|
|
{
|
|
player.landMovementSc.isDashing = false;
|
|
player.landMovementSc.dashMoveMultiplier = 1;
|
|
player.landMovementSc.isSprinting = true;
|
|
//player.renderSc.dashTrails.ForEach(ds => ds.active = false);
|
|
|
|
player.reactionSc.dodgeSm.RemoveDodge("DefaultDodge");
|
|
|
|
player.eventSm.onDashEnd.Invoke();
|
|
player.eventSm.onDodgeEnd.Invoke();
|
|
}
|
|
}
|
|
|
|
public partial class PlayerAnimationSubcontroller
|
|
{
|
|
public void SetupDodge(float length)
|
|
{
|
|
if (player.movementSc.canDodge && fullBodyFuncAnimSm.Play("Dodge"))
|
|
{
|
|
length = length < 0 ? player.attributeSm["DodgeLength"] : length;
|
|
float dashMultiplier = length / fullBodyFuncAnimSm.collection["Dodge"].variableCollection.GetVariable<float>("RootMoveZ");
|
|
player.landMovementSc.dashMoveMultiplier = dashMultiplier;
|
|
Vector3 playerBackward = -player.transform.forward.Flatten();
|
|
Vector3 cameraForward = player.viewSc.playerCamera.transform.forward.Flatten();
|
|
Vector3 dodgeCameraRotation = CalculateDashAngles(playerBackward, cameraForward);
|
|
player.feedbackSc["Dodge"].feedback.GetFeedbackOfType<MMF_CinemachineRotation>().RotationAmplitude = dodgeCameraRotation;
|
|
player.feedbackSc["Dodge"].feedback.GetFeedbackOfType<MMF_RadialBlur>().TargetCenter = player.GetNormalizedScreenPosition();
|
|
}
|
|
}
|
|
|
|
private void DodgeStart()
|
|
{
|
|
player.landMovementSc.isDashing = true;
|
|
player.audioSc.PlayDashSound();
|
|
player.feedbackSc["Dodge"]?.Play();
|
|
//player.renderSc.dashTrails.ForEach(ds => ds.active = true);
|
|
//player.renderSc.dashTrails.ForEach(ds => ds.Restart());
|
|
|
|
DodgeSource defaultDodge = DodgeSource.Default(player);
|
|
player.reactionSc.dodgeSm.ApplyDodge(defaultDodge);
|
|
|
|
player.eventSm.onDodgeStart.Invoke();
|
|
}
|
|
|
|
private void DodgeEnd()
|
|
{
|
|
player.landMovementSc.isDashing = false;
|
|
player.landMovementSc.dashMoveMultiplier = 1;
|
|
//player.renderSc.dashTrails.ForEach(ds => ds.active = false);
|
|
|
|
player.reactionSc.dodgeSm.RemoveDodge("DefaultDodge");
|
|
|
|
player.eventSm.onDodgeEnd.Invoke();
|
|
}
|
|
}
|
|
} |