72 lines
2.6 KiB
C#
72 lines
2.6 KiB
C#
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<CameraRotationShakeAction>("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<PhotonPolarizer>()) // 如果有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);
|
||
}
|
||
}
|
||
}
|