Power improvements:

* crashes fixed
* made lights an RSI.
This commit is contained in:
Pieter-Jan Briers
2018-05-27 21:45:31 +02:00
parent 89d8208abd
commit e36033a3ac
12 changed files with 99 additions and 46 deletions

View File

@@ -129,7 +129,7 @@ namespace Content.Server.GameObjects.Components.Power
}
}
public override void OnRemove()
public override void Shutdown()
{
if (Owner.TryGetComponent(out PowerNodeComponent node))
{
@@ -143,20 +143,25 @@ namespace Content.Server.GameObjects.Components.Power
node.OnPowernetRegenerate -= PowernetRegenerate;
}
base.OnRemove();
if (Provider != null)
{
Provider.RemoveDevice(this);
}
base.Shutdown();
}
public override void LoadParameters(YamlMappingNode mapping)
{
if (mapping.TryGetNode("Drawtype", out YamlNode node))
if (mapping.TryGetNode("drawtype", out YamlNode node))
{
DrawType = node.AsEnum<DrawTypes>();
}
if (mapping.TryGetNode("Load", out node))
if (mapping.TryGetNode("load", out node))
{
Load = node.AsFloat();
}
if (mapping.TryGetNode("Priority", out node))
if (mapping.TryGetNode("priority", out node))
{
Priority = node.AsEnum<Powernet.Priority>();
}

View File

@@ -27,7 +27,7 @@ namespace Content.Server.GameObjects.Components.Power
public override void LoadParameters(YamlMappingNode mapping)
{
if (mapping.TryGetNode("Supply", out YamlNode node))
if (mapping.TryGetNode("supply", out YamlNode node))
{
Supply = node.AsFloat();
}

View File

@@ -31,27 +31,38 @@ namespace Content.Server.GameObjects.Components.Power
/// </summary>
public SortedSet<PowerDeviceComponent> DeviceLoadList = new SortedSet<PowerDeviceComponent>(new Powernet.DevicePriorityCompare());
/// <summary>
/// List of devices in range that we "advertised" to.
/// </summary>
public HashSet<PowerDeviceComponent> AdvertisedDevices = new HashSet<PowerDeviceComponent>();
public List<PowerDeviceComponent> DepoweredDevices = new List<PowerDeviceComponent>();
public override Powernet.Priority Priority { get; protected set; } = Powernet.Priority.Provider;
public override void OnRemove()
public PowerProviderComponent()
{
base.OnRemove();
Load = 0;
}
foreach (var device in DeviceLoadList)
public override void Shutdown()
{
base.Shutdown();
foreach (var device in AdvertisedDevices.ToList())
{
device.RemoveProvider(this);
}
AdvertisedDevices.Clear();
}
public override void LoadParameters(YamlMappingNode mapping)
{
if (mapping.TryGetNode("Range", out YamlNode node))
if (mapping.TryGetNode("range", out YamlNode node))
{
PowerRange = node.AsInt();
}
if (mapping.TryGetNode("Priority", out node))
if (mapping.TryGetNode("priority", out node))
{
Priority = node.AsEnum<Powernet.Priority>();
}
@@ -139,7 +150,11 @@ namespace Content.Server.GameObjects.Components.Power
//Make sure the device can accept power providers to give it power
if (device.DrawType == DrawTypes.Provider || device.DrawType == DrawTypes.Both)
{
device.AddProvider(this);
if (!AdvertisedDevices.Contains(device))
{
device.AddProvider(this);
AdvertisedDevices.Add(device);
}
}
}
}
@@ -150,10 +165,11 @@ namespace Content.Server.GameObjects.Components.Power
base.PowernetDisconnect(sender, eventarg);
//We don't want to make the devices under us think we're still a valid provider if we have no powernet to connect to
foreach (var device in DeviceLoadList.ToList())
foreach (var device in AdvertisedDevices.ToList())
{
device.RemoveProvider(this);
}
AdvertisedDevices.Clear();
}
/// <summary>
@@ -194,7 +210,7 @@ namespace Content.Server.GameObjects.Components.Power
else
{
var name = device.Owner.Prototype.Name;
Logger.Info(String.Format("We tried to remove a device twice from the same {0} somehow, prototype {1}", Name, name));
Logger.WarningS("power", "We tried to remove a device twice from the same {0} somehow, prototype {1}", Name, name);
}
}
}

View File

@@ -60,23 +60,23 @@ namespace Content.Server.GameObjects.Components.Power
public override void LoadParameters(YamlMappingNode mapping)
{
if (mapping.TryGetNode("Capacity", out YamlNode node))
if (mapping.TryGetNode("capacity", out YamlNode node))
{
Capacity = node.AsFloat();
}
if (mapping.TryGetNode("Charge", out node))
if (mapping.TryGetNode("charge", out node))
{
Charge = node.AsFloat();
}
if (mapping.TryGetNode("ChargeRate", out node))
if (mapping.TryGetNode("chargerate", out node))
{
ChargeRate = node.AsFloat();
}
if (mapping.TryGetNode("DistributionRate", out node))
if (mapping.TryGetNode("distributionrate", out node))
{
DistributionRate = node.AsFloat();
}
if (mapping.TryGetNode("ChargePowernet", out node))
if (mapping.TryGetNode("chargepowernet", out node))
{
_chargepowernet = node.AsBool();
}

View File

@@ -19,12 +19,12 @@ namespace Content.Server.GameObjects.Components.Power
{
if (args.Powered)
{
sprite.LayerSetTexture(0, "Objects/wall_light.png");
sprite.LayerSetState(0, "on");
light.State = LightState.On;
}
else
{
sprite.LayerSetTexture(0, "Objects/wall_light_off.png");
sprite.LayerSetState(0, "off");
light.State = LightState.Off;
}
};

View File

@@ -303,7 +303,7 @@ namespace Content.Server.GameObjects.Components.Power
else
{
var name = device.Owner.Prototype.Name;
Logger.Info(String.Format("We tried to remove a device twice from the same powernet somehow, prototype {0}", name));
Logger.Info("We tried to remove a device twice from the same powernet somehow, prototype {0}", name);
}
}