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)
|
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)
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user