NodeGroups are dirtied when one of the nodes' snapgrid position changes.

Adds method to add behavior to a node when its snapgrid position changes.
This commit is contained in:
Vera Aguilera Puerto
2021-06-01 11:48:24 +02:00
parent 59a26102c5
commit 20243052cb
3 changed files with 22 additions and 1 deletions

View File

@@ -16,7 +16,7 @@ namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups
.GetAllComponents<TNetConnector>() .GetAllComponents<TNetConnector>()
.Where(powerComp => (NodeGroupID) powerComp.Voltage == node.NodeGroupID) .Where(powerComp => (NodeGroupID) powerComp.Voltage == node.NodeGroupID)
.ToList(); .ToList();
_netConnectorComponents.Add(node, newNetConnectorComponents); _netConnectorComponents[node] = newNetConnectorComponents;
foreach (var netConnectorComponent in newNetConnectorComponents) foreach (var netConnectorComponent in newNetConnectorComponents)
{ {
SetNetConnectorNet(netConnectorComponent); SetNetConnectorNet(netConnectorComponent);

View File

@@ -73,6 +73,10 @@ namespace Content.Server.GameObjects.Components.NodeContainer.Nodes
} }
} }
public virtual void OnSnapGridMove()
{
}
public virtual void OnContainerShutdown() public virtual void OnContainerShutdown()
{ {
_deleting = true; _deleting = true;

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using Content.Server.GameObjects.Components.NodeContainer;
using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Content.Server.GameObjects.Components.NodeContainer.NodeGroups;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Shared.GameObjects; using Robust.Shared.GameObjects;
@@ -10,6 +11,22 @@ namespace Content.Server.GameObjects.EntitySystems
{ {
private readonly HashSet<INodeGroup> _dirtyNodeGroups = new(); private readonly HashSet<INodeGroup> _dirtyNodeGroups = new();
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<NodeContainerComponent, SnapGridPositionChangedEvent>(OnSnapGridPositionChanged);
}
private void OnSnapGridPositionChanged(EntityUid uid, NodeContainerComponent component, SnapGridPositionChangedEvent args)
{
foreach (var node in component.Nodes.Values)
{
node.OnSnapGridMove();
AddDirtyNodeGroup(node.NodeGroup);
}
}
public void AddDirtyNodeGroup(INodeGroup nodeGroup) public void AddDirtyNodeGroup(INodeGroup nodeGroup)
{ {
_dirtyNodeGroups.Add(nodeGroup); _dirtyNodeGroups.Add(nodeGroup);