ApcNet code improvements (#2876)
* Removes per-frame setting of PowerReceiverComponent.Powered * PowerReceiver.SetLoad Co-authored-by: py01 <pyronetics01@gmail.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Content.Server.GameObjects.Components.NodeContainer.NodeGroups;
|
||||
@@ -18,7 +18,11 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents
|
||||
|
||||
void RemoveReceiver(PowerReceiverComponent receiver);
|
||||
|
||||
void UpdateReceiverLoad(int oldLoad, int newLoad);
|
||||
|
||||
public IEntity ProviderOwner { get; }
|
||||
|
||||
public bool HasApcPower { get; }
|
||||
}
|
||||
|
||||
[RegisterComponent]
|
||||
@@ -28,6 +32,9 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents
|
||||
|
||||
public IEntity ProviderOwner => Owner;
|
||||
|
||||
[ViewVariables]
|
||||
public bool HasApcPower => Net.Powered;
|
||||
|
||||
/// <summary>
|
||||
/// The max distance this can transmit power to <see cref="PowerReceiverComponent"/>s from.
|
||||
/// </summary>
|
||||
@@ -49,14 +56,23 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents
|
||||
|
||||
public void AddReceiver(PowerReceiverComponent receiver)
|
||||
{
|
||||
var oldLoad = GetTotalLoad();
|
||||
_linkedReceivers.Add(receiver);
|
||||
Net.UpdatePowerProviderReceivers(this);
|
||||
var newLoad = oldLoad + receiver.Load;
|
||||
Net.UpdatePowerProviderReceivers(this, oldLoad, newLoad);
|
||||
}
|
||||
|
||||
public void RemoveReceiver(PowerReceiverComponent receiver)
|
||||
{
|
||||
var oldLoad = GetTotalLoad();
|
||||
_linkedReceivers.Remove(receiver);
|
||||
Net.UpdatePowerProviderReceivers(this);
|
||||
var newLoad = oldLoad - receiver.Load;
|
||||
Net.UpdatePowerProviderReceivers(this, oldLoad, newLoad);
|
||||
}
|
||||
|
||||
public void UpdateReceiverLoad(int oldLoad, int newLoad)
|
||||
{
|
||||
Net.UpdatePowerProviderReceivers(this, oldLoad, newLoad);
|
||||
}
|
||||
|
||||
public override void ExposeData(ObjectSerializer serializer)
|
||||
@@ -82,8 +98,6 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents
|
||||
{
|
||||
receiver.ClearProvider();
|
||||
}
|
||||
_linkedReceivers = new List<PowerReceiverComponent>();
|
||||
Net.UpdatePowerProviderReceivers(this);
|
||||
foreach (var receiver in receivers)
|
||||
{
|
||||
receiver.TryFindAndSetProvider();
|
||||
@@ -115,19 +129,37 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents
|
||||
|
||||
private void SetPowerTransferRange(int newPowerTransferRange)
|
||||
{
|
||||
var oldLoad = GetTotalLoad();
|
||||
foreach (var receiver in _linkedReceivers.ToArray())
|
||||
{
|
||||
receiver.ClearProvider();
|
||||
}
|
||||
_powerTransferRange = newPowerTransferRange;
|
||||
_linkedReceivers = FindAvailableReceivers();
|
||||
Net.UpdatePowerProviderReceivers(this);
|
||||
var newLoad = GetTotalLoad();
|
||||
Net.UpdatePowerProviderReceivers(this, oldLoad, newLoad);
|
||||
}
|
||||
|
||||
private int GetTotalLoad()
|
||||
{
|
||||
var load = 0;
|
||||
foreach (var receiver in _linkedReceivers)
|
||||
{
|
||||
load += receiver.Load;
|
||||
}
|
||||
return load;
|
||||
}
|
||||
|
||||
private class NullPowerProvider : IPowerProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// It is important that this returns false, so <see cref="PowerReceiverComponent"/>s with a <see cref="NullPowerProvider"/> have no power.
|
||||
/// </summary>
|
||||
public bool HasApcPower => false;
|
||||
|
||||
public void AddReceiver(PowerReceiverComponent receiver) { }
|
||||
public void RemoveReceiver(PowerReceiverComponent receiver) { }
|
||||
public void UpdateReceiverLoad(int oldLoad, int newLoad) { }
|
||||
public IEntity ProviderOwner => default;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user