using Cielonos.MainGame.Characters; using Cielonos.MainGame.Effects.Feedback; using SLSUtilities.Feedback; using UnityEngine; namespace Cielonos.MainGame.Inventory.Collections { public partial class Polychrome { public BlockData equipBlockData; private string _nextBlockAnimName = "BlockL"; private void PlayBlockReaction(string feedbackName, float amplitudeScale) { string blockAnimName = _nextBlockAnimName; _nextBlockAnimName = _nextBlockAnimName == "BlockL" ? "BlockR" : "BlockL"; animationSc.fullBodyFuncAnimSm.Play(blockAnimName, 1, 0); Vector3 baseAmplitude = blockAnimName == "BlockL" ? new Vector3(0f, -1.5f, 0.75f) : new Vector3(0f, 1.5f, -0.75f); FeedbackData feedbackData = feedbackSc.GetFeedbackData(feedbackName); RuntimeFeedback rt = feedbackData.CreateRuntimeFeedback(); CameraRotationShakeAction rotationShakeAction = rt.Action("Camera"); rotationShakeAction.amplitude = baseAmplitude * amplitudeScale; feedbackSc.PlayFeedback(rt); } private void SetBlock(BlockData blockData, bool hasReaction = true) { blockData ??= this.blockData; BlockSource blockSource = blockData.CreateBlockSource(player, this); blockSource.disableAutoPlayFeedback = hasReaction; player.landMovementSc.canDash = false; player.landMovementSc.canDodge = false; if (hasReaction) { blockSource.onNormalBlock = (attackArea) => { PlayBlockReaction("NormalBlock", 1f); }; blockSource.onPerfectBlock = (attackArea) => { PlayBlockReaction("PerfectBlock", 2f); if (_hasPhotonPolarizer) ApplyPhotonPolarizerPerfectBlock(attackArea); }; } player.reactionSc.blockSm.ApplyBlock(blockSource); } private void StayBlocking() { if (player.inputSc.IsHoldingSpecialB) { player.movementSc.canMove.Modify(true); player.movementSc.canRotate.Modify(true); OnSpecialCPress(); } } private void RemoveBlock(BlockData blockData = null) { blockData ??= this.blockData; player.landMovementSc.canDash = true; player.landMovementSc.canDodge = true; player.reactionSc.blockSm.RemoveBlock(blockData.blockName); } } }