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; + } } }