* Fix build

- Fixes a couple paint things that were broken.

* wat
This commit is contained in:
metalgearsloth
2024-03-19 23:34:00 +11:00
committed by GitHub
parent 362d56981f
commit 6de5fbfafb
3 changed files with 95 additions and 103 deletions

View File

@@ -7,112 +7,108 @@ using Content.Shared.Paint;
using Robust.Client.Graphics;
using Robust.Shared.Prototypes;
namespace Content.Client.Paint
namespace Content.Client.Paint;
public sealed class PaintedVisualizerSystem : VisualizerSystem<PaintedComponent>
{
public sealed class PaintedVisualizerSystem : VisualizerSystem<PaintedComponent>
/// <summary>
/// Visualizer for Paint which applies a shader and colors the entity.
/// </summary>
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly IPrototypeManager _protoMan = default!;
public override void Initialize()
{
/// <summary>
/// Visualizer for Paint which applies a shader and colors the entity.
/// </summary>
base.Initialize();
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly IPrototypeManager _protoMan = default!;
SubscribeLocalEvent<PaintedComponent, HeldVisualsUpdatedEvent>(OnHeldVisualsUpdated);
SubscribeLocalEvent<PaintedComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<PaintedComponent, EquipmentVisualsUpdatedEvent>(OnEquipmentVisualsUpdated);
}
public ShaderInstance? Shader; // in Robust.Client.Graphics so cannot move to shared component.
protected override void OnAppearanceChange(EntityUid uid, PaintedComponent component, ref AppearanceChangeEvent args)
{
var shader = _protoMan.Index<ShaderPrototype>(component.ShaderName).Instance();
public override void Initialize()
if (args.Sprite == null)
return;
// What is this even doing? It's not even checking what the value is.
if (!_appearance.TryGetData(uid, PaintVisuals.Painted, out bool isPainted))
return;
var sprite = args.Sprite;
foreach (var spriteLayer in sprite.AllLayers)
{
base.Initialize();
if (spriteLayer is not Layer layer)
continue;
SubscribeLocalEvent<PaintedComponent, HeldVisualsUpdatedEvent>(OnHeldVisualsUpdated);
SubscribeLocalEvent<PaintedComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<PaintedComponent, EquipmentVisualsUpdatedEvent>(OnEquipmentVisualsUpdated);
if (layer.Shader == null) // If shader isn't null we dont want to replace the original shader.
{
layer.Shader = shader;
layer.Color = component.Color;
}
}
}
protected override void OnAppearanceChange(EntityUid uid, PaintedComponent component, ref AppearanceChangeEvent args)
private void OnHeldVisualsUpdated(EntityUid uid, PaintedComponent component, HeldVisualsUpdatedEvent args)
{
if (args.RevealedLayers.Count == 0)
return;
if (!TryComp(args.User, out SpriteComponent? sprite))
return;
foreach (var revealed in args.RevealedLayers)
{
// ShaderPrototype sadly in Robust.Client, cannot move to shared component.
Shader = _protoMan.Index<ShaderPrototype>(component.ShaderName).Instance();
if (!sprite.LayerMapTryGet(revealed, out var layer))
continue;
if (args.Sprite == null)
return;
sprite.LayerSetShader(layer, component.ShaderName);
sprite.LayerSetColor(layer, component.Color);
}
}
if (!_appearance.TryGetData<bool>(uid, PaintVisuals.Painted, out bool isPainted))
return;
private void OnEquipmentVisualsUpdated(EntityUid uid, PaintedComponent component, EquipmentVisualsUpdatedEvent args)
{
if (args.RevealedLayers.Count == 0)
return;
var sprite = args.Sprite;
if (!TryComp(args.Equipee, out SpriteComponent? sprite))
return;
foreach (var revealed in args.RevealedLayers)
{
if (!sprite.LayerMapTryGet(revealed, out var layer))
continue;
sprite.LayerSetShader(layer, component.ShaderName);
sprite.LayerSetColor(layer, component.Color);
}
}
private void OnShutdown(EntityUid uid, PaintedComponent component, ref ComponentShutdown args)
{
if (!TryComp(uid, out SpriteComponent? sprite))
return;
component.BeforeColor = sprite.Color;
var shader = _protoMan.Index<ShaderPrototype>(component.ShaderName).Instance();
if (!Terminating(uid))
{
foreach (var spriteLayer in sprite.AllLayers)
{
if (spriteLayer is not Layer layer)
continue;
if (layer.Shader == null) // If shader isn't null we dont want to replace the original shader.
if (layer.Shader == shader) // If shader isn't same as one in component we need to ignore it.
{
layer.Shader = Shader;
layer.Color = component.Color;
}
}
}
private void OnHeldVisualsUpdated(EntityUid uid, PaintedComponent component, HeldVisualsUpdatedEvent args)
{
if (args.RevealedLayers.Count == 0)
return;
if (!TryComp(args.User, out SpriteComponent? sprite))
return;
foreach (var revealed in args.RevealedLayers)
{
if (!sprite.LayerMapTryGet(revealed, out var layer) || sprite[layer] is not Layer notlayer)
continue;
sprite.LayerSetShader(layer, component.ShaderName);
sprite.LayerSetColor(layer, component.Color);
}
}
private void OnEquipmentVisualsUpdated(EntityUid uid, PaintedComponent component, EquipmentVisualsUpdatedEvent args)
{
if (args.RevealedLayers.Count == 0)
return;
if (!TryComp(args.Equipee, out SpriteComponent? sprite))
return;
foreach (var revealed in args.RevealedLayers)
{
if (!sprite.LayerMapTryGet(revealed, out var layer) || sprite[layer] is not Layer notlayer)
continue;
sprite.LayerSetShader(layer, component.ShaderName);
sprite.LayerSetColor(layer, component.Color);
}
}
private void OnShutdown(EntityUid uid, PaintedComponent component, ref ComponentShutdown args)
{
if (!TryComp(uid, out SpriteComponent? sprite))
return;
component.BeforeColor = sprite.Color;
Shader = _protoMan.Index<ShaderPrototype>(component.ShaderName).Instance();
if (!Terminating(uid))
{
foreach (var spriteLayer in sprite.AllLayers)
{
if (spriteLayer is not Layer layer)
continue;
if (layer.Shader == Shader) // If shader isn't same as one in component we need to ignore it.
{
layer.Shader = null;
if (layer.Color == component.Color) // If color isn't the same as one in component we don't want to change it.
layer.Color = component.BeforeColor;
}
layer.Shader = null;
if (layer.Color == component.Color) // If color isn't the same as one in component we don't want to change it.
layer.Color = component.BeforeColor;
}
}
}