Pow3r: stage 1 (#4208)

Co-authored-by: 20kdc <asdd2808@gmail.com>
This commit is contained in:
Pieter-Jan Briers
2021-07-04 18:11:52 +02:00
committed by GitHub
parent ea60a81fdf
commit 103bc19508
212 changed files with 8584 additions and 4426 deletions

View File

@@ -0,0 +1,99 @@
using System.Collections.Generic;
using System.Linq;
using Content.Shared.NodeContainer;
using JetBrains.Annotations;
using Robust.Client.Graphics;
using Robust.Client.Input;
using Robust.Client.ResourceManagement;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Map;
namespace Content.Client.NodeContainer
{
[UsedImplicitly]
public sealed class NodeGroupSystem : EntitySystem
{
[Dependency] private readonly IOverlayManager _overlayManager = default!;
[Dependency] private readonly IEntityLookup _entityLookup = default!;
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IInputManager _inputManager = default!;
[Dependency] private readonly IEyeManager _eyeManager = default!;
[Dependency] private readonly IResourceCache _resourceCache = default!;
public bool VisEnabled { get; private set; }
public Dictionary<int, NodeVis.GroupData> Groups { get; } = new();
public HashSet<string> Filtered { get; } = new();
public Dictionary<EntityUid, (NodeVis.GroupData group, NodeVis.NodeDatum node)[]>
Entities { get; private set; } = new();
public Dictionary<(int group, int node), NodeVis.NodeDatum> NodeLookup { get; private set; } = new();
public override void Initialize()
{
base.Initialize();
SubscribeNetworkEvent<NodeVis.MsgData>(DataMsgHandler);
}
public override void Shutdown()
{
base.Shutdown();
_overlayManager.RemoveOverlay<NodeVisualizationOverlay>();
}
private void DataMsgHandler(NodeVis.MsgData ev)
{
if (!VisEnabled)
return;
foreach (var deletion in ev.GroupDeletions)
{
Groups.Remove(deletion);
}
foreach (var group in ev.Groups)
{
Groups.Add(group.NetId, group);
}
Entities = Groups.Values
.SelectMany(g => g.Nodes, (data, nodeData) => (data, nodeData))
.GroupBy(n => n.nodeData.Entity)
.ToDictionary(g => g.Key, g => g.ToArray());
NodeLookup = Groups.Values
.SelectMany(g => g.Nodes, (data, nodeData) => (data, nodeData))
.ToDictionary(n => (n.data.NetId, n.nodeData.NetId), n => n.nodeData);
}
public void SetVisEnabled(bool enabled)
{
VisEnabled = enabled;
RaiseNetworkEvent(new NodeVis.MsgEnable(enabled));
if (enabled)
{
var overlay = new NodeVisualizationOverlay(
this,
_entityLookup,
_mapManager,
_inputManager,
_eyeManager,
_resourceCache,
EntityManager);
_overlayManager.AddOverlay(overlay);
}
else
{
Groups.Clear();
Entities.Clear();
}
}
}
}