升级水插件

This commit is contained in:
2026-01-08 22:30:55 +08:00
parent febff82d24
commit ca68084264
415 changed files with 18138 additions and 7134 deletions

View File

@@ -1,4 +1,4 @@
// Crest Water System
// Crest Water System
// Copyright © 2024 Wave Harmonic. All rights reserved.
using UnityEngine;
@@ -82,27 +82,28 @@ namespace WaveHarmonic.Crest
{
var layers = _Water.AnimatedWavesLod._CollisionLayers;
// Displacement is the fallback if there are no layers (ie single layer).
if (layers == CollisionLayers.Nothing)
{
return _Displacement;
}
if (layer == CollisionLayer.Everything)
var everything = layer == CollisionLayer.Everything;
// Displacement is the final layer, if present.
if (everything && layers.HasFlag(CollisionLayers.Displacement))
{
if (layers.HasFlag(CollisionLayers.Displacement))
{
return _Displacement;
}
return _Displacement;
}
if (layer >= CollisionLayer.AfterDynamicWaves)
// Chosen/fallback to Dynamic Waves.
if ((everything || layer >= CollisionLayer.AfterDynamicWaves) &&
layers.HasFlag(CollisionLayers.DynamicWaves) && _Water.DynamicWavesLod.Enabled)
{
if (layers.HasFlag(CollisionLayers.DynamicWaves) && _Water.DynamicWavesLod.Enabled)
{
return _DynamicWaves;
}
return _DynamicWaves;
}
// If not single layer, this is always present.
return _AnimatedWaves;
}
@@ -131,6 +132,19 @@ namespace WaveHarmonic.Crest
_Displacement.UpdateQueries(water);
}
public void SendReadBack(WaterRenderer water, CollisionLayers layers)
{
// Will only submit readback if there are queries.
_AnimatedWaves.SendReadBack(water);
_DynamicWaves.SendReadBack(water);
_Displacement.SendReadBack(water);
}
public void SendReadBack(WaterRenderer water)
{
_Displacement.SendReadBack(water);
}
public void CleanUp()
{
_AnimatedWaves.CleanUp();
@@ -143,6 +157,7 @@ namespace WaveHarmonic.Crest
{
public static void UpdateQueries(this ICollisionProvider self, WaterRenderer water, CollisionLayer layer) => (self as CollisionQueryWithPasses)?.UpdateQueries(water, layer);
public static void UpdateQueries(this ICollisionProvider self, WaterRenderer water) => (self as IQueryable)?.UpdateQueries(water);
public static void SendReadBack(this ICollisionProvider self, WaterRenderer water, CollisionLayers layer) => (self as CollisionQueryWithPasses)?.SendReadBack(water, layer);
public static void CleanUp(this ICollisionProvider self) => (self as IQueryable)?.CleanUp();
}
}