Files
tbd-station-14/Content.Client/GameObjects/Components/Gravity/GravityGeneratorVisualizer.cs
DrSmugleaf 5c0cf1b1a0 Use 'new' expression in places where the type is evident for content (#2590)
* Content.Client

* Content.Benchmarks

* Content.IntegrationTests

* Content.Server

* Content.Server.Database

* Content.Shared

* Content.Tests

* Merge fixes

Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2020-11-27 21:00:49 +11:00

70 lines
2.3 KiB
C#

#nullable enable
using Content.Shared.GameObjects.Components.Gravity;
using Robust.Client.GameObjects;
using Robust.Shared.Interfaces.GameObjects;
using Robust.Shared.Utility;
using System;
using System.Collections.Generic;
using YamlDotNet.RepresentationModel;
namespace Content.Client.GameObjects.Components.Gravity
{
public class GravityGeneratorVisualizer : AppearanceVisualizer
{
private readonly Dictionary<GravityGeneratorStatus, string> _spriteMap = new();
public override void InitializeEntity(IEntity entity)
{
base.InitializeEntity(entity);
if (!entity.TryGetComponent(out SpriteComponent? sprite))
return;
sprite.LayerMapReserveBlank(GravityGeneratorVisualLayers.Base);
sprite.LayerMapReserveBlank(GravityGeneratorVisualLayers.Core);
}
public override void LoadData(YamlMappingNode node)
{
base.LoadData(node);
// Get Sprites for each status
foreach (var status in (GravityGeneratorStatus[]) Enum.GetValues(typeof(GravityGeneratorStatus)))
{
if (node.TryGetNode(status.ToString().ToLower(), out var sprite))
{
_spriteMap[status] = sprite.AsString();
}
}
}
public override void OnChangeData(AppearanceComponent component)
{
base.OnChangeData(component);
var sprite = component.Owner.GetComponent<SpriteComponent>();
if (component.TryGetData(GravityGeneratorVisuals.State, out GravityGeneratorStatus state))
{
if (_spriteMap.TryGetValue(state, out var spriteState))
{
var layer = sprite.LayerMapGet(GravityGeneratorVisualLayers.Base);
sprite.LayerSetState(layer, spriteState);
}
}
if (component.TryGetData(GravityGeneratorVisuals.CoreVisible, out bool visible))
{
var layer = sprite.LayerMapGet(GravityGeneratorVisualLayers.Core);
sprite.LayerSetVisible(layer, visible);
}
}
public enum GravityGeneratorVisualLayers
{
Base,
Core
}
}
}