Update UI when the AME node group is changed, fix AME connection issues (#4750)

* Update UI when the AME node group is changed (fixes core count indicator being wrong)

* Fix connection issues between AME controller and cores

* Fix #4365 by properly propagating and clearing AME core injection state

* Fixes #4364
This commit is contained in:
20kdc
2021-10-03 12:33:28 +01:00
committed by GitHub
parent 84940ec5dc
commit b114f4a523
4 changed files with 39 additions and 9 deletions

View File

@@ -46,11 +46,6 @@ namespace Content.Server.AME
foreach (var node in groupNodes) foreach (var node in groupNodes)
{ {
var nodeOwner = node.Owner; var nodeOwner = node.Owner;
if (nodeOwner.TryGetComponent(out AMEControllerComponent? controller))
{
_masterController = controller;
}
if (nodeOwner.TryGetComponent(out AMEShieldComponent? shield)) if (nodeOwner.TryGetComponent(out AMEShieldComponent? shield))
{ {
var nodeNeighbors = grid.GetCellsInSquareArea(nodeOwner.Transform.Coordinates, 1) var nodeNeighbors = grid.GetCellsInSquareArea(nodeOwner.Transform.Coordinates, 1)
@@ -61,6 +56,7 @@ namespace Content.Server.AME
{ {
_cores.Add(shield); _cores.Add(shield);
shield.SetCore(); shield.SetCore();
// Core visuals will be updated later.
} }
else else
{ {
@@ -68,10 +64,36 @@ namespace Content.Server.AME
} }
} }
} }
// Separate to ensure core count is correctly updated.
foreach (var node in groupNodes)
{
var nodeOwner = node.Owner;
if (nodeOwner.TryGetComponent(out AMEControllerComponent? controller))
{
if (_masterController == null)
{
// Has to be the first one, as otherwise IsMasterController will return true on them all for this first update.
_masterController = controller;
}
controller.OnAMENodeGroupUpdate();
}
}
UpdateCoreVisuals();
} }
public void UpdateCoreVisuals(int injectionAmount, bool injecting) public void UpdateCoreVisuals()
{ {
var injectionAmount = 0;
var injecting = false;
if (_masterController != null)
{
injectionAmount = _masterController.InjectionAmount;
injecting = _masterController.Injecting;
}
var injectionStrength = CoreCount > 0 ? injectionAmount / CoreCount : 0; var injectionStrength = CoreCount > 0 ? injectionAmount / CoreCount : 0;
foreach (AMEShieldComponent core in _cores) foreach (AMEShieldComponent core in _cores)

View File

@@ -27,7 +27,8 @@ namespace Content.Server.AME.Components
public class AMEControllerComponent : SharedAMEControllerComponent, IActivate, IInteractUsing public class AMEControllerComponent : SharedAMEControllerComponent, IActivate, IInteractUsing
{ {
[ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(AMEControllerUiKey.Key); [ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(AMEControllerUiKey.Key);
[ViewVariables] private bool _injecting; private bool _injecting;
[ViewVariables] public bool Injecting => _injecting;
[ViewVariables] public int InjectionAmount; [ViewVariables] public int InjectionAmount;
private AppearanceComponent? _appearance; private AppearanceComponent? _appearance;
@@ -137,6 +138,12 @@ namespace Content.Server.AME.Components
UpdateUserInterface(); UpdateUserInterface();
} }
// Used to update core count
public void OnAMENodeGroupUpdate()
{
UpdateUserInterface();
}
private AMEControllerBoundUserInterfaceState GetUserInterfaceState() private AMEControllerBoundUserInterfaceState GetUserInterfaceState()
{ {
var jar = _jarSlot.ContainedEntity; var jar = _jarSlot.ContainedEntity;
@@ -216,7 +223,7 @@ namespace Content.Server.AME.Components
break; break;
} }
GetAMENodeGroup()?.UpdateCoreVisuals(InjectionAmount, _injecting); GetAMENodeGroup()?.UpdateCoreVisuals();
UpdateUserInterface(); UpdateUserInterface();
ClickSound(); ClickSound();

View File

@@ -36,6 +36,7 @@ namespace Content.Server.AME.Components
{ {
_isCore = false; _isCore = false;
_appearance?.SetData(AMEShieldVisuals.Core, "isNotCore"); _appearance?.SetData(AMEShieldVisuals.Core, "isNotCore");
UpdateCoreVisuals(0, false);
} }
public void UpdateCoreVisuals(int injectionStrength, bool injecting) public void UpdateCoreVisuals(int injectionStrength, bool injecting)

View File

@@ -56,7 +56,7 @@
examinable: true examinable: true
nodes: nodes:
ame: ame:
!type:CableDeviceNode !type:AdjacentNode
nodeGroupID: AMEngine nodeGroupID: AMEngine
input: input:
!type:CableDeviceNode !type:CableDeviceNode