chore: initial commit
This commit is contained in:
73
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMAutoFocus.cs
vendored
Normal file
73
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMAutoFocus.cs
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
#if MM_POSTPROCESSING
|
||||
using UnityEngine.Rendering.PostProcessing;
|
||||
#endif
|
||||
using MoreMountains.Feedbacks;
|
||||
|
||||
namespace MoreMountains.FeedbacksForThirdParty
|
||||
{
|
||||
/// <summary>
|
||||
/// This class will set the depth of field to focus on the set of targets specified in its inspector.
|
||||
/// </summary>
|
||||
[AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMAutoFocus")]
|
||||
#if MM_POSTPROCESSING
|
||||
[RequireComponent(typeof(PostProcessVolume))]
|
||||
#endif
|
||||
public class MMAutoFocus : MonoBehaviour
|
||||
{
|
||||
[Header("Bindings")]
|
||||
/// the position of the camera
|
||||
[Tooltip("the position of the camera")]
|
||||
public Transform CameraTransform;
|
||||
/// a list of all possible targets
|
||||
[Tooltip("a list of all possible targets")]
|
||||
public Transform[] FocusTargets;
|
||||
/// an offset to apply to the focus target
|
||||
[Tooltip("an offset to apply to the focus target")]
|
||||
public Vector3 Offset;
|
||||
|
||||
[Header("Setup")]
|
||||
/// the current target of this auto focus
|
||||
[Tooltip("the current target of this auto focus")]
|
||||
public float FocusTargetID;
|
||||
|
||||
[Header("Desired Aperture")]
|
||||
/// the aperture to work with
|
||||
[Tooltip("the aperture to work with")]
|
||||
[Range(0.1f, 20f)]
|
||||
public float Aperture = 0.1f;
|
||||
|
||||
|
||||
#if MM_POSTPROCESSING
|
||||
protected PostProcessVolume _volume;
|
||||
protected PostProcessProfile _profile;
|
||||
protected DepthOfField _depthOfField;
|
||||
|
||||
/// <summary>
|
||||
/// On start we grab our volume and profile
|
||||
/// </summary>
|
||||
void Start()
|
||||
{
|
||||
_volume = GetComponent<PostProcessVolume>();
|
||||
_profile = _volume.profile;
|
||||
_profile.TryGetSettings<DepthOfField>(out _depthOfField);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adapts DoF to target
|
||||
/// </summary>
|
||||
void Update()
|
||||
{
|
||||
int focusTargetID = Mathf.FloorToInt(FocusTargetID);
|
||||
if (focusTargetID < FocusTargets.Length)
|
||||
{
|
||||
float distance = Vector3.Distance(CameraTransform.position, FocusTargets[focusTargetID].position + Offset);
|
||||
_depthOfField.focusDistance.Override(distance);
|
||||
_depthOfField.aperture.Override(Aperture);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
11
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMAutoFocus.cs.meta
vendored
Normal file
11
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMAutoFocus.cs.meta
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6b05280df6098734a9d93da081ea29f1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
220
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMBloomShaker.cs
vendored
Normal file
220
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMBloomShaker.cs
vendored
Normal file
@@ -0,0 +1,220 @@
|
||||
using UnityEngine;
|
||||
#if MM_POSTPROCESSING
|
||||
using UnityEngine.Rendering.PostProcessing;
|
||||
#endif
|
||||
using MoreMountains.Feedbacks;
|
||||
using MoreMountains.Tools;
|
||||
|
||||
namespace MoreMountains.FeedbacksForThirdParty
|
||||
{
|
||||
/// <summary>
|
||||
/// Add this class to a Camera with a bloom post processing and it'll be able to "shake" its values by getting events
|
||||
/// </summary>
|
||||
[AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMBloomShaker")]
|
||||
#if MM_POSTPROCESSING
|
||||
[RequireComponent(typeof(PostProcessVolume))]
|
||||
#endif
|
||||
public class MMBloomShaker : MMShaker
|
||||
{
|
||||
/// whether or not to add to the initial value
|
||||
public bool RelativeValues = true;
|
||||
|
||||
[MMInspectorGroup("Bloom Intensity", true, 45)]
|
||||
/// the curve used to animate the intensity value on
|
||||
[Tooltip("the curve used to animate the intensity value on")]
|
||||
public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0));
|
||||
/// the value to remap the curve's 0 to
|
||||
[Tooltip("the value to remap the curve's 0 to")]
|
||||
public float RemapIntensityZero = 0f;
|
||||
/// the value to remap the curve's 1 to
|
||||
[Tooltip("the value to remap the curve's 1 to")]
|
||||
public float RemapIntensityOne = 10f;
|
||||
|
||||
[MMInspectorGroup("Bloom Threshold", true, 46)]
|
||||
/// the curve used to animate the threshold value on
|
||||
[Tooltip("the curve used to animate the threshold value on")]
|
||||
public AnimationCurve ShakeThreshold = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0));
|
||||
/// the value to remap the curve's 0 to
|
||||
[Tooltip("the value to remap the curve's 0 to")]
|
||||
public float RemapThresholdZero = 0f;
|
||||
/// the value to remap the curve's 1 to
|
||||
[Tooltip("the value to remap the curve's 1 to")]
|
||||
public float RemapThresholdOne = 0f;
|
||||
|
||||
#if MM_POSTPROCESSING
|
||||
protected PostProcessVolume _volume;
|
||||
protected Bloom _bloom;
|
||||
protected float _initialIntensity;
|
||||
protected float _initialThreshold;
|
||||
protected float _originalShakeDuration;
|
||||
protected bool _originalRelativeIntensity;
|
||||
protected AnimationCurve _originalShakeIntensity;
|
||||
protected float _originalRemapIntensityZero;
|
||||
protected float _originalRemapIntensityOne;
|
||||
protected AnimationCurve _originalShakeThreshold;
|
||||
protected float _originalRemapThresholdZero;
|
||||
protected float _originalRemapThresholdOne;
|
||||
|
||||
/// <summary>
|
||||
/// On init we initialize our values
|
||||
/// </summary>
|
||||
protected override void Initialization()
|
||||
{
|
||||
base.Initialization();
|
||||
_volume = this.gameObject.GetComponent<PostProcessVolume>();
|
||||
_volume.profile.TryGetSettings(out _bloom);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Shakes values over time
|
||||
/// </summary>
|
||||
protected override void Shake()
|
||||
{
|
||||
float newIntensity = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeValues, _initialIntensity);
|
||||
_bloom.intensity.Override(newIntensity);
|
||||
float newThreshold = ShakeFloat(ShakeThreshold, RemapThresholdZero, RemapThresholdOne, RelativeValues, _initialThreshold);
|
||||
_bloom.threshold.Override(newThreshold);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Collects initial values on the target
|
||||
/// </summary>
|
||||
protected override void GrabInitialValues()
|
||||
{
|
||||
_initialIntensity = _bloom.intensity;
|
||||
_initialThreshold = _bloom.threshold;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// When we get the appropriate event, we trigger a shake
|
||||
/// </summary>
|
||||
/// <param name="intensity"></param>
|
||||
/// <param name="duration"></param>
|
||||
/// <param name="amplitude"></param>
|
||||
/// <param name="relativeIntensity"></param>
|
||||
/// <param name="feedbacksIntensity"></param>
|
||||
/// <param name="channel"></param>
|
||||
public virtual void OnBloomShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax,
|
||||
AnimationCurve threshold, float remapThresholdMin, float remapThresholdMax, bool relativeIntensity = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false)
|
||||
{
|
||||
if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (stop)
|
||||
{
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
if (restore)
|
||||
{
|
||||
ResetTargetValues();
|
||||
return;
|
||||
}
|
||||
|
||||
_resetShakerValuesAfterShake = resetShakerValuesAfterShake;
|
||||
_resetTargetValuesAfterShake = resetTargetValuesAfterShake;
|
||||
|
||||
if (resetShakerValuesAfterShake)
|
||||
{
|
||||
_originalShakeDuration = ShakeDuration;
|
||||
_originalShakeIntensity = ShakeIntensity;
|
||||
_originalRemapIntensityZero = RemapIntensityZero;
|
||||
_originalRemapIntensityOne = RemapIntensityOne;
|
||||
_originalRelativeIntensity = RelativeValues;
|
||||
_originalShakeThreshold = ShakeThreshold;
|
||||
_originalRemapThresholdZero = RemapThresholdZero;
|
||||
_originalRemapThresholdOne = RemapThresholdOne;
|
||||
}
|
||||
|
||||
if (!OnlyUseShakerValues)
|
||||
{
|
||||
TimescaleMode = timescaleMode;
|
||||
ShakeDuration = duration;
|
||||
ShakeIntensity = intensity;
|
||||
RemapIntensityZero = remapMin * feedbacksIntensity;
|
||||
RemapIntensityOne = remapMax * feedbacksIntensity;
|
||||
RelativeValues = relativeIntensity;
|
||||
ShakeThreshold = threshold;
|
||||
RemapThresholdZero = remapThresholdMin;
|
||||
RemapThresholdOne = remapThresholdMax;
|
||||
ForwardDirection = forwardDirection;
|
||||
}
|
||||
|
||||
Play();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the target's values
|
||||
/// </summary>
|
||||
protected override void ResetTargetValues()
|
||||
{
|
||||
base.ResetTargetValues();
|
||||
_bloom.intensity.Override(_initialIntensity);
|
||||
_bloom.threshold.Override(_initialThreshold);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the shaker's values
|
||||
/// </summary>
|
||||
protected override void ResetShakerValues()
|
||||
{
|
||||
base.ResetShakerValues();
|
||||
ShakeDuration = _originalShakeDuration;
|
||||
ShakeIntensity = _originalShakeIntensity;
|
||||
RemapIntensityZero = _originalRemapIntensityZero;
|
||||
RemapIntensityOne = _originalRemapIntensityOne;
|
||||
RelativeValues = _originalRelativeIntensity;
|
||||
ShakeThreshold = _originalShakeThreshold;
|
||||
RemapThresholdZero = _originalRemapThresholdZero;
|
||||
RemapThresholdOne = _originalRemapThresholdOne;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Starts listening for events
|
||||
/// </summary>
|
||||
public override void StartListening()
|
||||
{
|
||||
base.StartListening();
|
||||
MMBloomShakeEvent.Register(OnBloomShakeEvent);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stops listening for events
|
||||
/// </summary>
|
||||
public override void StopListening()
|
||||
{
|
||||
base.StopListening();
|
||||
MMBloomShakeEvent.Unregister(OnBloomShakeEvent);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// An event used to trigger vignette shakes
|
||||
/// </summary>
|
||||
public struct MMBloomShakeEvent
|
||||
{
|
||||
static private event Delegate OnEvent;
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; }
|
||||
static public void Register(Delegate callback) { OnEvent += callback; }
|
||||
static public void Unregister(Delegate callback) { OnEvent -= callback; }
|
||||
|
||||
public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax,
|
||||
AnimationCurve threshold, float remapThresholdMin, float remapThresholdMax, bool relativeIntensity = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true,
|
||||
bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false);
|
||||
|
||||
static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax,
|
||||
AnimationCurve threshold, float remapThresholdMin, float remapThresholdMax, bool relativeIntensity = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true,
|
||||
bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false)
|
||||
{
|
||||
OnEvent?.Invoke(intensity, duration, remapMin, remapMax, threshold, remapThresholdMin, remapThresholdMax, relativeIntensity,
|
||||
feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore);
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMBloomShaker.cs.meta
vendored
Normal file
11
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMBloomShaker.cs.meta
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 04189ce672fd8c349b61eb900b1dc0ec
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,191 @@
|
||||
using UnityEngine;
|
||||
#if MM_POSTPROCESSING
|
||||
using UnityEngine.Rendering.PostProcessing;
|
||||
#endif
|
||||
using MoreMountains.Feedbacks;
|
||||
using MoreMountains.Tools;
|
||||
|
||||
namespace MoreMountains.FeedbacksForThirdParty
|
||||
{
|
||||
/// <summary>
|
||||
/// Add this class to a Camera with a chromatic aberration post processing and it'll be able to "shake" its values by getting events
|
||||
/// </summary>
|
||||
[AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMChromaticAberrationShaker")]
|
||||
#if MM_POSTPROCESSING
|
||||
[RequireComponent(typeof(PostProcessVolume))]
|
||||
#endif
|
||||
public class MMChromaticAberrationShaker : MMShaker
|
||||
{
|
||||
[MMInspectorGroup("Chromatic Aberration Intensity", true, 46)]
|
||||
/// whether or not to add to the initial value
|
||||
[Tooltip("whether or not to add to the initial value")]
|
||||
public bool RelativeIntensity = false;
|
||||
/// the curve used to animate the intensity value on
|
||||
[Tooltip("the curve used to animate the intensity value on")]
|
||||
public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0));
|
||||
/// the value to remap the curve's 0 to
|
||||
[Tooltip("the value to remap the curve's 0 to")]
|
||||
[Range(0f, 1f)]
|
||||
public float RemapIntensityZero = 0f;
|
||||
/// the value to remap the curve's 1 to
|
||||
[Tooltip("the value to remap the curve's 1 to")]
|
||||
[Range(0f, 1f)]
|
||||
public float RemapIntensityOne = 1f;
|
||||
|
||||
#if MM_POSTPROCESSING
|
||||
protected PostProcessVolume _volume;
|
||||
protected ChromaticAberration _chromaticAberration;
|
||||
protected float _initialIntensity;
|
||||
protected float _originalShakeDuration;
|
||||
protected AnimationCurve _originalShakeIntensity;
|
||||
protected float _originalRemapIntensityZero;
|
||||
protected float _originalRemapIntensityOne;
|
||||
protected bool _originalRelativeIntensity;
|
||||
|
||||
/// <summary>
|
||||
/// On init we initialize our values
|
||||
/// </summary>
|
||||
protected override void Initialization()
|
||||
{
|
||||
base.Initialization();
|
||||
_volume = this.gameObject.GetComponent<PostProcessVolume>();
|
||||
_volume.profile.TryGetSettings(out _chromaticAberration);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Shakes values over time
|
||||
/// </summary>
|
||||
protected override void Shake()
|
||||
{
|
||||
float newValue = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, _initialIntensity);
|
||||
_chromaticAberration.intensity.Override(newValue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Collects initial values on the target
|
||||
/// </summary>
|
||||
protected override void GrabInitialValues()
|
||||
{
|
||||
_initialIntensity = _chromaticAberration.intensity;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// When we get the appropriate event, we trigger a shake
|
||||
/// </summary>
|
||||
/// <param name="intensity"></param>
|
||||
/// <param name="duration"></param>
|
||||
/// <param name="amplitude"></param>
|
||||
/// <param name="relativeIntensity"></param>
|
||||
/// <param name="feedbacksIntensity"></param>
|
||||
/// <param name="channel"></param>
|
||||
public virtual void OnMMChromaticAberrationShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true,
|
||||
bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false)
|
||||
{
|
||||
if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (stop)
|
||||
{
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
if (restore)
|
||||
{
|
||||
ResetTargetValues();
|
||||
return;
|
||||
}
|
||||
|
||||
_resetShakerValuesAfterShake = resetShakerValuesAfterShake;
|
||||
_resetTargetValuesAfterShake = resetTargetValuesAfterShake;
|
||||
|
||||
if (resetShakerValuesAfterShake)
|
||||
{
|
||||
_originalShakeDuration = ShakeDuration;
|
||||
_originalShakeIntensity = ShakeIntensity;
|
||||
_originalRemapIntensityZero = RemapIntensityZero;
|
||||
_originalRemapIntensityOne = RemapIntensityOne;
|
||||
_originalRelativeIntensity = RelativeIntensity;
|
||||
}
|
||||
|
||||
if (!OnlyUseShakerValues)
|
||||
{
|
||||
TimescaleMode = timescaleMode;
|
||||
ShakeDuration = duration;
|
||||
ShakeIntensity = intensity;
|
||||
RemapIntensityZero = remapMin * feedbacksIntensity;
|
||||
RemapIntensityOne = remapMax * feedbacksIntensity;
|
||||
RelativeIntensity = relativeIntensity;
|
||||
ForwardDirection = forwardDirection;
|
||||
}
|
||||
|
||||
Play();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the target's values
|
||||
/// </summary>
|
||||
protected override void ResetTargetValues()
|
||||
{
|
||||
base.ResetTargetValues();
|
||||
_chromaticAberration.intensity.Override(_initialIntensity);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the shaker's values
|
||||
/// </summary>
|
||||
protected override void ResetShakerValues()
|
||||
{
|
||||
base.ResetShakerValues();
|
||||
ShakeDuration = _originalShakeDuration;
|
||||
ShakeIntensity = _originalShakeIntensity;
|
||||
RemapIntensityZero = _originalRemapIntensityZero;
|
||||
RemapIntensityOne = _originalRemapIntensityOne;
|
||||
RelativeIntensity = _originalRelativeIntensity;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Starts listening for events
|
||||
/// </summary>
|
||||
public override void StartListening()
|
||||
{
|
||||
base.StartListening();
|
||||
MMChromaticAberrationShakeEvent.Register(OnMMChromaticAberrationShakeEvent);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stops listening for events
|
||||
/// </summary>
|
||||
public override void StopListening()
|
||||
{
|
||||
base.StopListening();
|
||||
MMChromaticAberrationShakeEvent.Unregister(OnMMChromaticAberrationShakeEvent);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// An event used to trigger vignette shakes
|
||||
/// </summary>
|
||||
public struct MMChromaticAberrationShakeEvent
|
||||
{
|
||||
static private event Delegate OnEvent;
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; }
|
||||
static public void Register(Delegate callback) { OnEvent += callback; }
|
||||
static public void Unregister(Delegate callback) { OnEvent -= callback; }
|
||||
|
||||
public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true,
|
||||
bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false);
|
||||
|
||||
static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true,
|
||||
bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false)
|
||||
{
|
||||
OnEvent?.Invoke(intensity, duration, remapMin, remapMax, relativeIntensity, feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1297b688774526f418895a2f09176619
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
334
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMColorGradingShaker.cs
vendored
Normal file
334
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMColorGradingShaker.cs
vendored
Normal file
@@ -0,0 +1,334 @@
|
||||
using UnityEngine;
|
||||
#if MM_POSTPROCESSING
|
||||
using UnityEngine.Rendering.PostProcessing;
|
||||
#endif
|
||||
using MoreMountains.Feedbacks;
|
||||
using MoreMountains.Tools;
|
||||
|
||||
namespace MoreMountains.FeedbacksForThirdParty
|
||||
{
|
||||
/// <summary>
|
||||
/// Add this class to a Camera with a color grading post processing and it'll be able to "shake" its values by getting events
|
||||
/// </summary>
|
||||
[AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMColorGradingShaker")]
|
||||
#if MM_POSTPROCESSING
|
||||
[RequireComponent(typeof(PostProcessVolume))]
|
||||
#endif
|
||||
public class MMColorGradingShaker : MMShaker
|
||||
{
|
||||
/// whether or not to add to the initial value
|
||||
public bool RelativeValues = true;
|
||||
|
||||
[MMInspectorGroup("Post Exposure", true, 40)]
|
||||
/// the curve used to animate the focus distance value on
|
||||
[Tooltip("the curve used to animate the focus distance value on")]
|
||||
public AnimationCurve ShakePostExposure = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0));
|
||||
/// the value to remap the curve's 0 to
|
||||
[Tooltip("the value to remap the curve's 0 to")]
|
||||
public float RemapPostExposureZero = 0f;
|
||||
/// the value to remap the curve's 1 to
|
||||
[Tooltip("the value to remap the curve's 1 to")]
|
||||
public float RemapPostExposureOne = 1f;
|
||||
|
||||
[MMInspectorGroup("Hue Shift", true, 49)]
|
||||
/// the curve used to animate the aperture value on
|
||||
[Tooltip("the curve used to animate the aperture value on")]
|
||||
public AnimationCurve ShakeHueShift = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0));
|
||||
/// the value to remap the curve's 0 to
|
||||
[Tooltip("the value to remap the curve's 0 to")]
|
||||
[Range(-180f, 180f)]
|
||||
public float RemapHueShiftZero = 0f;
|
||||
/// the value to remap the curve's 1 to
|
||||
[Tooltip("the value to remap the curve's 1 to")]
|
||||
[Range(-180f, 180f)]
|
||||
public float RemapHueShiftOne = 180f;
|
||||
|
||||
[MMInspectorGroup("Saturation", true, 48)]
|
||||
/// the curve used to animate the focal length value on
|
||||
[Tooltip("the curve used to animate the focal length value on")]
|
||||
public AnimationCurve ShakeSaturation = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0));
|
||||
/// the value to remap the curve's 0 to
|
||||
[Tooltip("the value to remap the curve's 0 to")]
|
||||
[Range(-100f, 100f)]
|
||||
public float RemapSaturationZero = 0f;
|
||||
/// the value to remap the curve's 1 to
|
||||
[Tooltip("the value to remap the curve's 1 to")]
|
||||
[Range(-100f, 100f)]
|
||||
public float RemapSaturationOne = 100f;
|
||||
|
||||
[MMInspectorGroup("Contrast", true, 47)]
|
||||
/// the curve used to animate the focal length value on
|
||||
[Tooltip("the curve used to animate the focal length value on")]
|
||||
public AnimationCurve ShakeContrast = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0));
|
||||
/// the value to remap the curve's 0 to
|
||||
[Tooltip("the value to remap the curve's 0 to")]
|
||||
[Range(-100f, 100f)]
|
||||
public float RemapContrastZero = 0f;
|
||||
/// the value to remap the curve's 1 to
|
||||
[Tooltip("the value to remap the curve's 1 to")]
|
||||
[Range(-100f, 100f)]
|
||||
public float RemapContrastOne = 100f;
|
||||
|
||||
[MMFInspectorGroup("Color Filter", true, 50)]
|
||||
/// if this is true, the color filter will be animated over the gradient below
|
||||
[Tooltip("if this is true, the color filter will be animated over the gradient below")]
|
||||
public bool ShakeColorFilter = false;
|
||||
/// the gradient to use to animate the color filter over time
|
||||
[Tooltip("the gradient to use to animate the color filter over time")]
|
||||
[GradientUsage(true)]
|
||||
public Gradient ColorFilterGradient;
|
||||
|
||||
#if MM_POSTPROCESSING
|
||||
protected PostProcessVolume _volume;
|
||||
protected ColorGrading _colorGrading;
|
||||
protected float _initialPostExposure;
|
||||
protected float _initialHueShift;
|
||||
protected float _initialSaturation;
|
||||
protected float _initialContrast;
|
||||
protected Color _initialColorFilter;
|
||||
protected float _originalShakeDuration;
|
||||
protected bool _originalRelativeValues;
|
||||
protected AnimationCurve _originalShakePostExposure;
|
||||
protected float _originalRemapPostExposureZero;
|
||||
protected float _originalRemapPostExposureOne;
|
||||
protected AnimationCurve _originalShakeHueShift;
|
||||
protected float _originalRemapHueShiftZero;
|
||||
protected float _originalRemapHueShiftOne;
|
||||
protected AnimationCurve _originalShakeSaturation;
|
||||
protected float _originalRemapSaturationZero;
|
||||
protected float _originalRemapSaturationOne;
|
||||
protected AnimationCurve _originalShakeContrast;
|
||||
protected float _originalRemapContrastZero;
|
||||
protected float _originalRemapContrastOne;
|
||||
protected bool _originalShakeColorFilter;
|
||||
protected Gradient _originalColorFilter;
|
||||
protected Color _newColorFilter;
|
||||
|
||||
/// <summary>
|
||||
/// On init we initialize our values
|
||||
/// </summary>
|
||||
protected override void Initialization()
|
||||
{
|
||||
base.Initialization();
|
||||
_volume = this.gameObject.GetComponent<PostProcessVolume>();
|
||||
_volume.profile.TryGetSettings(out _colorGrading);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// When that shaker gets added, we initialize its shake duration
|
||||
/// </summary>
|
||||
protected virtual void Reset()
|
||||
{
|
||||
ShakeDuration = 0.8f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Shakes values over time
|
||||
/// </summary>
|
||||
protected override void Shake()
|
||||
{
|
||||
float newPostExposure = ShakeFloat(ShakePostExposure, RemapPostExposureZero, RemapPostExposureOne, RelativeValues, _initialPostExposure);
|
||||
_colorGrading.postExposure.Override(newPostExposure);
|
||||
float newHueShift = ShakeFloat(ShakeHueShift, RemapHueShiftZero, RemapHueShiftOne, RelativeValues, _initialHueShift);
|
||||
_colorGrading.hueShift.Override(newHueShift);
|
||||
float newSaturation = ShakeFloat(ShakeSaturation, RemapSaturationZero, RemapSaturationOne, RelativeValues, _initialSaturation);
|
||||
_colorGrading.saturation.Override(newSaturation);
|
||||
float newContrast = ShakeFloat(ShakeContrast, RemapContrastZero, RemapContrastOne, RelativeValues, _initialContrast);
|
||||
_colorGrading.contrast.Override(newContrast);
|
||||
|
||||
if (ShakeColorFilter)
|
||||
{
|
||||
_newColorFilter = ShakeGradient(ColorFilterGradient);
|
||||
_colorGrading.colorFilter.Override(_newColorFilter);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Collects initial values on the target
|
||||
/// </summary>
|
||||
protected override void GrabInitialValues()
|
||||
{
|
||||
_initialPostExposure = _colorGrading.postExposure;
|
||||
_initialHueShift = _colorGrading.hueShift;
|
||||
_initialSaturation = _colorGrading.saturation;
|
||||
_initialContrast = _colorGrading.contrast;
|
||||
_initialColorFilter = _colorGrading.colorFilter;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// When we get the appropriate event, we trigger a shake
|
||||
/// </summary>
|
||||
/// <param name="intensity"></param>
|
||||
/// <param name="duration"></param>
|
||||
/// <param name="amplitude"></param>
|
||||
/// <param name="relativeIntensity"></param>
|
||||
/// <param name="feedbacksIntensity"></param>
|
||||
/// <param name="channel"></param>
|
||||
public virtual void OnMMColorGradingShakeEvent(AnimationCurve shakePostExposure, float remapPostExposureZero, float remapPostExposureOne,
|
||||
AnimationCurve shakeHueShift, float remapHueShiftZero, float remapHueShiftOne,
|
||||
AnimationCurve shakeSaturation, float remapSaturationZero, float remapSaturationOne,
|
||||
AnimationCurve shakeContrast, float remapContrastZero, float remapContrastOne,
|
||||
bool shakeColorFilter, Gradient colorFilterGradient,
|
||||
float duration, bool relativeValues = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true,
|
||||
bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false)
|
||||
{
|
||||
if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (stop)
|
||||
{
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
if (restore)
|
||||
{
|
||||
ResetTargetValues();
|
||||
return;
|
||||
}
|
||||
|
||||
_resetShakerValuesAfterShake = resetShakerValuesAfterShake;
|
||||
_resetTargetValuesAfterShake = resetTargetValuesAfterShake;
|
||||
|
||||
if (resetShakerValuesAfterShake)
|
||||
{
|
||||
_originalShakeDuration = ShakeDuration;
|
||||
_originalRelativeValues = RelativeValues;
|
||||
_originalShakePostExposure = ShakePostExposure;
|
||||
_originalRemapPostExposureZero = RemapPostExposureZero;
|
||||
_originalRemapPostExposureOne = RemapPostExposureOne;
|
||||
_originalShakeHueShift = ShakeHueShift;
|
||||
_originalRemapHueShiftZero = RemapHueShiftZero;
|
||||
_originalRemapHueShiftOne = RemapHueShiftOne;
|
||||
_originalShakeSaturation = ShakeSaturation;
|
||||
_originalRemapSaturationZero = RemapSaturationZero;
|
||||
_originalRemapSaturationOne = RemapSaturationOne;
|
||||
_originalShakeContrast = ShakeContrast;
|
||||
_originalRemapContrastZero = RemapContrastZero;
|
||||
_originalRemapContrastOne = RemapContrastOne;
|
||||
_originalShakeColorFilter = ShakeColorFilter;
|
||||
_originalColorFilter = ColorFilterGradient;
|
||||
}
|
||||
|
||||
if (!OnlyUseShakerValues)
|
||||
{
|
||||
TimescaleMode = timescaleMode;
|
||||
ShakeDuration = duration;
|
||||
RelativeValues = relativeValues;
|
||||
ShakePostExposure = shakePostExposure;
|
||||
RemapPostExposureZero = remapPostExposureZero;
|
||||
RemapPostExposureOne = remapPostExposureOne;
|
||||
ShakeHueShift = shakeHueShift;
|
||||
RemapHueShiftZero = remapHueShiftZero;
|
||||
RemapHueShiftOne = remapHueShiftOne;
|
||||
ShakeSaturation = shakeSaturation;
|
||||
RemapSaturationZero = remapSaturationZero;
|
||||
RemapSaturationOne = remapSaturationOne;
|
||||
ShakeContrast = shakeContrast;
|
||||
RemapContrastZero = remapContrastZero;
|
||||
RemapContrastOne = remapContrastOne;
|
||||
ForwardDirection = forwardDirection;
|
||||
ShakeColorFilter = shakeColorFilter;
|
||||
ColorFilterGradient = colorFilterGradient;
|
||||
}
|
||||
|
||||
Play();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the target's values
|
||||
/// </summary>
|
||||
protected override void ResetTargetValues()
|
||||
{
|
||||
base.ResetTargetValues();
|
||||
_colorGrading.postExposure.Override(_initialPostExposure);
|
||||
_colorGrading.hueShift.Override(_initialHueShift);
|
||||
_colorGrading.saturation.Override(_initialSaturation);
|
||||
_colorGrading.contrast.Override(_initialContrast);
|
||||
_colorGrading.colorFilter.Override(_initialColorFilter);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the shaker's values
|
||||
/// </summary>
|
||||
protected override void ResetShakerValues()
|
||||
{
|
||||
base.ResetShakerValues();
|
||||
ShakeDuration = _originalShakeDuration;
|
||||
RelativeValues = _originalRelativeValues;
|
||||
ShakePostExposure = _originalShakePostExposure;
|
||||
RemapPostExposureZero = _originalRemapPostExposureZero;
|
||||
RemapPostExposureOne = _originalRemapPostExposureOne;
|
||||
ShakeHueShift = _originalShakeHueShift;
|
||||
RemapHueShiftZero = _originalRemapHueShiftZero;
|
||||
RemapHueShiftOne = _originalRemapHueShiftOne;
|
||||
ShakeSaturation = _originalShakeSaturation;
|
||||
RemapSaturationZero = _originalRemapSaturationZero;
|
||||
RemapSaturationOne = _originalRemapSaturationOne;
|
||||
ShakeContrast = _originalShakeContrast;
|
||||
RemapContrastZero = _originalRemapContrastZero;
|
||||
RemapContrastOne = _originalRemapContrastOne;
|
||||
ShakeColorFilter = _originalShakeColorFilter;
|
||||
ColorFilterGradient = _originalColorFilter;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Starts listening for events
|
||||
/// </summary>
|
||||
public override void StartListening()
|
||||
{
|
||||
base.StartListening();
|
||||
MMColorGradingShakeEvent.Register(OnMMColorGradingShakeEvent);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stops listening for events
|
||||
/// </summary>
|
||||
public override void StopListening()
|
||||
{
|
||||
base.StopListening();
|
||||
MMColorGradingShakeEvent.Unregister(OnMMColorGradingShakeEvent);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// An event used to trigger vignette shakes
|
||||
/// </summary>
|
||||
public struct MMColorGradingShakeEvent
|
||||
{
|
||||
static private event Delegate OnEvent;
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; }
|
||||
static public void Register(Delegate callback) { OnEvent += callback; }
|
||||
static public void Unregister(Delegate callback) { OnEvent -= callback; }
|
||||
|
||||
public delegate void Delegate(AnimationCurve shakePostExposure, float remapPostExposureZero, float remapPostExposureOne,
|
||||
AnimationCurve shakeHueShift, float remapHueShiftZero, float remapHueShiftOne,
|
||||
AnimationCurve shakeSaturation, float remapSaturationZero, float remapSaturationOne,
|
||||
AnimationCurve shakeContrast, float remapContrastZero, float remapContrastOne,
|
||||
bool shakeColorFilter, Gradient colorFilterGradient,
|
||||
float duration, bool relativeValues = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true,
|
||||
bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false);
|
||||
|
||||
static public void Trigger(AnimationCurve shakePostExposure, float remapPostExposureZero, float remapPostExposureOne,
|
||||
AnimationCurve shakeHueShift, float remapHueShiftZero, float remapHueShiftOne,
|
||||
AnimationCurve shakeSaturation, float remapSaturationZero, float remapSaturationOne,
|
||||
AnimationCurve shakeContrast, float remapContrastZero, float remapContrastOne,
|
||||
bool shakeColorFilter, Gradient colorFilterGradient,
|
||||
float duration, bool relativeValues = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true,
|
||||
bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false)
|
||||
{
|
||||
OnEvent?.Invoke(shakePostExposure, remapPostExposureZero, remapPostExposureOne,
|
||||
shakeHueShift, remapHueShiftZero, remapHueShiftOne,
|
||||
shakeSaturation, remapSaturationZero, remapSaturationOne,
|
||||
shakeContrast, remapContrastZero, remapContrastOne,
|
||||
shakeColorFilter, colorFilterGradient,
|
||||
duration, relativeValues, feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 416f266b197306a49975dadec6e05526
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
279
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMDepthOfFieldShaker.cs
vendored
Normal file
279
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMDepthOfFieldShaker.cs
vendored
Normal file
@@ -0,0 +1,279 @@
|
||||
using UnityEngine;
|
||||
#if MM_POSTPROCESSING
|
||||
using UnityEngine.Rendering.PostProcessing;
|
||||
#endif
|
||||
using MoreMountains.Feedbacks;
|
||||
using MoreMountains.Tools;
|
||||
|
||||
namespace MoreMountains.FeedbacksForThirdParty
|
||||
{
|
||||
/// <summary>
|
||||
/// Add this class to a Camera with a depth of field post processing and it'll be able to "shake" its values by getting events
|
||||
/// </summary>
|
||||
[AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMDepthOfFieldShaker")]
|
||||
#if MM_POSTPROCESSING
|
||||
[RequireComponent(typeof(PostProcessVolume))]
|
||||
#endif
|
||||
public class MMDepthOfFieldShaker : MMShaker
|
||||
{
|
||||
/// whether or not to add to the initial value
|
||||
public bool RelativeValues = true;
|
||||
|
||||
[MMInspectorGroup("Focus Distance", true, 49)]
|
||||
/// the curve used to animate the focus distance value on
|
||||
[Tooltip("the curve used to animate the focus distance value on")]
|
||||
public AnimationCurve ShakeFocusDistance = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0));
|
||||
/// the value to remap the curve's 0 to
|
||||
[Tooltip("the value to remap the curve's 0 to")]
|
||||
public float RemapFocusDistanceZero = 0f;
|
||||
/// the value to remap the curve's 1 to
|
||||
[Tooltip("the value to remap the curve's 1 to")]
|
||||
public float RemapFocusDistanceOne = 3f;
|
||||
|
||||
[MMInspectorGroup("Aperture", true, 50)]
|
||||
/// the curve used to animate the aperture value on
|
||||
[Tooltip("the curve used to animate the aperture value on")]
|
||||
public AnimationCurve ShakeAperture = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0));
|
||||
/// the value to remap the curve's 0 to
|
||||
[Tooltip("the value to remap the curve's 0 to")]
|
||||
[Range(0.1f, 32f)]
|
||||
public float RemapApertureZero = 0f;
|
||||
/// the value to remap the curve's 1 to
|
||||
[Tooltip("the value to remap the curve's 1 to")]
|
||||
[Range(0.1f, 32f)]
|
||||
public float RemapApertureOne = 0f;
|
||||
|
||||
[MMInspectorGroup("Focal Length", true, 51)]
|
||||
/// the curve used to animate the focal length value on
|
||||
[Tooltip("the curve used to animate the focal length value on")]
|
||||
public AnimationCurve ShakeFocalLength = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0));
|
||||
/// the value to remap the curve's 0 to
|
||||
[Tooltip("the value to remap the curve's 0 to")]
|
||||
[Range(0f, 300f)]
|
||||
public float RemapFocalLengthZero = 0f;
|
||||
/// the value to remap the curve's 1 to
|
||||
[Tooltip("the value to remap the curve's 1 to")]
|
||||
[Range(0f, 300f)]
|
||||
public float RemapFocalLengthOne = 0f;
|
||||
|
||||
#if MM_POSTPROCESSING
|
||||
protected PostProcessVolume _volume;
|
||||
protected DepthOfField _depthOfField;
|
||||
protected float _initialFocusDistance;
|
||||
protected float _initialAperture;
|
||||
protected float _initialFocalLength;
|
||||
protected float _originalShakeDuration;
|
||||
protected bool _originalRelativeValues;
|
||||
protected AnimationCurve _originalShakeFocusDistance;
|
||||
protected float _originalRemapFocusDistanceZero;
|
||||
protected float _originalRemapFocusDistanceOne;
|
||||
protected AnimationCurve _originalShakeAperture;
|
||||
protected float _originalRemapApertureZero;
|
||||
protected float _originalRemapApertureOne;
|
||||
protected AnimationCurve _originalShakeFocalLength;
|
||||
protected float _originalRemapFocalLengthZero;
|
||||
protected float _originalRemapFocalLengthOne;
|
||||
|
||||
/// <summary>
|
||||
/// On init we initialize our values
|
||||
/// </summary>
|
||||
protected override void Initialization()
|
||||
{
|
||||
base.Initialization();
|
||||
_volume = this.gameObject.GetComponent<PostProcessVolume>();
|
||||
_volume.profile.TryGetSettings(out _depthOfField);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Shakes values over time
|
||||
/// </summary>
|
||||
protected override void Shake()
|
||||
{
|
||||
float newFocusDistance = ShakeFloat(ShakeFocusDistance, RemapFocusDistanceZero, RemapFocusDistanceOne, RelativeValues, _initialFocusDistance);
|
||||
_depthOfField.focusDistance.Override(newFocusDistance);
|
||||
|
||||
float newAperture = ShakeFloat(ShakeAperture, RemapApertureZero, RemapApertureOne, RelativeValues, _initialAperture);
|
||||
_depthOfField.aperture.Override(newAperture);
|
||||
|
||||
float newFocalLength = ShakeFloat(ShakeFocalLength, RemapFocalLengthZero, RemapFocalLengthOne, RelativeValues, _initialFocalLength);
|
||||
_depthOfField.focalLength.Override(newFocalLength);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// When that shaker gets added, we initialize its shake duration
|
||||
/// </summary>
|
||||
protected virtual void Reset()
|
||||
{
|
||||
ShakeDuration = 2f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Collects initial values on the target
|
||||
/// </summary>
|
||||
protected override void GrabInitialValues()
|
||||
{
|
||||
_initialFocusDistance = _depthOfField.focusDistance;
|
||||
_initialAperture = _depthOfField.aperture;
|
||||
_initialFocalLength = _depthOfField.focalLength;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// When we get the appropriate event, we trigger a shake
|
||||
/// </summary>
|
||||
/// <param name="intensity"></param>
|
||||
/// <param name="duration"></param>
|
||||
/// <param name="amplitude"></param>
|
||||
/// <param name="relativeIntensity"></param>
|
||||
/// <param name="feedbacksIntensity"></param>
|
||||
/// <param name="channel"></param>
|
||||
public virtual void OnDepthOfFieldShakeEvent(AnimationCurve focusDistance, float duration, float remapFocusDistanceMin, float remapFocusDistanceMax,
|
||||
AnimationCurve aperture, float remapApertureMin, float remapApertureMax,
|
||||
AnimationCurve focalLength, float remapFocalLengthMin, float remapFocalLengthMax,
|
||||
bool relativeValues = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true,
|
||||
bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false)
|
||||
{
|
||||
if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (stop)
|
||||
{
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
if (restore)
|
||||
{
|
||||
ResetTargetValues();
|
||||
return;
|
||||
}
|
||||
|
||||
_resetShakerValuesAfterShake = resetShakerValuesAfterShake;
|
||||
_resetTargetValuesAfterShake = resetTargetValuesAfterShake;
|
||||
|
||||
if (resetShakerValuesAfterShake)
|
||||
{
|
||||
_originalShakeDuration = ShakeDuration;
|
||||
_originalRelativeValues = RelativeValues;
|
||||
|
||||
_originalShakeFocusDistance = ShakeFocusDistance;
|
||||
_originalRemapFocusDistanceZero = RemapFocusDistanceZero;
|
||||
_originalRemapFocusDistanceOne = RemapFocusDistanceOne;
|
||||
|
||||
_originalShakeAperture = ShakeAperture;
|
||||
_originalRemapApertureZero = RemapApertureZero;
|
||||
_originalRemapApertureOne = RemapApertureOne;
|
||||
|
||||
_originalShakeFocalLength = ShakeFocalLength;
|
||||
_originalRemapFocalLengthZero = RemapFocalLengthZero;
|
||||
_originalRemapFocalLengthOne = RemapFocalLengthOne;
|
||||
}
|
||||
|
||||
if (!OnlyUseShakerValues)
|
||||
{
|
||||
TimescaleMode = timescaleMode;
|
||||
ShakeDuration = duration;
|
||||
RelativeValues = relativeValues;
|
||||
ShakeFocusDistance = focusDistance;
|
||||
RemapFocusDistanceZero = remapFocusDistanceMin;
|
||||
RemapFocusDistanceOne = remapFocusDistanceMax;
|
||||
ShakeAperture = aperture;
|
||||
RemapApertureZero = remapApertureMin;
|
||||
RemapApertureOne = remapApertureMax;
|
||||
ShakeFocalLength = focalLength;
|
||||
RemapFocalLengthZero = remapFocalLengthMin;
|
||||
RemapFocalLengthOne = remapFocalLengthMax;
|
||||
ForwardDirection = forwardDirection;
|
||||
}
|
||||
|
||||
Play();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the target's values
|
||||
/// </summary>
|
||||
protected override void ResetTargetValues()
|
||||
{
|
||||
base.ResetTargetValues();
|
||||
|
||||
_depthOfField.focusDistance.Override(_initialFocusDistance);
|
||||
_depthOfField.aperture.Override(_initialAperture);
|
||||
_depthOfField.focalLength.Override(_initialFocalLength);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the shaker's values
|
||||
/// </summary>
|
||||
protected override void ResetShakerValues()
|
||||
{
|
||||
base.ResetShakerValues();
|
||||
|
||||
ShakeDuration = _originalShakeDuration;
|
||||
RelativeValues = _originalRelativeValues;
|
||||
|
||||
ShakeFocusDistance = _originalShakeFocusDistance;
|
||||
RemapFocusDistanceZero = _originalRemapFocusDistanceZero;
|
||||
RemapFocusDistanceOne = _originalRemapFocusDistanceOne;
|
||||
|
||||
ShakeAperture = _originalShakeAperture;
|
||||
RemapApertureZero = _originalRemapApertureZero;
|
||||
RemapApertureOne = _originalRemapApertureOne;
|
||||
|
||||
ShakeFocalLength = _originalShakeFocalLength;
|
||||
RemapFocalLengthZero = _originalRemapFocalLengthZero;
|
||||
RemapFocalLengthOne = _originalRemapFocalLengthOne;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Starts listening for events
|
||||
/// </summary>
|
||||
public override void StartListening()
|
||||
{
|
||||
base.StartListening();
|
||||
MMDepthOfFieldShakeEvent.Register(OnDepthOfFieldShakeEvent);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stops listening for events
|
||||
/// </summary>
|
||||
public override void StopListening()
|
||||
{
|
||||
base.StopListening();
|
||||
MMDepthOfFieldShakeEvent.Unregister(OnDepthOfFieldShakeEvent);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// An event used to trigger vignette shakes
|
||||
/// </summary>
|
||||
public struct MMDepthOfFieldShakeEvent
|
||||
{
|
||||
static private event Delegate OnEvent;
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; }
|
||||
static public void Register(Delegate callback) { OnEvent += callback; }
|
||||
static public void Unregister(Delegate callback) { OnEvent -= callback; }
|
||||
|
||||
public delegate void Delegate(AnimationCurve focusDistance, float duration, float remapFocusDistanceMin, float remapFocusDistanceMax,
|
||||
AnimationCurve aperture, float remapApertureMin, float remapApertureMax,
|
||||
AnimationCurve focalLength, float remapFocalLengthMin, float remapFocalLengthMax,
|
||||
bool relativeValues = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true,
|
||||
bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false);
|
||||
|
||||
static public void Trigger(AnimationCurve focusDistance, float duration, float remapFocusDistanceMin, float remapFocusDistanceMax,
|
||||
AnimationCurve aperture, float remapApertureMin, float remapApertureMax,
|
||||
AnimationCurve focalLength, float remapFocalLengthMin, float remapFocalLengthMax,
|
||||
bool relativeValues = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true,
|
||||
bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false)
|
||||
{
|
||||
OnEvent?.Invoke(focusDistance, duration, remapFocusDistanceMin, remapFocusDistanceMax,
|
||||
aperture, remapApertureMin, remapApertureMax,
|
||||
focalLength, remapFocalLengthMin, remapFocalLengthMax, relativeValues,
|
||||
feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4792d6bb2cfe7644da1e6972d3da260d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
208
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMLensDistortionShaker.cs
vendored
Normal file
208
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMLensDistortionShaker.cs
vendored
Normal file
@@ -0,0 +1,208 @@
|
||||
using UnityEngine;
|
||||
#if MM_POSTPROCESSING
|
||||
using UnityEngine.Rendering.PostProcessing;
|
||||
#endif
|
||||
using MoreMountains.Feedbacks;
|
||||
using MoreMountains.Tools;
|
||||
|
||||
namespace MoreMountains.FeedbacksForThirdParty
|
||||
{
|
||||
/// <summary>
|
||||
/// Add this class to a Camera with a lens distortion post processing and it'll be able to "shake" its values by getting events
|
||||
/// </summary>
|
||||
[AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMLensDistortionShaker")]
|
||||
#if MM_POSTPROCESSING
|
||||
[RequireComponent(typeof(PostProcessVolume))]
|
||||
#endif
|
||||
public class MMLensDistortionShaker : MMShaker
|
||||
{
|
||||
[MMInspectorGroup("Lens Distortion Intensity", true, 51)]
|
||||
/// whether or not to add to the initial value
|
||||
[Tooltip("whether or not to add to the initial value")]
|
||||
public bool RelativeIntensity = false;
|
||||
/// the curve used to animate the intensity value on
|
||||
[Tooltip("the curve used to animate the intensity value on")]
|
||||
public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0),
|
||||
new Keyframe(0.2f, 1),
|
||||
new Keyframe(0.25f, -1),
|
||||
new Keyframe(0.35f, 0.7f),
|
||||
new Keyframe(0.4f, -0.7f),
|
||||
new Keyframe(0.6f, 0.3f),
|
||||
new Keyframe(0.65f, -0.3f),
|
||||
new Keyframe(0.8f, 0.1f),
|
||||
new Keyframe(0.85f, -0.1f),
|
||||
new Keyframe(1, 0));
|
||||
/// the value to remap the curve's 0 to
|
||||
[Tooltip("the value to remap the curve's 0 to")]
|
||||
[Range(-100f, 100f)]
|
||||
public float RemapIntensityZero = 0f;
|
||||
/// the value to remap the curve's 1 to
|
||||
[Tooltip("the value to remap the curve's 1 to")]
|
||||
[Range(-100f, 100f)]
|
||||
public float RemapIntensityOne = 50f;
|
||||
|
||||
#if MM_POSTPROCESSING
|
||||
protected PostProcessVolume _volume;
|
||||
protected LensDistortion _lensDistortion;
|
||||
protected float _initialIntensity;
|
||||
protected float _originalShakeDuration;
|
||||
protected AnimationCurve _originalShakeIntensity;
|
||||
protected float _originalRemapIntensityZero;
|
||||
protected float _originalRemapIntensityOne;
|
||||
protected bool _originalRelativeIntensity;
|
||||
|
||||
/// <summary>
|
||||
/// On init we initialize our values
|
||||
/// </summary>
|
||||
protected override void Initialization()
|
||||
{
|
||||
base.Initialization();
|
||||
_volume = this.gameObject.GetComponent<PostProcessVolume>();
|
||||
_volume.profile.TryGetSettings(out _lensDistortion);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// When that shaker gets added, we initialize its shake duration
|
||||
/// </summary>
|
||||
protected virtual void Reset()
|
||||
{
|
||||
ShakeDuration = 0.8f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Shakes values over time
|
||||
/// </summary>
|
||||
protected override void Shake()
|
||||
{
|
||||
float newValue = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, _initialIntensity);
|
||||
_lensDistortion.intensity.Override(newValue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Collects initial values on the target
|
||||
/// </summary>
|
||||
protected override void GrabInitialValues()
|
||||
{
|
||||
_initialIntensity = _lensDistortion.intensity;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// When we get the appropriate event, we trigger a shake
|
||||
/// </summary>
|
||||
/// <param name="intensity"></param>
|
||||
/// <param name="duration"></param>
|
||||
/// <param name="amplitude"></param>
|
||||
/// <param name="relativeIntensity"></param>
|
||||
/// <param name="feedbacksIntensity"></param>
|
||||
/// <param name="channel"></param>
|
||||
public virtual void OnMMLensDistortionShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true,
|
||||
bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false)
|
||||
{
|
||||
if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (stop)
|
||||
{
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
if (restore)
|
||||
{
|
||||
ResetTargetValues();
|
||||
return;
|
||||
}
|
||||
|
||||
_resetShakerValuesAfterShake = resetShakerValuesAfterShake;
|
||||
_resetTargetValuesAfterShake = resetTargetValuesAfterShake;
|
||||
|
||||
if (resetShakerValuesAfterShake)
|
||||
{
|
||||
_originalShakeDuration = ShakeDuration;
|
||||
_originalShakeIntensity = ShakeIntensity;
|
||||
_originalRemapIntensityZero = RemapIntensityZero;
|
||||
_originalRemapIntensityOne = RemapIntensityOne;
|
||||
_originalRelativeIntensity = RelativeIntensity;
|
||||
}
|
||||
|
||||
if (!OnlyUseShakerValues)
|
||||
{
|
||||
TimescaleMode = timescaleMode;
|
||||
ShakeDuration = duration;
|
||||
ShakeIntensity = intensity;
|
||||
RemapIntensityZero = remapMin * feedbacksIntensity;
|
||||
RemapIntensityOne = remapMax * feedbacksIntensity;
|
||||
RelativeIntensity = relativeIntensity;
|
||||
ForwardDirection = forwardDirection;
|
||||
}
|
||||
|
||||
Play();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the target's values
|
||||
/// </summary>
|
||||
protected override void ResetTargetValues()
|
||||
{
|
||||
base.ResetTargetValues();
|
||||
_lensDistortion.intensity.Override(_initialIntensity);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the shaker's values
|
||||
/// </summary>
|
||||
protected override void ResetShakerValues()
|
||||
{
|
||||
base.ResetShakerValues();
|
||||
ShakeDuration = _originalShakeDuration;
|
||||
ShakeIntensity = _originalShakeIntensity;
|
||||
RemapIntensityZero = _originalRemapIntensityZero;
|
||||
RemapIntensityOne = _originalRemapIntensityOne;
|
||||
RelativeIntensity = _originalRelativeIntensity;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Starts listening for events
|
||||
/// </summary>
|
||||
public override void StartListening()
|
||||
{
|
||||
base.StartListening();
|
||||
MMLensDistortionShakeEvent.Register(OnMMLensDistortionShakeEvent);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stops listening for events
|
||||
/// </summary>
|
||||
public override void StopListening()
|
||||
{
|
||||
base.StopListening();
|
||||
MMLensDistortionShakeEvent.Unregister(OnMMLensDistortionShakeEvent);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// An event used to trigger vignette shakes
|
||||
/// </summary>
|
||||
public struct MMLensDistortionShakeEvent
|
||||
{
|
||||
static private event Delegate OnEvent;
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; }
|
||||
static public void Register(Delegate callback) { OnEvent += callback; }
|
||||
static public void Unregister(Delegate callback) { OnEvent -= callback; }
|
||||
|
||||
public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true,
|
||||
bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false);
|
||||
|
||||
static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true,
|
||||
bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false)
|
||||
{
|
||||
OnEvent?.Invoke(intensity, duration, remapMin, remapMax, relativeIntensity, feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7efc6a4a233d87b4fbc72cda82ca4a31
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
251
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMVignetteShaker.cs
vendored
Normal file
251
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMVignetteShaker.cs
vendored
Normal file
@@ -0,0 +1,251 @@
|
||||
using UnityEngine;
|
||||
#if MM_POSTPROCESSING
|
||||
using UnityEngine.Rendering.PostProcessing;
|
||||
#endif
|
||||
using MoreMountains.Feedbacks;
|
||||
using MoreMountains.Tools;
|
||||
|
||||
namespace MoreMountains.FeedbacksForThirdParty
|
||||
{
|
||||
/// <summary>
|
||||
/// Add this class to a Camera with a vignette post processing and it'll be able to "shake" its values by getting events
|
||||
/// </summary>
|
||||
[AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMVignetteShaker")]
|
||||
#if MM_POSTPROCESSING
|
||||
[RequireComponent(typeof(PostProcessVolume))]
|
||||
#endif
|
||||
public class MMVignetteShaker : MMShaker
|
||||
{
|
||||
[MMInspectorGroup("Vignette Intensity", true, 53)]
|
||||
/// whether or not to add to the initial value
|
||||
[Tooltip("whether or not to add to the initial value")]
|
||||
public bool RelativeIntensity = true;
|
||||
/// the curve used to animate the intensity value on
|
||||
[Tooltip("the curve used to animate the intensity value on")]
|
||||
public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0));
|
||||
/// the value to remap the curve's 0 to
|
||||
[Tooltip("the value to remap the curve's 0 to")]
|
||||
[Range(0f, 1f)]
|
||||
public float RemapIntensityZero = 0f;
|
||||
/// the value to remap the curve's 1 to
|
||||
[Tooltip("the value to remap the curve's 1 to")]
|
||||
[Range(0f, 1f)]
|
||||
public float RemapIntensityOne = 0.1f;
|
||||
|
||||
[MMInspectorGroup("Vignette Color", true, 51)]
|
||||
/// whether or not to also animate the vignette's color
|
||||
[Tooltip("whether or not to also animate the vignette's color")]
|
||||
public bool InterpolateColor = false;
|
||||
/// the curve to animate the color on
|
||||
[Tooltip("the curve to animate the color on")]
|
||||
public AnimationCurve ColorCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.05f, 1f), new Keyframe(0.95f, 1), new Keyframe(1, 0));
|
||||
/// the value to remap the curve's 0 to
|
||||
[Tooltip("the value to remap the curve's 0 to")]
|
||||
[Range(0, 1)]
|
||||
public float RemapColorZero = 0f;
|
||||
/// the value to remap the curve's 1 to
|
||||
[Tooltip("the value to remap the curve's 1 to")]
|
||||
[Range(0f, 1f)]
|
||||
public float RemapColorOne = 1f;
|
||||
/// the color to lerp towards
|
||||
[Tooltip("the color to lerp towards")]
|
||||
public Color TargetColor = Color.red;
|
||||
|
||||
|
||||
#if MM_POSTPROCESSING
|
||||
protected PostProcessVolume _volume;
|
||||
protected Vignette _vignette;
|
||||
protected float _initialIntensity;
|
||||
protected float _originalShakeDuration;
|
||||
protected AnimationCurve _originalShakeIntensity;
|
||||
protected float _originalRemapIntensityZero;
|
||||
protected float _originalRemapIntensityOne;
|
||||
protected bool _originalRelativeIntensity;
|
||||
|
||||
protected bool _originalInterpolateColor;
|
||||
protected AnimationCurve _originalColorCurve;
|
||||
protected float _originalRemapColorZero;
|
||||
protected float _originalRemapColorOne;
|
||||
protected Color _originalTargetColor;
|
||||
protected Color _initialColor;
|
||||
|
||||
/// <summary>
|
||||
/// On init we initialize our values
|
||||
/// </summary>
|
||||
protected override void Initialization()
|
||||
{
|
||||
base.Initialization();
|
||||
_volume = this.gameObject.GetComponent<PostProcessVolume>();
|
||||
_volume.profile.TryGetSettings(out _vignette);
|
||||
_initialColor = _vignette.color;
|
||||
}
|
||||
|
||||
public virtual void SetVignette(float newValue)
|
||||
{
|
||||
_vignette.intensity.Override(newValue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Shakes values over time
|
||||
/// </summary>
|
||||
protected override void Shake()
|
||||
{
|
||||
float newValue = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, _initialIntensity);
|
||||
_vignette.intensity.Override(newValue);
|
||||
|
||||
if (InterpolateColor)
|
||||
{
|
||||
float newColorValue = ShakeFloat(ColorCurve, RemapColorZero, RemapColorOne, RelativeIntensity, 0);
|
||||
_vignette.color.Override(Color.Lerp(_initialColor, TargetColor, newColorValue));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Collects initial values on the target
|
||||
/// </summary>
|
||||
protected override void GrabInitialValues()
|
||||
{
|
||||
_initialIntensity = _vignette.intensity;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// When we get the appropriate event, we trigger a shake
|
||||
/// </summary>
|
||||
/// <param name="intensity"></param>
|
||||
/// <param name="duration"></param>
|
||||
/// <param name="amplitude"></param>
|
||||
/// <param name="relativeIntensity"></param>
|
||||
/// <param name="feedbacksIntensity"></param>
|
||||
/// <param name="channel"></param>
|
||||
public virtual void OnVignetteShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true,
|
||||
bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false,
|
||||
bool interpolateColor = false, AnimationCurve colorCurve = null, float remapColorZero = 0f, float remapColorOne = 1f, Color targetColor = default(Color))
|
||||
{
|
||||
if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (stop)
|
||||
{
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
if (restore)
|
||||
{
|
||||
ResetTargetValues();
|
||||
return;
|
||||
}
|
||||
|
||||
_resetShakerValuesAfterShake = resetShakerValuesAfterShake;
|
||||
_resetTargetValuesAfterShake = resetTargetValuesAfterShake;
|
||||
|
||||
if (resetShakerValuesAfterShake)
|
||||
{
|
||||
_originalShakeDuration = ShakeDuration;
|
||||
_originalShakeIntensity = ShakeIntensity;
|
||||
_originalRemapIntensityZero = RemapIntensityZero;
|
||||
_originalRemapIntensityOne = RemapIntensityOne;
|
||||
_originalRelativeIntensity = RelativeIntensity;
|
||||
_originalInterpolateColor = InterpolateColor;
|
||||
_originalColorCurve = ColorCurve;
|
||||
_originalRemapColorZero = RemapColorZero;
|
||||
_originalRemapColorOne = RemapColorOne;
|
||||
_originalTargetColor = TargetColor;
|
||||
}
|
||||
|
||||
if (!OnlyUseShakerValues)
|
||||
{
|
||||
TimescaleMode = timescaleMode;
|
||||
ShakeDuration = duration;
|
||||
ShakeIntensity = intensity;
|
||||
RemapIntensityZero = remapMin * feedbacksIntensity;
|
||||
RemapIntensityOne = remapMax * feedbacksIntensity;
|
||||
RelativeIntensity = relativeIntensity;
|
||||
ForwardDirection = forwardDirection;
|
||||
InterpolateColor = interpolateColor;
|
||||
ColorCurve = colorCurve;
|
||||
RemapColorZero = remapColorZero;
|
||||
RemapColorOne = remapColorOne;
|
||||
TargetColor = targetColor;
|
||||
}
|
||||
|
||||
Play();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the target's values
|
||||
/// </summary>
|
||||
protected override void ResetTargetValues()
|
||||
{
|
||||
base.ResetTargetValues();
|
||||
_vignette.intensity.Override(_initialIntensity);
|
||||
_vignette.color.Override(_initialColor);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the shaker's values
|
||||
/// </summary>
|
||||
protected override void ResetShakerValues()
|
||||
{
|
||||
base.ResetShakerValues();
|
||||
ShakeDuration = _originalShakeDuration;
|
||||
ShakeIntensity = _originalShakeIntensity;
|
||||
RemapIntensityZero = _originalRemapIntensityZero;
|
||||
RemapIntensityOne = _originalRemapIntensityOne;
|
||||
RelativeIntensity = _originalRelativeIntensity;
|
||||
InterpolateColor = _originalInterpolateColor;
|
||||
ColorCurve = _originalColorCurve;
|
||||
RemapColorZero = _originalRemapColorZero;
|
||||
RemapColorOne = _originalRemapColorOne;
|
||||
TargetColor = _originalTargetColor;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Starts listening for events
|
||||
/// </summary>
|
||||
public override void StartListening()
|
||||
{
|
||||
base.StartListening();
|
||||
MMVignetteShakeEvent.Register(OnVignetteShakeEvent);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stops listening for events
|
||||
/// </summary>
|
||||
public override void StopListening()
|
||||
{
|
||||
base.StopListening();
|
||||
MMVignetteShakeEvent.Unregister(OnVignetteShakeEvent);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// An event used to trigger vignette shakes
|
||||
/// </summary>
|
||||
public struct MMVignetteShakeEvent
|
||||
{
|
||||
static private event Delegate OnEvent;
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; }
|
||||
static public void Register(Delegate callback) { OnEvent += callback; }
|
||||
static public void Unregister(Delegate callback) { OnEvent -= callback; }
|
||||
|
||||
public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true,
|
||||
bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false,
|
||||
bool interpolateColor = false, AnimationCurve colorCurve = null, float remapColorZero = 0f, float remapColorOne = 1f, Color targetColor = default(Color));
|
||||
|
||||
static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false,
|
||||
float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true,
|
||||
bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false,
|
||||
bool interpolateColor = false, AnimationCurve colorCurve = null, float remapColorZero = 0f, float remapColorOne = 1f, Color targetColor = default(Color))
|
||||
{
|
||||
OnEvent?.Invoke(intensity, duration, remapMin, remapMax, relativeIntensity, feedbacksIntensity, channelData, resetShakerValuesAfterShake,
|
||||
resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore,
|
||||
interpolateColor, colorCurve, remapColorZero, remapColorOne, targetColor);
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMVignetteShaker.cs.meta
vendored
Normal file
11
Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMVignetteShaker.cs.meta
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 81cf12de3b3c98d489779a3382046725
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user