2019-04-15 21:11:38 -06:00
|
|
|
|
using Robust.Shared.GameObjects;
|
|
|
|
|
|
using Robust.Shared.Serialization;
|
|
|
|
|
|
using Robust.Shared.ViewVariables;
|
2018-02-03 22:35:42 -06:00
|
|
|
|
|
|
|
|
|
|
namespace Content.Server.GameObjects.Components.Power
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Component that creates power and supplies it to the powernet
|
|
|
|
|
|
/// </summary>
|
2019-07-31 15:02:36 +02:00
|
|
|
|
[RegisterComponent]
|
2018-02-03 22:35:42 -06:00
|
|
|
|
public class PowerGeneratorComponent : Component
|
|
|
|
|
|
{
|
|
|
|
|
|
public override string Name => "PowerGenerator";
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Power supply from this entity
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private float _supply = 1000; //arbitrary initial magic number to start
|
2020-04-20 09:44:11 +02:00
|
|
|
|
[ViewVariables(VVAccess.ReadWrite)]
|
2018-02-03 22:35:42 -06:00
|
|
|
|
public float Supply
|
|
|
|
|
|
{
|
|
|
|
|
|
get => _supply;
|
|
|
|
|
|
set { UpdateSupply(value); }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-07-26 23:38:16 +02:00
|
|
|
|
public override void ExposeData(ObjectSerializer serializer)
|
2018-02-03 22:35:42 -06:00
|
|
|
|
{
|
2018-07-26 23:38:16 +02:00
|
|
|
|
base.ExposeData(serializer);
|
|
|
|
|
|
|
|
|
|
|
|
serializer.DataField(ref _supply, "supply", 1000);
|
2018-02-03 22:35:42 -06:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-24 11:48:23 -08:00
|
|
|
|
public override void OnAdd()
|
2018-02-03 22:35:42 -06:00
|
|
|
|
{
|
2018-02-24 11:48:23 -08:00
|
|
|
|
base.OnAdd();
|
2018-02-03 22:35:42 -06:00
|
|
|
|
|
2018-02-24 11:48:23 -08:00
|
|
|
|
if (!Owner.TryGetComponent(out PowerNodeComponent node))
|
2018-02-03 22:35:42 -06:00
|
|
|
|
{
|
2018-02-24 11:48:23 -08:00
|
|
|
|
Owner.AddComponent<PowerNodeComponent>();
|
2018-03-09 10:59:19 -06:00
|
|
|
|
node = Owner.GetComponent<PowerNodeComponent>();
|
2018-02-03 22:35:42 -06:00
|
|
|
|
}
|
|
|
|
|
|
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.RemoveGenerator(this);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
node.OnPowernetConnect -= PowernetConnect;
|
|
|
|
|
|
node.OnPowernetDisconnect -= PowernetDisconnect;
|
|
|
|
|
|
node.OnPowernetRegenerate -= PowernetRegenerate;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
base.OnRemove();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void UpdateSupply(float value)
|
|
|
|
|
|
{
|
|
|
|
|
|
_supply = value;
|
|
|
|
|
|
var node = Owner.GetComponent<PowerNodeComponent>();
|
2020-05-21 20:08:03 +01:00
|
|
|
|
node?.Parent?.UpdateGenerator(this);
|
2018-02-03 22:35:42 -06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Node has become anchored to a powernet
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="eventarg"></param>
|
|
|
|
|
|
private void PowernetConnect(object sender, PowernetEventArgs eventarg)
|
|
|
|
|
|
{
|
|
|
|
|
|
eventarg.Powernet.AddGenerator(this);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Node has had its powernet regenerated
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="eventarg"></param>
|
|
|
|
|
|
private void PowernetRegenerate(object sender, PowernetEventArgs eventarg)
|
|
|
|
|
|
{
|
|
|
|
|
|
eventarg.Powernet.AddGenerator(this);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Node has become unanchored from a powernet
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="eventarg"></param>
|
|
|
|
|
|
private void PowernetDisconnect(object sender, PowernetEventArgs eventarg)
|
|
|
|
|
|
{
|
|
|
|
|
|
eventarg.Powernet.RemoveGenerator(this);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|