升级6.4.升级水,升级天气
This commit is contained in:
@@ -23,14 +23,14 @@ namespace WaveHarmonic.Crest
|
||||
DisplacementPass _DisplacementPass = DisplacementPass.LodIndependent;
|
||||
|
||||
[Tooltip("Whether to filter this input by wavelength.\n\nIf disabled, it will render to all LODs.")]
|
||||
[@Predicated(nameof(_DisplacementPass), inverted: true, nameof(DisplacementPass.LodDependent))]
|
||||
[@Enable(nameof(_DisplacementPass), nameof(DisplacementPass.LodDependent))]
|
||||
[@GenerateAPI]
|
||||
[DecoratedField, SerializeField]
|
||||
bool _FilterByWavelength;
|
||||
|
||||
[Tooltip("Which octave to render into.\n\nFor example, set this to 2 to render into the 2m-4m octave. These refer to the same octaves as the wave spectrum editor.")]
|
||||
[@Predicated(nameof(_DisplacementPass), inverted: true, nameof(DisplacementPass.LodDependent))]
|
||||
[@Predicated(nameof(_FilterByWavelength))]
|
||||
[@Enable(nameof(_DisplacementPass), nameof(DisplacementPass.LodDependent))]
|
||||
[@Enable(nameof(_FilterByWavelength))]
|
||||
[@GenerateAPI]
|
||||
[@DecoratedField, SerializeField]
|
||||
float _OctaveWavelength = 512f;
|
||||
@@ -49,7 +49,7 @@ namespace WaveHarmonic.Crest
|
||||
float _MaximumDisplacementHorizontal = 0f;
|
||||
|
||||
[Tooltip("Use the bounding box of an attached renderer component to determine the maximum vertical displacement.")]
|
||||
[@Predicated(nameof(_Mode), inverted: true, nameof(LodInputMode.Renderer))]
|
||||
[@Enable(nameof(_Mode), nameof(LodInputMode.Renderer))]
|
||||
[@GenerateAPI]
|
||||
[@DecoratedField, SerializeField]
|
||||
bool _ReportRendererBounds = false;
|
||||
@@ -63,23 +63,35 @@ namespace WaveHarmonic.Crest
|
||||
_FollowHorizontalWaveMotion = true;
|
||||
}
|
||||
|
||||
internal override float Filter(WaterRenderer water, int slice)
|
||||
private protected override void Initialize()
|
||||
{
|
||||
return AnimatedWavesLod.FilterByWavelength(water, slice, _FilterByWavelength ? _OctaveWavelength : 0f);
|
||||
base.Initialize();
|
||||
_Reporter ??= new(this);
|
||||
_DisplacementReporter = _Reporter;
|
||||
}
|
||||
|
||||
private protected override void OnUpdate(WaterRenderer water)
|
||||
private protected override void OnDisable()
|
||||
{
|
||||
base.OnUpdate(water);
|
||||
base.OnDisable();
|
||||
_DisplacementReporter = null;
|
||||
}
|
||||
|
||||
internal override float Filter(WaterRenderer water, int slice)
|
||||
{
|
||||
return AnimatedWavesLod.FilterByWavelength(water, slice, _FilterByWavelength ? _OctaveWavelength : 0f, water.AnimatedWavesLod.Resolution);
|
||||
}
|
||||
|
||||
bool ReportDisplacement(WaterRenderer water, ref Rect bounds, ref float horizontal, ref float vertical)
|
||||
{
|
||||
if (!Enabled)
|
||||
{
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
var maxDispVert = _MaximumDisplacementVertical;
|
||||
|
||||
// let water system know how far from the sea level this shape may displace the surface
|
||||
// TODO: we need separate min/max vertical displacement to be optimal.
|
||||
if (_ReportRendererBounds)
|
||||
{
|
||||
var range = Data.HeightRange;
|
||||
@@ -89,19 +101,40 @@ namespace WaveHarmonic.Crest
|
||||
maxDispVert = Mathf.Max(maxDispVert, Mathf.Abs(seaLevel - minY), Mathf.Abs(seaLevel - maxY));
|
||||
}
|
||||
|
||||
if (_MaximumDisplacementHorizontal > 0f || maxDispVert > 0f)
|
||||
var rect = Data.Rect;
|
||||
|
||||
if (bounds.Overlaps(rect, false))
|
||||
{
|
||||
water.ReportMaximumDisplacement(_MaximumDisplacementHorizontal, maxDispVert, 0f);
|
||||
horizontal += _MaximumDisplacementHorizontal;
|
||||
vertical += maxDispVert;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
float ReportWaveDisplacement(WaterRenderer water, float displacement)
|
||||
{
|
||||
return displacement;
|
||||
}
|
||||
}
|
||||
|
||||
partial class AnimatedWavesLodInput : ISerializationCallbackReceiver
|
||||
partial class AnimatedWavesLodInput
|
||||
{
|
||||
[SerializeField, HideInInspector]
|
||||
#pragma warning disable 414
|
||||
int _Version = 1;
|
||||
#pragma warning restore 414
|
||||
Reporter _Reporter;
|
||||
|
||||
sealed class Reporter : IReportsDisplacement, IReportWaveDisplacement
|
||||
{
|
||||
readonly AnimatedWavesLodInput _Input;
|
||||
public Reporter(AnimatedWavesLodInput input) => _Input = input;
|
||||
public bool ReportDisplacement(WaterRenderer water, ref Rect bounds, ref float horizontal, ref float vertical) => _Input.ReportDisplacement(water, ref bounds, ref horizontal, ref vertical);
|
||||
public float ReportWaveDisplacement(WaterRenderer water, float displacement) => _Input.ReportWaveDisplacement(water, displacement);
|
||||
}
|
||||
}
|
||||
|
||||
partial class AnimatedWavesLodInput
|
||||
{
|
||||
private protected override int Version => Mathf.Max(base.Version, 1);
|
||||
|
||||
[System.Obsolete("Please use DisplacementPass instead.")]
|
||||
[Tooltip("When to render the input into the displacement data.\n\nIf enabled, it renders into all LODs of the simulation after the combine step rather than before with filtering. Furthermore, it will also affect dynamic waves.")]
|
||||
@@ -110,30 +143,25 @@ namespace WaveHarmonic.Crest
|
||||
[HideInInspector]
|
||||
bool _RenderPostCombine = true;
|
||||
|
||||
[System.Obsolete]
|
||||
void SetRenderPostCombine(bool previous, bool current, bool force = false)
|
||||
{
|
||||
if (previous == current && !force) return;
|
||||
_DisplacementPass = current ? DisplacementPass.LodIndependent : DisplacementPass.LodDependent;
|
||||
}
|
||||
|
||||
#pragma warning disable CS0612 // Type or member is obsolete
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
|
||||
/// <inheritdoc/>
|
||||
void ISerializationCallbackReceiver.OnAfterDeserialize()
|
||||
private protected override void OnMigrate()
|
||||
{
|
||||
base.OnMigrate();
|
||||
|
||||
if (_Version < 1)
|
||||
{
|
||||
SetRenderPostCombine(_RenderPostCombine, _RenderPostCombine, force: true);
|
||||
_Version = 1;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma warning restore CS0612 // Type or member is obsolete
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
|
||||
/// <inheritdoc/>
|
||||
void ISerializationCallbackReceiver.OnBeforeSerialize()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user