2021-09-22 11:05:33 +02:00
|
|
|
|
using Content.Shared.Atmos;
|
2020-10-26 23:19:46 +01:00
|
|
|
|
using JetBrains.Annotations;
|
2020-09-22 15:40:04 +02:00
|
|
|
|
using Robust.Client.GameObjects;
|
2021-02-11 01:13:03 -08:00
|
|
|
|
using Robust.Shared.GameObjects;
|
2021-12-03 11:55:25 +01:00
|
|
|
|
using Robust.Shared.IoC;
|
2021-03-05 01:08:38 +01:00
|
|
|
|
using Robust.Shared.Serialization.Manager.Attributes;
|
2020-09-22 15:40:04 +02:00
|
|
|
|
|
2021-06-19 13:25:05 +02:00
|
|
|
|
namespace Content.Client.Atmos.Visualizers
|
2020-09-22 15:40:04 +02:00
|
|
|
|
{
|
2020-10-26 23:19:46 +01:00
|
|
|
|
[UsedImplicitly]
|
2022-02-16 00:23:23 -07:00
|
|
|
|
public sealed class FireVisualizer : AppearanceVisualizer
|
2020-09-22 15:40:04 +02:00
|
|
|
|
{
|
2021-03-05 01:08:38 +01:00
|
|
|
|
[DataField("fireStackAlternateState")]
|
2020-09-22 15:40:04 +02:00
|
|
|
|
private int _fireStackAlternateState = 3;
|
2021-03-10 14:48:29 +01:00
|
|
|
|
|
2021-03-05 01:08:38 +01:00
|
|
|
|
[DataField("normalState")]
|
2021-03-10 14:48:29 +01:00
|
|
|
|
private string? _normalState;
|
|
|
|
|
|
|
2021-03-05 01:08:38 +01:00
|
|
|
|
[DataField("alternateState")]
|
2021-03-10 14:48:29 +01:00
|
|
|
|
private string? _alternateState;
|
|
|
|
|
|
|
2021-03-05 01:08:38 +01:00
|
|
|
|
[DataField("sprite")]
|
2021-03-10 14:48:29 +01:00
|
|
|
|
private string? _sprite;
|
2020-10-26 23:19:46 +01:00
|
|
|
|
|
2021-12-05 18:09:01 +01:00
|
|
|
|
public override void InitializeEntity(EntityUid entity)
|
2020-10-26 23:19:46 +01:00
|
|
|
|
{
|
|
|
|
|
|
base.InitializeEntity(entity);
|
|
|
|
|
|
|
2021-12-03 15:53:09 +01:00
|
|
|
|
var sprite = IoCManager.Resolve<IEntityManager>().GetComponent<ISpriteComponent>(entity);
|
2020-10-26 23:19:46 +01:00
|
|
|
|
|
|
|
|
|
|
sprite.LayerMapReserveBlank(FireVisualLayers.Fire);
|
|
|
|
|
|
sprite.LayerSetVisible(FireVisualLayers.Fire, false);
|
2022-02-08 04:43:33 -06:00
|
|
|
|
sprite.LayerSetShader(FireVisualLayers.Fire, "unshaded");
|
2020-10-26 23:19:46 +01:00
|
|
|
|
}
|
2020-09-22 15:40:04 +02:00
|
|
|
|
|
|
|
|
|
|
public override void OnChangeData(AppearanceComponent component)
|
|
|
|
|
|
{
|
|
|
|
|
|
base.OnChangeData(component);
|
|
|
|
|
|
|
|
|
|
|
|
if (component.TryGetData(FireVisuals.OnFire, out bool onFire))
|
|
|
|
|
|
{
|
|
|
|
|
|
var fireStacks = 0f;
|
|
|
|
|
|
|
|
|
|
|
|
if (component.TryGetData(FireVisuals.FireStacks, out float stacks))
|
|
|
|
|
|
fireStacks = stacks;
|
|
|
|
|
|
|
|
|
|
|
|
SetOnFire(component, onFire, fireStacks);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void SetOnFire(AppearanceComponent component, bool onFire, float fireStacks)
|
|
|
|
|
|
{
|
2021-12-03 15:53:09 +01:00
|
|
|
|
var sprite = IoCManager.Resolve<IEntityManager>().GetComponent<ISpriteComponent>(component.Owner);
|
2020-09-22 15:40:04 +02:00
|
|
|
|
|
2021-03-10 14:48:29 +01:00
|
|
|
|
if (_sprite != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
sprite.LayerSetRSI(FireVisualLayers.Fire, _sprite);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-22 15:40:04 +02:00
|
|
|
|
sprite.LayerSetVisible(FireVisualLayers.Fire, onFire);
|
|
|
|
|
|
|
|
|
|
|
|
if(fireStacks > _fireStackAlternateState && !string.IsNullOrEmpty(_alternateState))
|
|
|
|
|
|
sprite.LayerSetState(FireVisualLayers.Fire, _alternateState);
|
|
|
|
|
|
else
|
|
|
|
|
|
sprite.LayerSetState(FireVisualLayers.Fire, _normalState);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-12-04 11:57:33 +01:00
|
|
|
|
public enum FireVisualLayers : byte
|
2020-09-22 15:40:04 +02:00
|
|
|
|
{
|
|
|
|
|
|
Fire
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|