using SS14.Shared.Serialization;
using SS14.Shared.ViewVariables;
namespace Content.Server.GameObjects.Components.Power
{
///
/// Feeds energy from the powernet and may have the ability to supply back into it
///
public class PowerStorageNetComponent : PowerStorageComponent
{
public override string Name => "PowerStorage";
private bool _chargePowernet = false;
///
/// Do we distribute power into the powernet from our stores if the powernet requires it?
///
[ViewVariables(VVAccess.ReadWrite)]
public bool ChargePowernet
{
get => _chargePowernet;
set
{
_chargePowernet = value;
if (Owner.TryGetComponent(out PowerNodeComponent node))
{
node.Parent?.UpdateStorageType(this);
}
}
}
public override void ExposeData(ObjectSerializer serializer)
{
base.ExposeData(serializer);
serializer.DataField(ref _chargePowernet, "chargepowernet", false);
}
public override void OnAdd()
{
base.OnAdd();
if (!Owner.TryGetComponent(out PowerNodeComponent node))
{
Owner.AddComponent();
node = Owner.GetComponent();
}
node.OnPowernetConnect += PowernetConnect;
node.OnPowernetDisconnect += PowernetDisconnect;
node.OnPowernetRegenerate += PowernetRegenerate;
}
public override void OnRemove()
{
if (Owner.TryGetComponent(out PowerNodeComponent node))
{
if (node.Parent != null)
{
node.Parent.RemovePowerStorage(this);
}
node.OnPowernetConnect -= PowernetConnect;
node.OnPowernetDisconnect -= PowernetDisconnect;
node.OnPowernetRegenerate -= PowernetRegenerate;
}
base.OnRemove();
}
///
/// Node has become anchored to a powernet
///
///
///
private void PowernetConnect(object sender, PowernetEventArgs eventarg)
{
eventarg.Powernet.AddPowerStorage(this);
}
///
/// Node has had its powernet regenerated
///
///
///
private void PowernetRegenerate(object sender, PowernetEventArgs eventarg)
{
eventarg.Powernet.AddPowerStorage(this);
}
///
/// Node has become unanchored from a powernet
///
///
///
private void PowernetDisconnect(object sender, PowernetEventArgs eventarg)
{
eventarg.Powernet.RemovePowerStorage(this);
}
}
}