Convert Remaining Atmos Appearance Visualizers (#9582)
* Convert atmos plaque to generic visualizer Use generic visualizer for atmos plaque. Also enables zumos plaque to appear. * Convert gas canister connecters * Remove manual layer creation * Remove gas canister visualizer * Convert gas analyzers to generic visualizers * Convert fire visualizer * Fix layers on plasma and air canisters * Remove commented out fire visualizer in barricades * Add documentation for fire visuals component * Remove redundant visualizer for milkalyzer * Remove rogue item group
This commit is contained in:
59
Content.Client/Atmos/EntitySystems/FireVisualizerSystem.cs
Normal file
59
Content.Client/Atmos/EntitySystems/FireVisualizerSystem.cs
Normal file
@@ -0,0 +1,59 @@
|
||||
using Content.Client.Atmos.Components;
|
||||
using Content.Shared.Atmos;
|
||||
using Robust.Client.GameObjects;
|
||||
|
||||
namespace Content.Client.Atmos.EntitySystems;
|
||||
|
||||
/// <summary>
|
||||
/// This handles the display of fire effects on flammable entities.
|
||||
/// </summary>
|
||||
public sealed class FireVisualizerSystem : VisualizerSystem<FireVisualsComponent>
|
||||
{
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<FireVisualsComponent, ComponentInit>(OnComponentInit);
|
||||
}
|
||||
|
||||
private void OnComponentInit(EntityUid uid, FireVisualsComponent component, ComponentInit args)
|
||||
{
|
||||
if (!TryComp<SpriteComponent>(uid, out var sprite))
|
||||
return;
|
||||
|
||||
sprite.LayerMapReserveBlank(FireVisualLayers.Fire);
|
||||
sprite.LayerSetVisible(FireVisualLayers.Fire, false);
|
||||
sprite.LayerSetShader(FireVisualLayers.Fire, "unshaded");
|
||||
}
|
||||
|
||||
protected override void OnAppearanceChange(EntityUid uid, FireVisualsComponent component, ref AppearanceChangeEvent args)
|
||||
{
|
||||
if (!args.Component.TryGetData(FireVisuals.OnFire, out bool onFire) ||
|
||||
!TryComp<SpriteComponent>(component.Owner, out var sprite))
|
||||
return;
|
||||
|
||||
var fireStacks = 0f;
|
||||
if (args.Component.TryGetData(FireVisuals.FireStacks, out float stacks))
|
||||
fireStacks = stacks;
|
||||
|
||||
SetOnFire(sprite, args.Component, component, onFire, fireStacks);
|
||||
}
|
||||
|
||||
private void SetOnFire(SpriteComponent sprite, AppearanceComponent appearance, FireVisualsComponent component, bool onFire, float fireStacks)
|
||||
{
|
||||
if (component.Sprite != null)
|
||||
sprite.LayerSetRSI(FireVisualLayers.Fire, component.Sprite);
|
||||
|
||||
sprite.LayerSetVisible(FireVisualLayers.Fire, onFire);
|
||||
|
||||
if(fireStacks > component.FireStackAlternateState && !string.IsNullOrEmpty(component.AlternateState))
|
||||
sprite.LayerSetState(FireVisualLayers.Fire, component.AlternateState);
|
||||
else
|
||||
sprite.LayerSetState(FireVisualLayers.Fire, component.NormalState);
|
||||
}
|
||||
}
|
||||
|
||||
public enum FireVisualLayers : byte
|
||||
{
|
||||
Fire
|
||||
}
|
||||
Reference in New Issue
Block a user