From cfe4a26d1ff7137340d85f60d58ee18b1e44927c Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Tue, 6 Jul 2021 20:56:55 +0200 Subject: [PATCH] Fix AME node updating to fix exceptions. And also make it run less poorly, I guess. --- .../AME/UI/AMEControllerBoundUserInterface.cs | 1 - Content.Client/AME/UI/AMEWindow.cs | 4 -- Content.Server/AME/AMENodeGroup.cs | 64 ++++++------------- .../AME/Components/AMEControllerComponent.cs | 9 --- .../AME/SharedAMEControllerComponent.cs | 1 - 5 files changed, 19 insertions(+), 60 deletions(-) diff --git a/Content.Client/AME/UI/AMEControllerBoundUserInterface.cs b/Content.Client/AME/UI/AMEControllerBoundUserInterface.cs index 2f35cd924f..3765d45fa2 100644 --- a/Content.Client/AME/UI/AMEControllerBoundUserInterface.cs +++ b/Content.Client/AME/UI/AMEControllerBoundUserInterface.cs @@ -27,7 +27,6 @@ namespace Content.Client.AME.UI _window.ToggleInjection.OnPressed += _ => ButtonPressed(UiButton.ToggleInjection); _window.IncreaseFuelButton.OnPressed += _ => ButtonPressed(UiButton.IncreaseFuel); _window.DecreaseFuelButton.OnPressed += _ => ButtonPressed(UiButton.DecreaseFuel); - _window.RefreshPartsButton.OnPressed += _ => ButtonPressed(UiButton.RefreshParts); } /// diff --git a/Content.Client/AME/UI/AMEWindow.cs b/Content.Client/AME/UI/AMEWindow.cs index 94b0e006b5..108806eb55 100644 --- a/Content.Client/AME/UI/AMEWindow.cs +++ b/Content.Client/AME/UI/AMEWindow.cs @@ -16,7 +16,6 @@ namespace Content.Client.AME.UI public Button ToggleInjection { get; set; } public Button IncreaseFuelButton { get; set; } public Button DecreaseFuelButton { get; set; } - public Button RefreshPartsButton { get; set; } public ProgressBar? FuelMeter { get; set; } public Label FuelAmount { get; set; } public Label InjectionAmount { get; set; } @@ -85,7 +84,6 @@ namespace Content.Client.AME.UI { Children = { - (RefreshPartsButton = new Button {Text = Loc.GetString("ame-window-refresh-parts-button"), StyleClasses = {StyleBase.ButtonOpenBoth }, Disabled = true }), new Label { Text = Loc.GetString("ame-window-core-count-label")}, (CoreCount = new Label { Text = "0"}), } @@ -159,8 +157,6 @@ namespace Content.Client.AME.UI InjectionStatus.Text = Loc.GetString("ame-window-engine-injection-status-injecting-label"); } - RefreshPartsButton.Disabled = castState.Injecting; - CoreCount.Text = $"{castState.CoreCount}"; InjectionAmount.Text = $"{castState.InjectionAmount}"; } diff --git a/Content.Server/AME/AMENodeGroup.cs b/Content.Server/AME/AMENodeGroup.cs index c632f39d91..a015d20a72 100644 --- a/Content.Server/AME/AMENodeGroup.cs +++ b/Content.Server/AME/AMENodeGroup.cs @@ -41,64 +41,38 @@ namespace Content.Server.AME { base.LoadNodes(groupNodes); + var mapManager = IoCManager.Resolve(); + var grid = mapManager.GetGrid(GridId); + foreach (var node in groupNodes) { - if (node.Owner.TryGetComponent(out AMEControllerComponent? controller)) + var nodeOwner = node.Owner; + if (nodeOwner.TryGetComponent(out AMEControllerComponent? controller)) { _masterController = controller; } - } - } - public override void RemoveNode(Node node) - { - base.RemoveNode(node); - - RefreshAMENodes(_masterController); - if (_masterController != null && _masterController?.Owner == node.Owner) { _masterController = null; } - } - - public void RefreshAMENodes(AMEControllerComponent? controller) - { - if(_masterController == null && controller != null) - { - _masterController = controller; - } - - foreach (AMEShieldComponent core in _cores) - { - core.UnsetCore(); - } - _cores.Clear(); - - //Check each shield node to see if it meets core criteria - foreach (Node node in Nodes) - { - var nodeOwner = node.Owner; - if (!nodeOwner.TryGetComponent(out var shield)) { continue; } - - var grid = IoCManager.Resolve().GetGrid(nodeOwner.Transform.GridID); - var nodeNeighbors = grid.GetCellsInSquareArea(nodeOwner.Transform.Coordinates, 1) - .Select(sgc => nodeOwner.EntityManager.GetEntity(sgc)) - .Where(entity => entity != nodeOwner) - .Select(entity => entity.TryGetComponent(out var adjshield) ? adjshield : null) - .Where(adjshield => adjshield != null); - - if (nodeNeighbors.Count() >= 8) + if (nodeOwner.TryGetComponent(out AMEShieldComponent? shield)) { - _cores.Add(shield); - } - } + var nodeNeighbors = grid.GetCellsInSquareArea(nodeOwner.Transform.Coordinates, 1) + .Select(sgc => nodeOwner.EntityManager.GetEntity(sgc)) + .Where(entity => entity != nodeOwner && entity.HasComponent()); - foreach (AMEShieldComponent core in _cores) - { - core.SetCore(); + if (nodeNeighbors.Count() >= 8) + { + _cores.Add(shield); + shield.SetCore(); + } + else + { + shield.UnsetCore(); + } + } } } public void UpdateCoreVisuals(int injectionAmount, bool injecting) { - var injectionStrength = CoreCount > 0 ? injectionAmount / CoreCount : 0; foreach (AMEShieldComponent core in _cores) diff --git a/Content.Server/AME/Components/AMEControllerComponent.cs b/Content.Server/AME/Components/AMEControllerComponent.cs index ea65e81f94..54873aa4e8 100644 --- a/Content.Server/AME/Components/AMEControllerComponent.cs +++ b/Content.Server/AME/Components/AMEControllerComponent.cs @@ -212,9 +212,6 @@ namespace Content.Server.AME.Components case UiButton.DecreaseFuel: InjectionAmount = InjectionAmount > 0 ? InjectionAmount -= 2 : 0; break; - case UiButton.RefreshParts: - RefreshParts(); - break; } GetAMENodeGroup()?.UpdateCoreVisuals(InjectionAmount, _injecting); @@ -277,12 +274,6 @@ namespace Content.Server.AME.Components } - private void RefreshParts() - { - GetAMENodeGroup()?.RefreshAMENodes(this); - UpdateUserInterface(); - } - private AMENodeGroup? GetAMENodeGroup() { Owner.TryGetComponent(out NodeContainerComponent? nodeContainer); diff --git a/Content.Shared/AME/SharedAMEControllerComponent.cs b/Content.Shared/AME/SharedAMEControllerComponent.cs index aa65f151f6..162cb32a52 100644 --- a/Content.Shared/AME/SharedAMEControllerComponent.cs +++ b/Content.Shared/AME/SharedAMEControllerComponent.cs @@ -55,7 +55,6 @@ namespace Content.Shared.AME ToggleInjection, IncreaseFuel, DecreaseFuel, - RefreshParts } [Serializable, NetSerializable]