Files
Cielonos/Assets/Scripts/MainGame/Items/MainWeapons/Polychrome/Polychrome_Block.cs
SoulliesOfficial 39b43680a9 爆更
2026-07-18 03:16:20 -04:00

74 lines
2.6 KiB
C#

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<CameraRotationShakeAction>("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);
}
}
}