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 @@
|
||||
#nullable enable
|
||||
#nullable enable
|
||||
using System;
|
||||
using Content.Server.GameObjects.Components.NodeContainer;
|
||||
using Content.Server.GameObjects.Components.NodeContainer.NodeGroups;
|
||||
@@ -34,9 +34,11 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents
|
||||
[ViewVariables]
|
||||
public bool Powered => (HasApcPower || !NeedsPower) && !PowerDisabled;
|
||||
|
||||
/// <summary>
|
||||
/// If this is being powered by an Apc.
|
||||
/// </summary>
|
||||
[ViewVariables]
|
||||
public bool HasApcPower { get => _hasApcPower; set => SetHasApcPower(value); }
|
||||
private bool _hasApcPower;
|
||||
public bool HasApcPower { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// The max distance from a <see cref="PowerProviderComponent"/> that this can receive power from.
|
||||
@@ -103,7 +105,7 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnRemove()
|
||||
public override void OnRemove()
|
||||
{
|
||||
if (_physicsComponent != null)
|
||||
{
|
||||
@@ -121,6 +123,14 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents
|
||||
}
|
||||
}
|
||||
|
||||
public void ApcPowerChanged()
|
||||
{
|
||||
var oldPowered = Powered;
|
||||
HasApcPower = Provider.HasApcPower;
|
||||
if (Powered != oldPowered)
|
||||
OnNewPowerState();
|
||||
}
|
||||
|
||||
private bool TryFindAvailableProvider(out IPowerProvider foundProvider)
|
||||
{
|
||||
var nearbyEntities = _serverEntityManager
|
||||
@@ -152,7 +162,7 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents
|
||||
_provider.RemoveReceiver(this);
|
||||
_provider = PowerProviderComponent.NullProvider;
|
||||
NeedsProvider = true;
|
||||
HasApcPower = false;
|
||||
ApcPowerChanged();
|
||||
}
|
||||
|
||||
private void SetProvider(IPowerProvider newProvider)
|
||||
@@ -161,16 +171,7 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents
|
||||
_provider = newProvider;
|
||||
newProvider.AddReceiver(this);
|
||||
NeedsProvider = false;
|
||||
}
|
||||
|
||||
private void SetHasApcPower(bool newHasApcPower)
|
||||
{
|
||||
var oldPowered = Powered;
|
||||
_hasApcPower = newHasApcPower;
|
||||
if (oldPowered != Powered)
|
||||
{
|
||||
OnNewPowerState();
|
||||
}
|
||||
ApcPowerChanged();
|
||||
}
|
||||
|
||||
private void SetPowerReceptionRange(int newPowerReceptionRange)
|
||||
@@ -182,6 +183,7 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents
|
||||
|
||||
private void SetLoad(int newLoad)
|
||||
{
|
||||
Provider.UpdateReceiverLoad(Load, newLoad);
|
||||
_load = newLoad;
|
||||
}
|
||||
|
||||
@@ -228,10 +230,10 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents
|
||||
ClearProvider();
|
||||
}
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Adds some markup to the examine text of whatever object is using this component to tell you if it's powered or not, even if it doesn't have an icon state to do this for you.
|
||||
///</summary>
|
||||
|
||||
public void Examine(FormattedMessage message, bool inDetailsRange)
|
||||
{
|
||||
message.AddMarkup(Loc.GetString("It appears to be {0}.", Powered ? "[color=darkgreen]powered[/color]" : "[color=darkred]un-powered[/color]"));
|
||||
|
||||
Reference in New Issue
Block a user