From d1fe278afc7c4e983f4e49d81b066865d34771d9 Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto Date: Mon, 30 Aug 2021 11:49:09 +0200 Subject: [PATCH] Stack components are now entirely logicless. - GetState is handled in SharedStackSystem - Adds friend attributes to the stack components --- Content.Client/Stack/StackComponent.cs | 18 +++++++----------- Content.Client/Stack/StackSystem.cs | 2 +- Content.Server/Stack/StackComponent.cs | 3 ++- Content.Shared/Stacks/SharedStackComponent.cs | 10 +++------- Content.Shared/Stacks/SharedStackSystem.cs | 6 ++++++ 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/Content.Client/Stack/StackComponent.cs b/Content.Client/Stack/StackComponent.cs index c3fa29310b..7dc4e9a880 100644 --- a/Content.Client/Stack/StackComponent.cs +++ b/Content.Client/Stack/StackComponent.cs @@ -4,6 +4,7 @@ using Content.Client.Stylesheets; using Content.Shared.Stacks; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; +using Robust.Shared.Analyzers; using Robust.Shared.GameObjects; using Robust.Shared.Localization; using Robust.Shared.Timing; @@ -11,23 +12,18 @@ using Robust.Shared.ViewVariables; namespace Content.Client.Stack { - [RegisterComponent] + [RegisterComponent, Friend(typeof(StackSystem), typeof(StatusControl))] [ComponentReference(typeof(SharedStackComponent))] public class StackComponent : SharedStackComponent, IItemStatus { - [ViewVariables(VVAccess.ReadWrite)] - private bool _uiUpdateNeeded; + [ViewVariables] + public bool UiUpdateNeeded { get; set; } public Control MakeControl() { return new StatusControl(this); } - public void DirtyUI() - { - _uiUpdateNeeded = true; - } - private sealed class StatusControl : Control { private readonly StackComponent _parent; @@ -39,19 +35,19 @@ namespace Content.Client.Stack _label = new RichTextLabel {StyleClasses = {StyleNano.StyleClassItemStatus}}; AddChild(_label); - parent._uiUpdateNeeded = true; + parent.UiUpdateNeeded = true; } protected override void FrameUpdate(FrameEventArgs args) { base.FrameUpdate(args); - if (!_parent._uiUpdateNeeded) + if (!_parent.UiUpdateNeeded) { return; } - _parent._uiUpdateNeeded = false; + _parent.UiUpdateNeeded = false; _label.SetMarkup(Loc.GetString("comp-stack-status", ("count", _parent.Count))); } diff --git a/Content.Client/Stack/StackSystem.cs b/Content.Client/Stack/StackSystem.cs index 6504e99ee8..756ea5026d 100644 --- a/Content.Client/Stack/StackSystem.cs +++ b/Content.Client/Stack/StackSystem.cs @@ -17,7 +17,7 @@ namespace Content.Client.Stack private void OnStackCountChanged(EntityUid uid, StackComponent component, StackCountChangedEvent args) { // Dirty the UI now that the stack count has changed. - component.DirtyUI(); + component.UiUpdateNeeded = true; } } } diff --git a/Content.Server/Stack/StackComponent.cs b/Content.Server/Stack/StackComponent.cs index 66889c55a5..fb980032e7 100644 --- a/Content.Server/Stack/StackComponent.cs +++ b/Content.Server/Stack/StackComponent.cs @@ -1,11 +1,12 @@ using Content.Shared.Stacks; +using Robust.Shared.Analyzers; using Robust.Shared.GameObjects; using Robust.Shared.ViewVariables; namespace Content.Server.Stack { // TODO: Naming and presentation and such could use some improvement. - [RegisterComponent] + [RegisterComponent, Friend(typeof(StackSystem))] [ComponentReference(typeof(SharedStackComponent))] public class StackComponent : SharedStackComponent { diff --git a/Content.Shared/Stacks/SharedStackComponent.cs b/Content.Shared/Stacks/SharedStackComponent.cs index 7a7153aeb7..51ace8348f 100644 --- a/Content.Shared/Stacks/SharedStackComponent.cs +++ b/Content.Shared/Stacks/SharedStackComponent.cs @@ -1,4 +1,5 @@ using System; +using Robust.Shared.Analyzers; using Robust.Shared.GameObjects; using Robust.Shared.GameStates; using Robust.Shared.Players; @@ -9,7 +10,7 @@ using Robust.Shared.ViewVariables; namespace Content.Shared.Stacks { - [NetworkedComponent()] + [NetworkedComponent, Friend(typeof(SharedStackSystem))] public abstract class SharedStackComponent : Component, ISerializationHooks { public sealed override string Name => "Stack"; @@ -20,7 +21,7 @@ namespace Content.Shared.Stacks /// /// Current stack count. - /// Do NOT set this directly, raise the event instead. + /// Do NOT set this directly, use the method instead. /// [ViewVariables(VVAccess.ReadWrite)] [DataField("count")] @@ -35,11 +36,6 @@ namespace Content.Shared.Stacks [ViewVariables] public int AvailableSpace => MaxCount - Count; - - public override ComponentState GetComponentState(ICommonSession player) - { - return new StackComponentState(Count, MaxCount); - } } [Serializable, NetSerializable] diff --git a/Content.Shared/Stacks/SharedStackSystem.cs b/Content.Shared/Stacks/SharedStackSystem.cs index 58d133d603..02fb549a51 100644 --- a/Content.Shared/Stacks/SharedStackSystem.cs +++ b/Content.Shared/Stacks/SharedStackSystem.cs @@ -13,6 +13,7 @@ namespace Content.Shared.Stacks { base.Initialize(); + SubscribeLocalEvent(OnStackGetState); SubscribeLocalEvent(OnStackHandleState); SubscribeLocalEvent(OnStackStarted); SubscribeLocalEvent(OnStackExamined); @@ -62,6 +63,11 @@ namespace Content.Shared.Stacks RaiseLocalEvent(uid, new StackCountChangedEvent(old, component.Count)); } + private void OnStackGetState(EntityUid uid, SharedStackComponent component, ref ComponentGetState args) + { + args.State = new StackComponentState(component.Count, component.MaxCount); + } + private void OnStackHandleState(EntityUid uid, SharedStackComponent component, ref ComponentHandleState args) { if (args.Current is not StackComponentState cast)