74 lines
2.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|