From 0815050b2a09ed7ff2c7cf046f22b1ccbc0d0b59 Mon Sep 17 00:00:00 2001 From: DamianX Date: Fri, 6 Sep 2019 10:05:17 +0200 Subject: [PATCH] Horrendously makes PowerDevice connect to the closest Provider (#326) * Somewhat decently makes PowerDevice connect to the closest Provider * Fix NullRef on server shutdown * Fix null reference * piss * revert bad fix --- .../GameObjects/Components/Power/PowerDevice.cs | 16 ++++++++++++++++ .../Components/Power/PowerProviderComponent.cs | 8 ++++++++ 2 files changed, 24 insertions(+) diff --git a/Content.Server/GameObjects/Components/Power/PowerDevice.cs b/Content.Server/GameObjects/Components/Power/PowerDevice.cs index 33d0c5c054..5309a620a2 100644 --- a/Content.Server/GameObjects/Components/Power/PowerDevice.cs +++ b/Content.Server/GameObjects/Components/Power/PowerDevice.cs @@ -3,7 +3,10 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.IoC; +using Robust.Shared.Log; using Robust.Shared.Serialization; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; @@ -18,6 +21,17 @@ namespace Content.Server.GameObjects.Components.Power { public override string Name => "PowerDevice"; + public override void Startup() + { + base.Startup(); + if (_drawType != DrawTypes.Node) + { + var componentMgr = IoCManager.Resolve(); + AvailableProviders = componentMgr.GetAllComponents().Where(x => x.CanServiceDevice(this)).ToList(); + ConnectToBestProvider(); + } + } + /// /// The method of draw we will try to use to place our load set via component parameter, defaults to using power providers /// @@ -161,6 +175,8 @@ namespace Content.Server.GameObjects.Components.Power node.OnPowernetRegenerate -= PowernetRegenerate; } + Connected = DrawTypes.None; + if (Provider != null) { Provider = null; diff --git a/Content.Server/GameObjects/Components/Power/PowerProviderComponent.cs b/Content.Server/GameObjects/Components/Power/PowerProviderComponent.cs index 3d91440636..4d0d21a4f4 100644 --- a/Content.Server/GameObjects/Components/Power/PowerProviderComponent.cs +++ b/Content.Server/GameObjects/Components/Power/PowerProviderComponent.cs @@ -269,5 +269,13 @@ namespace Content.Server.GameObjects.Components.Power device.Owner, Owner); } } + + /// + /// Whether the device can be serviced by this provider. + /// + public bool CanServiceDevice(PowerDeviceComponent device) + { + return (device.Owner.Transform.WorldPosition - Owner.Transform.WorldPosition).LengthSquared <= _range; + } } }