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:
@@ -46,11 +46,6 @@ namespace Content.Server.AME
|
||||
foreach (var node in groupNodes)
|
||||
{
|
||||
var nodeOwner = node.Owner;
|
||||
if (nodeOwner.TryGetComponent(out AMEControllerComponent? controller))
|
||||
{
|
||||
_masterController = controller;
|
||||
}
|
||||
|
||||
if (nodeOwner.TryGetComponent(out AMEShieldComponent? shield))
|
||||
{
|
||||
var nodeNeighbors = grid.GetCellsInSquareArea(nodeOwner.Transform.Coordinates, 1)
|
||||
@@ -61,6 +56,7 @@ namespace Content.Server.AME
|
||||
{
|
||||
_cores.Add(shield);
|
||||
shield.SetCore();
|
||||
// Core visuals will be updated later.
|
||||
}
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateCoreVisuals(int injectionAmount, bool injecting)
|
||||
UpdateCoreVisuals();
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
foreach (AMEShieldComponent core in _cores)
|
||||
|
||||
@@ -27,7 +27,8 @@ namespace Content.Server.AME.Components
|
||||
public class AMEControllerComponent : SharedAMEControllerComponent, IActivate, IInteractUsing
|
||||
{
|
||||
[ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(AMEControllerUiKey.Key);
|
||||
[ViewVariables] private bool _injecting;
|
||||
private bool _injecting;
|
||||
[ViewVariables] public bool Injecting => _injecting;
|
||||
[ViewVariables] public int InjectionAmount;
|
||||
|
||||
private AppearanceComponent? _appearance;
|
||||
@@ -137,6 +138,12 @@ namespace Content.Server.AME.Components
|
||||
UpdateUserInterface();
|
||||
}
|
||||
|
||||
// Used to update core count
|
||||
public void OnAMENodeGroupUpdate()
|
||||
{
|
||||
UpdateUserInterface();
|
||||
}
|
||||
|
||||
private AMEControllerBoundUserInterfaceState GetUserInterfaceState()
|
||||
{
|
||||
var jar = _jarSlot.ContainedEntity;
|
||||
@@ -216,7 +223,7 @@ namespace Content.Server.AME.Components
|
||||
break;
|
||||
}
|
||||
|
||||
GetAMENodeGroup()?.UpdateCoreVisuals(InjectionAmount, _injecting);
|
||||
GetAMENodeGroup()?.UpdateCoreVisuals();
|
||||
|
||||
UpdateUserInterface();
|
||||
ClickSound();
|
||||
|
||||
@@ -36,6 +36,7 @@ namespace Content.Server.AME.Components
|
||||
{
|
||||
_isCore = false;
|
||||
_appearance?.SetData(AMEShieldVisuals.Core, "isNotCore");
|
||||
UpdateCoreVisuals(0, false);
|
||||
}
|
||||
|
||||
public void UpdateCoreVisuals(int injectionStrength, bool injecting)
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
examinable: true
|
||||
nodes:
|
||||
ame:
|
||||
!type:CableDeviceNode
|
||||
!type:AdjacentNode
|
||||
nodeGroupID: AMEngine
|
||||
input:
|
||||
!type:CableDeviceNode
|
||||
|
||||
Reference in New Issue
Block a user