Fix ApcPowerReceiverComponent deletion (#5031)
Co-authored-by: Julian Giebel <j.giebel@netrocks.info>
This commit is contained in:
@@ -35,6 +35,8 @@ namespace Content.Server.Power.Components
|
|||||||
[DataField("powerLoad")]
|
[DataField("powerLoad")]
|
||||||
public float Load { get => NetworkLoad.DesiredPower; set => NetworkLoad.DesiredPower = value; }
|
public float Load { get => NetworkLoad.DesiredPower; set => NetworkLoad.DesiredPower = value; }
|
||||||
|
|
||||||
|
public ApcPowerProviderComponent? Provider = null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// When false, causes this to appear powered even if not receiving power from an Apc.
|
/// When false, causes this to appear powered even if not receiving power from an Apc.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -68,6 +70,13 @@ namespace Content.Server.Power.Components
|
|||||||
DesiredPower = 5
|
DesiredPower = 5
|
||||||
};
|
};
|
||||||
|
|
||||||
|
protected override void OnRemove()
|
||||||
|
{
|
||||||
|
Provider?.RemoveReceiver(this);
|
||||||
|
|
||||||
|
base.OnRemove();
|
||||||
|
}
|
||||||
|
|
||||||
public void ApcPowerChanged()
|
public void ApcPowerChanged()
|
||||||
{
|
{
|
||||||
OnNewPowerState();
|
OnNewPowerState();
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ namespace Content.Server.Power.EntitySystems
|
|||||||
|
|
||||||
foreach (var entity in nearbyEntities)
|
foreach (var entity in nearbyEntities)
|
||||||
{
|
{
|
||||||
if (entity.TryGetComponent<ExtensionCableReceiverComponent>(out var receiver) &&
|
if (EntityManager.TryGetComponent<ExtensionCableReceiverComponent>(entity.Uid, out var receiver) &&
|
||||||
receiver.Connectable &&
|
receiver.Connectable &&
|
||||||
receiver.Provider == null &&
|
receiver.Provider == null &&
|
||||||
entity.Transform.Coordinates.TryDistance(owner.EntityManager, owner.Transform.Coordinates, out var distance) &&
|
entity.Transform.Coordinates.TryDistance(owner.EntityManager, owner.Transform.Coordinates, out var distance) &&
|
||||||
|
|||||||
@@ -12,17 +12,37 @@ namespace Content.Server.Power.EntitySystems
|
|||||||
SubscribeLocalEvent<ApcPowerReceiverComponent, ExtensionCableSystem.ProviderConnectedEvent>(OnProviderConnected);
|
SubscribeLocalEvent<ApcPowerReceiverComponent, ExtensionCableSystem.ProviderConnectedEvent>(OnProviderConnected);
|
||||||
SubscribeLocalEvent<ApcPowerReceiverComponent, ExtensionCableSystem.ProviderDisconnectedEvent>(OnProviderDisconnected);
|
SubscribeLocalEvent<ApcPowerReceiverComponent, ExtensionCableSystem.ProviderDisconnectedEvent>(OnProviderDisconnected);
|
||||||
|
|
||||||
|
SubscribeLocalEvent<ApcPowerProviderComponent, ComponentShutdown>(OnProviderShutdown);
|
||||||
SubscribeLocalEvent<ApcPowerProviderComponent, ExtensionCableSystem.ReceiverConnectedEvent>(OnReceiverConnected);
|
SubscribeLocalEvent<ApcPowerProviderComponent, ExtensionCableSystem.ReceiverConnectedEvent>(OnReceiverConnected);
|
||||||
SubscribeLocalEvent<ApcPowerProviderComponent, ExtensionCableSystem.ReceiverDisconnectedEvent>(OnReceiverDisconnected);
|
SubscribeLocalEvent<ApcPowerProviderComponent, ExtensionCableSystem.ReceiverDisconnectedEvent>(OnReceiverDisconnected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnProviderShutdown(EntityUid uid, ApcPowerProviderComponent component, ComponentShutdown args)
|
||||||
|
{
|
||||||
|
foreach (var receiver in component.LinkedReceivers)
|
||||||
|
{
|
||||||
|
receiver.NetworkLoad.LinkedNetwork = default;
|
||||||
|
component.Net?.QueueNetworkReconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
component.LinkedReceivers.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
private void OnProviderConnected(EntityUid uid, ApcPowerReceiverComponent receiver, ExtensionCableSystem.ProviderConnectedEvent args)
|
private void OnProviderConnected(EntityUid uid, ApcPowerReceiverComponent receiver, ExtensionCableSystem.ProviderConnectedEvent args)
|
||||||
{
|
{
|
||||||
|
var providerUid = args.Provider.Owner.Uid;
|
||||||
|
if (!EntityManager.TryGetComponent<ApcPowerProviderComponent>(providerUid, out var provider))
|
||||||
|
return;
|
||||||
|
|
||||||
|
receiver.Provider = provider;
|
||||||
|
|
||||||
ProviderChanged(receiver);
|
ProviderChanged(receiver);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnProviderDisconnected(EntityUid uid, ApcPowerReceiverComponent receiver, ExtensionCableSystem.ProviderDisconnectedEvent args)
|
private void OnProviderDisconnected(EntityUid uid, ApcPowerReceiverComponent receiver, ExtensionCableSystem.ProviderDisconnectedEvent args)
|
||||||
{
|
{
|
||||||
|
receiver.Provider = null;
|
||||||
|
|
||||||
ProviderChanged(receiver);
|
ProviderChanged(receiver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user