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("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().RotationAmplitude = dashCameraRotation; player.feedbackSc["Dash"].feedback.GetFeedbackOfType().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("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().RotationAmplitude = dodgeCameraRotation; player.feedbackSc["Dodge"].feedback.GetFeedbackOfType().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(); } } }