* 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
60 lines
2.0 KiB
C#
60 lines
2.0 KiB
C#
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
|
|
}
|