Cleanup warnings in DisplacementMapSystem (#37511)
* Cleanup warnings in DisplacementMapSystem * docs update * Suggested simplification
This commit is contained in:
@@ -8,18 +8,19 @@ namespace Content.Client.DisplacementMap;
|
|||||||
public sealed class DisplacementMapSystem : EntitySystem
|
public sealed class DisplacementMapSystem : EntitySystem
|
||||||
{
|
{
|
||||||
[Dependency] private readonly ISerializationManager _serialization = default!;
|
[Dependency] private readonly ISerializationManager _serialization = default!;
|
||||||
|
[Dependency] private readonly SpriteSystem _sprite = default!;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Attempting to apply a displacement map to a specific layer of SpriteComponent
|
/// Attempting to apply a displacement map to a specific layer of SpriteComponent
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="data">Information package for applying the displacement map</param>
|
/// <param name="data">Information package for applying the displacement map</param>
|
||||||
/// <param name="sprite">SpriteComponent</param>
|
/// <param name="sprite">Entity with SpriteComponent</param>
|
||||||
/// <param name="index">Index of the layer where the new map layer will be added</param>
|
/// <param name="index">Index of the layer where the new map layer will be added</param>
|
||||||
/// <param name="key">Unique layer key, which will determine which layer to apply displacement map to</param>
|
/// <param name="key">Unique layer key, which will determine which layer to apply displacement map to</param>
|
||||||
/// <param name="displacementKey">The key of the new displacement map layer added by this function.</param>
|
/// <param name="displacementKey">The key of the new displacement map layer added by this function.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public bool TryAddDisplacement(DisplacementData data,
|
public bool TryAddDisplacement(DisplacementData data,
|
||||||
SpriteComponent sprite,
|
Entity<SpriteComponent> sprite,
|
||||||
int index,
|
int index,
|
||||||
object key,
|
object key,
|
||||||
out string displacementKey)
|
out string displacementKey)
|
||||||
@@ -30,10 +31,9 @@ public sealed class DisplacementMapSystem : EntitySystem
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (data.ShaderOverride != null)
|
if (data.ShaderOverride != null)
|
||||||
sprite.LayerSetShader(index, data.ShaderOverride);
|
sprite.Comp.LayerSetShader(index, data.ShaderOverride);
|
||||||
|
|
||||||
if (sprite.LayerMapTryGet(displacementKey, out var oldIndex))
|
_sprite.RemoveLayer(sprite.AsNullable(), displacementKey, false);
|
||||||
sprite.RemoveLayer(oldIndex);
|
|
||||||
|
|
||||||
//allows you not to write it every time in the YML
|
//allows you not to write it every time in the YML
|
||||||
foreach (var pair in data.SizeMaps)
|
foreach (var pair in data.SizeMaps)
|
||||||
@@ -55,7 +55,7 @@ public sealed class DisplacementMapSystem : EntitySystem
|
|||||||
// We choose a displacement map from the possible ones, matching the size with the original layer size.
|
// We choose a displacement map from the possible ones, matching the size with the original layer size.
|
||||||
// If there is no such a map, we use a standard 32 by 32 one
|
// If there is no such a map, we use a standard 32 by 32 one
|
||||||
var displacementDataLayer = data.SizeMaps[EyeManager.PixelsPerMeter];
|
var displacementDataLayer = data.SizeMaps[EyeManager.PixelsPerMeter];
|
||||||
var actualRSI = sprite.LayerGetActualRSI(index);
|
var actualRSI = _sprite.LayerGetEffectiveRsi(sprite.AsNullable(), index);
|
||||||
if (actualRSI is not null)
|
if (actualRSI is not null)
|
||||||
{
|
{
|
||||||
if (actualRSI.Size.X != actualRSI.Size.Y)
|
if (actualRSI.Size.X != actualRSI.Size.Y)
|
||||||
@@ -72,9 +72,20 @@ public sealed class DisplacementMapSystem : EntitySystem
|
|||||||
var displacementLayer = _serialization.CreateCopy(displacementDataLayer, notNullableOverride: true);
|
var displacementLayer = _serialization.CreateCopy(displacementDataLayer, notNullableOverride: true);
|
||||||
displacementLayer.CopyToShaderParameters!.LayerKey = key.ToString() ?? "this is impossible";
|
displacementLayer.CopyToShaderParameters!.LayerKey = key.ToString() ?? "this is impossible";
|
||||||
|
|
||||||
sprite.AddLayer(displacementLayer, index);
|
_sprite.AddLayer(sprite.AsNullable(), displacementLayer, index);
|
||||||
sprite.LayerMapSet(displacementKey, index);
|
_sprite.LayerMapSet(sprite.AsNullable(), displacementKey, index);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc cref="TryAddDisplacement"/>
|
||||||
|
[Obsolete("Use the Entity<SpriteComponent> overload")]
|
||||||
|
public bool TryAddDisplacement(DisplacementData data,
|
||||||
|
SpriteComponent sprite,
|
||||||
|
int index,
|
||||||
|
object key,
|
||||||
|
out string displacementKey)
|
||||||
|
{
|
||||||
|
return TryAddDisplacement(data, (sprite.Owner, sprite), index, key, out displacementKey);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user