diff --git a/Content.Server/Plants/Components/RandomPottedPlantComponent.cs b/Content.Server/Plants/Components/RandomPottedPlantComponent.cs index d3e2a42f57..2252c0a24e 100644 --- a/Content.Server/Plants/Components/RandomPottedPlantComponent.cs +++ b/Content.Server/Plants/Components/RandomPottedPlantComponent.cs @@ -1,80 +1,22 @@ -using System.Collections.Generic; -using JetBrains.Annotations; -using Robust.Server.GameObjects; +using Content.Server.Plants.Systems; +using Robust.Shared.Analyzers; using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Random; using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.ViewVariables; namespace Content.Server.Plants.Components { [RegisterComponent] - public class RandomPottedPlantComponent : Component, IMapInit + [Friend(typeof(RandomPottedPlantSystem))] + [ComponentProtoName("RandomPottedPlant")] + public class RandomPottedPlantComponent : Component { - [Dependency] private readonly IEntityManager _entMan = default!; - - public override string Name => "RandomPottedPlant"; - - private static readonly string[] RegularPlantStates; - private static readonly string[] PlasticPlantStates; - + [ViewVariables(VVAccess.ReadOnly)] [DataField("selected")] - private string? _selectedState; + public string? State; + + [ViewVariables(VVAccess.ReadOnly)] [DataField("plastic")] - private bool _plastic; - - // for shared string dict, since we don't define these anywhere in content - [UsedImplicitly] - public static readonly string[] plantIdStrings = - { - "plant-01", "plant-02", "plant-03", "plant-04", "plant-05", - "plant-06", "plant-07", "plant-08", "plant-09", "plant-10", - "plant-11", "plant-12", "plant-13", "plant-14", "plant-15", - "plant-16", "plant-17", "plant-18", "plant-19", "plant-20", - "plant-21", "plant-22", "plant-23", "plant-24", "plant-25", - "plant-26", "plant-27", "plant-28", "plant-29", "plant-30", - }; - - static RandomPottedPlantComponent() - { - // ReSharper disable once StringLiteralTypo - var states = new List {"applebush"}; - - for (var i = 1; i < 25; i++) - { - states.Add($"plant-{i:D2}"); - } - - RegularPlantStates = states.ToArray(); - - states.Clear(); - - for (var i = 26; i < 30; i++) - { - states.Add($"plant-{i:D2}"); - } - - PlasticPlantStates = states.ToArray(); - } - - protected override void Startup() - { - base.Startup(); - - if (_selectedState != null) - { - _entMan.GetComponent(Owner).LayerSetState(0, _selectedState); - } - } - - public void MapInit() - { - var random = IoCManager.Resolve(); - - var list = _plastic ? PlasticPlantStates : RegularPlantStates; - _selectedState = random.Pick(list); - - _entMan.GetComponent(Owner).LayerSetState(0, _selectedState); - } + public bool Plastic; } } diff --git a/Content.Server/Plants/Systems/RandomPottedPlantSystem.cs b/Content.Server/Plants/Systems/RandomPottedPlantSystem.cs new file mode 100644 index 0000000000..0c626073f9 --- /dev/null +++ b/Content.Server/Plants/Systems/RandomPottedPlantSystem.cs @@ -0,0 +1,37 @@ +using Content.Server.Plants.Components; +using Robust.Server.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Random; + +namespace Content.Server.Plants.Systems +{ + public class RandomPottedPlantSystem : EntitySystem + { + [Dependency] private readonly IRobustRandom _random = default!; + + private static readonly string[] RegularPlantStates = + { + "plant-01", "plant-02", "plant-03", "plant-04", "plant-05", + "plant-06", "plant-07", "plant-08", "plant-09", "plant-10", + "plant-11", "plant-12", "plant-13", "plant-14", "plant-15", + "plant-16", "plant-17", "plant-18", "plant-19", "plant-20", + "plant-21", "plant-22", "plant-23", "plant-24", "applebush" + }; + private static readonly string[] PlasticPlantStates = + { + "plant-26", "plant-27", "plant-28", "plant-29" + }; + + public override void Initialize() + { + SubscribeLocalEvent(OnMapInit); + } + + private void OnMapInit(EntityUid uid, RandomPottedPlantComponent component, MapInitEvent args) + { + component.State ??= _random.Pick(component.Plastic ? PlasticPlantStates : RegularPlantStates); + Comp(uid).LayerSetState(0, component.State); + } + } +}