Bezi回来了
This commit is contained in:
@@ -17,10 +17,15 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
|
||||
public delegate void ShakeDelegate(
|
||||
FeedbackContext feedbackContext,
|
||||
bool modifyExposure,
|
||||
FloatCurveChannel exposureCurve,
|
||||
bool modifyContrast,
|
||||
FloatCurveChannel contrastCurve,
|
||||
bool modifySaturation,
|
||||
FloatCurveChannel saturationCurve,
|
||||
bool modifyHue,
|
||||
FloatCurveChannel hueCurve,
|
||||
bool modifyColorFilter,
|
||||
ColorCurveChannel colorFilterCurve,
|
||||
bool stop
|
||||
);
|
||||
@@ -30,14 +35,32 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
|
||||
public static void Trigger(
|
||||
FeedbackContext feedbackContext,
|
||||
bool modifyExposure = false,
|
||||
FloatCurveChannel exposureCurve = default,
|
||||
bool modifyContrast = false,
|
||||
FloatCurveChannel contrastCurve = default,
|
||||
bool modifySaturation = false,
|
||||
FloatCurveChannel saturationCurve = default,
|
||||
bool modifyHue = false,
|
||||
FloatCurveChannel hueCurve = default,
|
||||
bool modifyColorFilter = false,
|
||||
ColorCurveChannel colorFilterCurve = default,
|
||||
bool stop = false)
|
||||
{
|
||||
OnEvent?.Invoke(feedbackContext, exposureCurve, contrastCurve, saturationCurve, hueCurve, colorFilterCurve, stop);
|
||||
OnEvent?.Invoke(
|
||||
feedbackContext,
|
||||
modifyExposure,
|
||||
exposureCurve,
|
||||
modifyContrast,
|
||||
contrastCurve,
|
||||
modifySaturation,
|
||||
saturationCurve,
|
||||
modifyHue,
|
||||
hueCurve,
|
||||
modifyColorFilter,
|
||||
colorFilterCurve,
|
||||
stop
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,26 +69,45 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
/// </summary>
|
||||
public class AnimeACESShakeInstance : ShakeInstanceBase
|
||||
{
|
||||
public readonly FloatCurveChannel ExposureCurve;
|
||||
public readonly FloatCurveChannel ContrastCurve;
|
||||
public readonly FloatCurveChannel SaturationCurve;
|
||||
public readonly FloatCurveChannel HueCurve;
|
||||
public readonly ColorCurveChannel ColorFilterCurve;
|
||||
public readonly bool modifyExposure;
|
||||
public readonly FloatCurveChannel exposureCurve;
|
||||
|
||||
public readonly bool modifyContrast;
|
||||
public readonly FloatCurveChannel contrastCurve;
|
||||
|
||||
public readonly bool modifySaturation;
|
||||
public readonly FloatCurveChannel saturationCurve;
|
||||
|
||||
public readonly bool modifyHue;
|
||||
public readonly FloatCurveChannel hueCurve;
|
||||
|
||||
public readonly bool modifyColorFilter;
|
||||
public readonly ColorCurveChannel colorFilterCurve;
|
||||
|
||||
public AnimeACESShakeInstance(
|
||||
FeedbackContext feedbackContext,
|
||||
bool modifyExposure,
|
||||
FloatCurveChannel exposureCurve,
|
||||
bool modifyContrast,
|
||||
FloatCurveChannel contrastCurve,
|
||||
bool modifySaturation,
|
||||
FloatCurveChannel saturationCurve,
|
||||
bool modifyHue,
|
||||
FloatCurveChannel hueCurve,
|
||||
bool modifyColorFilter,
|
||||
ColorCurveChannel colorFilterCurve)
|
||||
: base(feedbackContext.timeSettings, feedbackContext.player.TimeProvider, feedbackContext.duration)
|
||||
{
|
||||
ExposureCurve = exposureCurve;
|
||||
ContrastCurve = contrastCurve;
|
||||
SaturationCurve = saturationCurve;
|
||||
HueCurve = hueCurve;
|
||||
ColorFilterCurve = colorFilterCurve;
|
||||
this.modifyExposure = modifyExposure;
|
||||
this.modifyContrast = modifyContrast;
|
||||
this.modifySaturation = modifySaturation;
|
||||
this.modifyHue = modifyHue;
|
||||
this.modifyColorFilter = modifyColorFilter;
|
||||
this.exposureCurve = exposureCurve;
|
||||
this.contrastCurve = contrastCurve;
|
||||
this.saturationCurve = saturationCurve;
|
||||
this.hueCurve = hueCurve;
|
||||
this.colorFilterCurve = colorFilterCurve;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,38 +157,39 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
for (int i = _activeShakes.Count - 1; i >= 0; i--)
|
||||
{
|
||||
AnimeACESShakeInstance shake = _activeShakes[i];
|
||||
shake.timer += shake.timeProvider.GetDeltaTime(shake.timeSettings);
|
||||
shake.Tick();
|
||||
|
||||
float normalizedTime = shake.timer / shake.duration;
|
||||
|
||||
// Exposure
|
||||
if (shake.ExposureCurve.active)
|
||||
if (shake.modifyExposure)
|
||||
{
|
||||
additiveExposure += shake.ExposureCurve.Evaluate(normalizedTime);
|
||||
additiveExposure += shake.exposureCurve.Evaluate(normalizedTime);
|
||||
Debug.Log($"Exposure shake: {additiveExposure}");
|
||||
}
|
||||
|
||||
// Contrast
|
||||
if (shake.ContrastCurve.active)
|
||||
if (shake.modifyContrast)
|
||||
{
|
||||
additiveContrast += shake.ContrastCurve.Evaluate(normalizedTime);
|
||||
additiveContrast += shake.contrastCurve.Evaluate(normalizedTime);
|
||||
}
|
||||
|
||||
// Saturation
|
||||
if (shake.SaturationCurve.active)
|
||||
if (shake.modifySaturation)
|
||||
{
|
||||
additiveSaturation += shake.SaturationCurve.Evaluate(normalizedTime);
|
||||
additiveSaturation += shake.saturationCurve.Evaluate(normalizedTime);
|
||||
}
|
||||
|
||||
// Hue
|
||||
if (shake.HueCurve.active)
|
||||
if (shake.modifyHue)
|
||||
{
|
||||
additiveHue += shake.HueCurve.Evaluate(normalizedTime);
|
||||
additiveHue += shake.hueCurve.Evaluate(normalizedTime);
|
||||
}
|
||||
|
||||
// Color Filter
|
||||
if (shake.ColorFilterCurve.active)
|
||||
if (shake.modifyColorFilter)
|
||||
{
|
||||
colorFilterAccum = shake.ColorFilterCurve.Evaluate(normalizedTime);
|
||||
colorFilterAccum = shake.colorFilterCurve.Evaluate(normalizedTime);
|
||||
hasColorFilter = true;
|
||||
}
|
||||
|
||||
@@ -171,10 +214,15 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
|
||||
private void OnShakeEvent(
|
||||
FeedbackContext feedbackContext,
|
||||
bool modifyExposure,
|
||||
FloatCurveChannel exposureCurve,
|
||||
bool modifyContrast,
|
||||
FloatCurveChannel contrastCurve,
|
||||
bool modifySaturation,
|
||||
FloatCurveChannel saturationCurve,
|
||||
bool modifyHue,
|
||||
FloatCurveChannel hueCurve,
|
||||
bool modifyColorFilter,
|
||||
ColorCurveChannel colorFilterCurve,
|
||||
bool stop)
|
||||
{
|
||||
@@ -184,12 +232,11 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
|
||||
var instance = new AnimeACESShakeInstance(
|
||||
feedbackContext,
|
||||
exposureCurve,
|
||||
contrastCurve,
|
||||
saturationCurve,
|
||||
hueCurve,
|
||||
colorFilterCurve
|
||||
);
|
||||
modifyExposure, exposureCurve,
|
||||
modifyContrast, contrastCurve,
|
||||
modifySaturation, saturationCurve,
|
||||
modifyHue, hueCurve,
|
||||
modifyColorFilter, colorFilterCurve);
|
||||
_activeShakes.Add(instance);
|
||||
}
|
||||
|
||||
|
||||
@@ -118,21 +118,18 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
|
||||
float normalizedTime = shake.timer / shake.duration;
|
||||
|
||||
if (shake.intensityCurve.active)
|
||||
float curveValue = shake.intensityCurve.Evaluate(normalizedTime);
|
||||
if (shake.intensityCurve.relativeToInitial)
|
||||
{
|
||||
float curveValue = shake.intensityCurve.Evaluate(normalizedTime);
|
||||
if (shake.intensityCurve.relativeToInitial)
|
||||
{
|
||||
additiveIntensity += curveValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
absoluteIntensity = curveValue;
|
||||
hasAbsolute = true;
|
||||
}
|
||||
additiveIntensity += curveValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
absoluteIntensity = curveValue;
|
||||
hasAbsolute = true;
|
||||
}
|
||||
|
||||
if (shake.modifyJitter && shake.jitterCurve.active)
|
||||
if (shake.modifyJitter)
|
||||
{
|
||||
additiveJitter += shake.jitterCurve.Evaluate(normalizedTime);
|
||||
}
|
||||
|
||||
@@ -56,13 +56,13 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
public class CameraFovShaker : MonoBehaviour
|
||||
{
|
||||
private CinemachineCamera _camera;
|
||||
private float _initialFov;
|
||||
public float initialFov;
|
||||
private readonly List<CameraFovShakeInstance> _activeShakes = new List<CameraFovShakeInstance>();
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_camera = GetComponent<CinemachineCamera>();
|
||||
_initialFov = _camera.Lens.FieldOfView;
|
||||
initialFov = _camera.Lens.FieldOfView;
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
@@ -82,7 +82,7 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
|
||||
if (_activeShakes.Count == 0)
|
||||
{
|
||||
SetFov(_initialFov);
|
||||
SetFov(initialFov);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
}
|
||||
}
|
||||
|
||||
float finalFov = hasAbsolute ? absoluteFov : _initialFov + additiveFov;
|
||||
float finalFov = hasAbsolute ? absoluteFov : initialFov + additiveFov;
|
||||
SetFov(finalFov);
|
||||
}
|
||||
|
||||
@@ -144,7 +144,7 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
_activeShakes.Clear();
|
||||
if (_camera != null)
|
||||
{
|
||||
SetFov(_initialFov);
|
||||
SetFov(initialFov);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,7 +109,6 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
}
|
||||
|
||||
Vector3 totalOffset = Vector3.zero;
|
||||
|
||||
for (int i = _activeShakes.Count - 1; i >= 0; i--)
|
||||
{
|
||||
CameraRotationShakeInstance shake = _activeShakes[i];
|
||||
@@ -121,7 +120,6 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
_activeShakes.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
|
||||
_rotationOffset.rotationOffset = _initialRotation + totalOffset;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,173 @@
|
||||
using System.Collections.Generic;
|
||||
using SLSUtilities.Feedback;
|
||||
using SLSUtilities.Rendering.PostProcessing;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Cielonos.MainGame.Effects.Feedback
|
||||
{
|
||||
/// <summary>
|
||||
/// RGB分离故障震动事件。
|
||||
/// </summary>
|
||||
public struct RGBSplitGlitchShakeEvent
|
||||
{
|
||||
private static event ShakeDelegate OnEvent;
|
||||
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
|
||||
private static void RuntimeInitialization() { OnEvent = null; }
|
||||
|
||||
public delegate void ShakeDelegate(
|
||||
FeedbackContext feedbackContext,
|
||||
FloatCurveChannel intensityCurve,
|
||||
FloatCurveChannel speedCurve,
|
||||
bool stop
|
||||
);
|
||||
|
||||
public static void Register(ShakeDelegate callback) { OnEvent += callback; }
|
||||
public static void Unregister(ShakeDelegate callback) { OnEvent -= callback; }
|
||||
|
||||
public static void Trigger(
|
||||
FeedbackContext feedbackContext,
|
||||
FloatCurveChannel intensityCurve,
|
||||
FloatCurveChannel speedCurve = default,
|
||||
bool stop = false)
|
||||
{
|
||||
OnEvent?.Invoke(feedbackContext, intensityCurve, speedCurve, stop);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// RGB分离故障震动实例。
|
||||
/// </summary>
|
||||
public class RGBSplitGlitchShakeInstance : ShakeInstanceBase
|
||||
{
|
||||
public readonly FloatCurveChannel intensityCurve;
|
||||
public readonly FloatCurveChannel speedCurve;
|
||||
|
||||
public RGBSplitGlitchShakeInstance(
|
||||
FeedbackContext feedbackContext,
|
||||
FloatCurveChannel intensityCurve,
|
||||
FloatCurveChannel speedCurve)
|
||||
: base(feedbackContext.timeSettings, feedbackContext.player.TimeProvider, feedbackContext.duration)
|
||||
{
|
||||
this.intensityCurve = intensityCurve;
|
||||
this.speedCurve = speedCurve;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// RGBSplitGlitch 的震动聚合器。
|
||||
/// </summary>
|
||||
[AddComponentMenu("SLS Utilities/Feedback Shakers/RGB Split Glitch Shaker")]
|
||||
public class RGBSplitGlitchShaker : MonoBehaviour
|
||||
{
|
||||
private RGBSplitGlitch _component;
|
||||
private float _initialIntensity;
|
||||
private float _initialSpeed;
|
||||
private bool _resolved;
|
||||
|
||||
private readonly List<RGBSplitGlitchShakeInstance> _activeShakes = new List<RGBSplitGlitchShakeInstance>();
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_resolved = TryResolve();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
RGBSplitGlitchShakeEvent.Register(OnShakeEvent);
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
RGBSplitGlitchShakeEvent.Unregister(OnShakeEvent);
|
||||
StopAll();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (!_resolved || _activeShakes.Count == 0) return;
|
||||
|
||||
float additiveIntensity = 0f;
|
||||
float absoluteIntensity = 0f;
|
||||
bool hasAbsolute = false;
|
||||
float additiveSpeed = 0f;
|
||||
|
||||
for (int i = _activeShakes.Count - 1; i >= 0; i--)
|
||||
{
|
||||
RGBSplitGlitchShakeInstance shake = _activeShakes[i];
|
||||
shake.timer += shake.timeProvider.GetDeltaTime(shake.timeSettings);
|
||||
|
||||
float normalizedTime = shake.timer / shake.duration;
|
||||
|
||||
float intensityValue = shake.intensityCurve.Evaluate(normalizedTime);
|
||||
if (shake.intensityCurve.relativeToInitial)
|
||||
{
|
||||
additiveIntensity += intensityValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
absoluteIntensity = intensityValue;
|
||||
hasAbsolute = true;
|
||||
}
|
||||
|
||||
additiveSpeed += shake.speedCurve.Evaluate(normalizedTime);
|
||||
|
||||
if (shake.IsFinished)
|
||||
{
|
||||
_activeShakes.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
|
||||
float finalIntensity = hasAbsolute ? absoluteIntensity : _initialIntensity + additiveIntensity;
|
||||
_component.intensity.value = finalIntensity;
|
||||
_component.speed.value = _initialSpeed + additiveSpeed;
|
||||
|
||||
if (_activeShakes.Count == 0)
|
||||
{
|
||||
Restore();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnShakeEvent(
|
||||
FeedbackContext feedbackContext,
|
||||
FloatCurveChannel intensityCurve,
|
||||
FloatCurveChannel speedCurve,
|
||||
bool stop)
|
||||
{
|
||||
if (stop) { StopAll(); return; }
|
||||
if (!_resolved) _resolved = TryResolve();
|
||||
if (!_resolved) return;
|
||||
|
||||
var instance = new RGBSplitGlitchShakeInstance(
|
||||
feedbackContext,
|
||||
intensityCurve,
|
||||
speedCurve
|
||||
);
|
||||
_activeShakes.Add(instance);
|
||||
}
|
||||
|
||||
private bool TryResolve()
|
||||
{
|
||||
if (_component != null) return true;
|
||||
if (PostProcessingManager.Instance == null) return false;
|
||||
if (!PostProcessingManager.Instance.GetVolumeComponent(out _component)) return false;
|
||||
|
||||
_initialIntensity = _component.intensity.value;
|
||||
_initialSpeed = _component.speed.value;
|
||||
return true;
|
||||
}
|
||||
|
||||
private void Restore()
|
||||
{
|
||||
if (!_resolved) return;
|
||||
_component.intensity.value = _initialIntensity;
|
||||
_component.speed.value = _initialSpeed;
|
||||
}
|
||||
|
||||
private void StopAll()
|
||||
{
|
||||
_activeShakes.Clear();
|
||||
Restore();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e720e1219abdd234b8c87ce75d5815cb
|
||||
@@ -19,13 +19,18 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
FeedbackContext feedbackContext,
|
||||
FloatCurveChannel intensityCurve,
|
||||
bool modifyCenter,
|
||||
Vector2CurveChannel centerCurve,
|
||||
Vector2 center,
|
||||
bool modifyColors,
|
||||
ColorCurveChannel colorOuter,
|
||||
ColorCurveChannel colorInner,
|
||||
Color outColor,
|
||||
Color innerColor,
|
||||
bool modifyShape,
|
||||
FloatCurveChannel smoothnessCurve,
|
||||
FloatCurveChannel roundnessCurve,
|
||||
float smoothness,
|
||||
float roundness,
|
||||
bool stop
|
||||
);
|
||||
|
||||
@@ -36,18 +41,23 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
FeedbackContext feedbackContext,
|
||||
FloatCurveChannel intensityCurve,
|
||||
bool modifyCenter = false,
|
||||
Vector2CurveChannel centerCurve = default,
|
||||
Vector2 center = default,
|
||||
bool modifyColors = false,
|
||||
ColorCurveChannel colorOuter = default,
|
||||
ColorCurveChannel colorInner = default,
|
||||
Color outColor = default,
|
||||
Color innerColor = default,
|
||||
bool modifyShape = false,
|
||||
FloatCurveChannel smoothnessCurve = default,
|
||||
FloatCurveChannel roundnessCurve = default,
|
||||
float smoothness = 0f,
|
||||
float roundness = 0f,
|
||||
bool stop = false)
|
||||
{
|
||||
OnEvent?.Invoke(feedbackContext, intensityCurve, modifyCenter, center,
|
||||
modifyColors, colorOuter, colorInner, modifyShape,
|
||||
smoothnessCurve, roundnessCurve, stop);
|
||||
OnEvent?.Invoke(feedbackContext, intensityCurve, modifyCenter, centerCurve, center,
|
||||
modifyColors, colorOuter, colorInner, outColor, innerColor, modifyShape,
|
||||
smoothnessCurve, roundnessCurve, smoothness, roundness, stop);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,36 +68,51 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
{
|
||||
public readonly FloatCurveChannel intensityCurve;
|
||||
public readonly bool modifyCenter;
|
||||
public readonly Vector2CurveChannel centerCurve;
|
||||
public readonly Vector2 center;
|
||||
public readonly bool modifyColors;
|
||||
public readonly ColorCurveChannel colorOuter;
|
||||
public readonly ColorCurveChannel colorInner;
|
||||
public readonly Color outColor;
|
||||
public readonly Color innerColor;
|
||||
public readonly bool modifyShape;
|
||||
public readonly FloatCurveChannel smoothnessCurve;
|
||||
public readonly FloatCurveChannel roundnessCurve;
|
||||
public readonly float smoothness;
|
||||
public readonly float roundness;
|
||||
|
||||
public VignetteShakeInstance(
|
||||
FeedbackContext feedbackContext,
|
||||
FloatCurveChannel intensityCurve,
|
||||
bool modifyCenter,
|
||||
Vector2CurveChannel centerCurve,
|
||||
Vector2 center,
|
||||
bool modifyColors,
|
||||
ColorCurveChannel colorOuter,
|
||||
ColorCurveChannel colorInner,
|
||||
Color outColor,
|
||||
Color innerColor,
|
||||
bool modifyShape,
|
||||
FloatCurveChannel smoothnessCurve,
|
||||
FloatCurveChannel roundnessCurve)
|
||||
FloatCurveChannel roundnessCurve,
|
||||
float smoothness,
|
||||
float roundness)
|
||||
: base(feedbackContext.timeSettings, feedbackContext.player.TimeProvider, feedbackContext.duration)
|
||||
{
|
||||
this.intensityCurve = intensityCurve;
|
||||
this.modifyCenter = modifyCenter;
|
||||
this.centerCurve = centerCurve;
|
||||
this.center = center;
|
||||
this.modifyColors = modifyColors;
|
||||
this.colorOuter = colorOuter;
|
||||
this.colorInner = colorInner;
|
||||
this.outColor = outColor;
|
||||
this.innerColor = innerColor;
|
||||
this.modifyShape = modifyShape;
|
||||
this.smoothnessCurve = smoothnessCurve;
|
||||
this.roundnessCurve = roundnessCurve;
|
||||
this.smoothness = smoothness;
|
||||
this.roundness = roundness;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,37 +173,44 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
|
||||
float normalizedTime = shake.timer / shake.duration;
|
||||
|
||||
if (shake.intensityCurve.active)
|
||||
float curveValue = shake.intensityCurve.Evaluate(normalizedTime);
|
||||
if (shake.intensityCurve.relativeToInitial)
|
||||
{
|
||||
float curveValue = shake.intensityCurve.Evaluate(normalizedTime);
|
||||
if (shake.intensityCurve.relativeToInitial)
|
||||
{
|
||||
additiveIntensity += curveValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
absoluteIntensity = curveValue;
|
||||
hasAbsolute = true;
|
||||
}
|
||||
additiveIntensity += curveValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
absoluteIntensity = curveValue;
|
||||
hasAbsolute = true;
|
||||
}
|
||||
|
||||
if (shake.modifyCenter)
|
||||
{
|
||||
latestCenter = shake.center;
|
||||
latestCenter = shake.modifyCenter
|
||||
? shake.centerCurve.Evaluate(normalizedTime, _initialCenter)
|
||||
: shake.center;
|
||||
hasCenter = true;
|
||||
}
|
||||
|
||||
if (shake.modifyColors)
|
||||
{
|
||||
latestColorOuter = shake.colorOuter.Evaluate(normalizedTime);
|
||||
latestColorInner = shake.colorInner.Evaluate(normalizedTime);
|
||||
latestColorOuter = shake.modifyColors
|
||||
? shake.colorOuter.Evaluate(normalizedTime)
|
||||
: shake.outColor;
|
||||
latestColorInner = shake.modifyColors
|
||||
? shake.colorInner.Evaluate(normalizedTime)
|
||||
: shake.innerColor;
|
||||
hasColors = true;
|
||||
}
|
||||
|
||||
if (shake.modifyShape)
|
||||
{
|
||||
latestSmoothness = shake.smoothnessCurve.Evaluate(normalizedTime);
|
||||
latestRoundness = shake.roundnessCurve.Evaluate(normalizedTime);
|
||||
latestSmoothness = shake.modifyShape
|
||||
? shake.smoothnessCurve.Evaluate(normalizedTime)
|
||||
: shake.smoothness;
|
||||
latestRoundness = shake.modifyShape
|
||||
? shake.roundnessCurve.Evaluate(normalizedTime)
|
||||
: shake.roundness;
|
||||
hasShape = true;
|
||||
}
|
||||
|
||||
@@ -213,13 +245,18 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
FeedbackContext feedbackContext,
|
||||
FloatCurveChannel intensityCurve,
|
||||
bool modifyCenter,
|
||||
Vector2CurveChannel centerCurve,
|
||||
Vector2 center,
|
||||
bool modifyColors,
|
||||
ColorCurveChannel colorOuter,
|
||||
ColorCurveChannel colorInner,
|
||||
Color outColor,
|
||||
Color innerColor,
|
||||
bool modifyShape,
|
||||
FloatCurveChannel smoothnessCurve,
|
||||
FloatCurveChannel roundnessCurve,
|
||||
float smoothness,
|
||||
float roundness,
|
||||
bool stop)
|
||||
{
|
||||
if (stop) { StopAll(); return; }
|
||||
@@ -227,9 +264,21 @@ namespace Cielonos.MainGame.Effects.Feedback
|
||||
if (!_resolved) return;
|
||||
|
||||
var instance = new VignetteShakeInstance(
|
||||
feedbackContext, intensityCurve, modifyCenter, center,
|
||||
modifyColors, colorOuter, colorInner, modifyShape,
|
||||
smoothnessCurve, roundnessCurve
|
||||
feedbackContext,
|
||||
intensityCurve,
|
||||
modifyCenter,
|
||||
centerCurve,
|
||||
center,
|
||||
modifyColors,
|
||||
colorOuter,
|
||||
colorInner,
|
||||
outColor,
|
||||
innerColor,
|
||||
modifyShape,
|
||||
smoothnessCurve,
|
||||
roundnessCurve,
|
||||
smoothness,
|
||||
roundness
|
||||
);
|
||||
_activeShakes.Add(instance);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user