using Cielonos.MainGame.Characters; using Cielonos.MainGame.Effects.Feedback; using UnityEngine; namespace Cielonos.MainGame.Inventory.Collections { public partial class Polychrome { public BlockData equipBlockData; private string _blockAnimName = "BlockL"; private void PlayBlockReaction(string feedbackName, float amplitudeScale) { _blockAnimName = _blockAnimName == "BlockL" ? "BlockR" : "BlockL"; animationSc.fullBodyFuncAnimSm.Play(_blockAnimName, 1, 0); var rotationShakeAction = feedbackSc.GetFeedbackData(feedbackName).Action("Camera"); Vector3 baseAmplitude = _blockAnimName == "BlockL" ? new Vector3(0f, -2f, 1f) : new Vector3(0f, 2f, -1f); rotationShakeAction.amplitude = baseAmplitude * amplitudeScale; feedbackSc.PlayFeedback(feedbackName); } private void SetBlock(BlockData blockData = null, bool hasReaction = true) { blockData ??= this.blockData; BlockSource blockSource = blockData.CreateBlockSource(player, this); player.landMovementSc.canDash = false; player.landMovementSc.canDodge = false; if (hasReaction) { blockSource.onNormalBlock = (attackArea) => { PlayBlockReaction("NormalBlock", 1f); }; blockSource.onPerfectBlock = (attackArea) => { PlayBlockReaction("PerfectBlock", 2f); if (attackArea is NormalArea) { if (HasExtender()) // 如果有Photon Polarizer,完美格挡会弹开并打断敌人 { attackArea.creator.GetHit(Breakthrough.Type.Forced, out _); attackArea.creator.movementSc.impulseSm.ApplyKnockback(player.transform.forward, 6f); } } }; } player.reactionSc.blockSm.ApplyBlock(blockSource); } private void StayBlocking() { if (player.inputSc.IsHoldingSpecialB) { player.movementSc.canMove.Modify(true); player.movementSc.canRotate.Modify(true); OnSpecialBPress(); } } private void RemoveBlock(BlockData blockData = null) { blockData ??= this.blockData; player.landMovementSc.canDash = true; player.landMovementSc.canDodge = true; player.reactionSc.blockSm.RemoveBlock(blockData.blockName); } } }