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

View File

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

View File

@@ -31,27 +31,38 @@ namespace Content.Server.GameObjects.Components.Power
/// </summary> /// </summary>
public SortedSet<PowerDeviceComponent> DeviceLoadList = new SortedSet<PowerDeviceComponent>(new Powernet.DevicePriorityCompare()); 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 List<PowerDeviceComponent> DepoweredDevices = new List<PowerDeviceComponent>();
public override Powernet.Priority Priority { get; protected set; } = Powernet.Priority.Provider; 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); device.RemoveProvider(this);
} }
AdvertisedDevices.Clear();
} }
public override void LoadParameters(YamlMappingNode mapping) public override void LoadParameters(YamlMappingNode mapping)
{ {
if (mapping.TryGetNode("Range", out YamlNode node)) if (mapping.TryGetNode("range", out YamlNode node))
{ {
PowerRange = node.AsInt(); PowerRange = node.AsInt();
} }
if (mapping.TryGetNode("Priority", out node)) if (mapping.TryGetNode("priority", out node))
{ {
Priority = node.AsEnum<Powernet.Priority>(); 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 //Make sure the device can accept power providers to give it power
if (device.DrawType == DrawTypes.Provider || device.DrawType == DrawTypes.Both) 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); 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 //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); device.RemoveProvider(this);
} }
AdvertisedDevices.Clear();
} }
/// <summary> /// <summary>
@@ -194,7 +210,7 @@ namespace Content.Server.GameObjects.Components.Power
else else
{ {
var name = device.Owner.Prototype.Name; 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) public override void LoadParameters(YamlMappingNode mapping)
{ {
if (mapping.TryGetNode("Capacity", out YamlNode node)) if (mapping.TryGetNode("capacity", out YamlNode node))
{ {
Capacity = node.AsFloat(); Capacity = node.AsFloat();
} }
if (mapping.TryGetNode("Charge", out node)) if (mapping.TryGetNode("charge", out node))
{ {
Charge = node.AsFloat(); Charge = node.AsFloat();
} }
if (mapping.TryGetNode("ChargeRate", out node)) if (mapping.TryGetNode("chargerate", out node))
{ {
ChargeRate = node.AsFloat(); ChargeRate = node.AsFloat();
} }
if (mapping.TryGetNode("DistributionRate", out node)) if (mapping.TryGetNode("distributionrate", out node))
{ {
DistributionRate = node.AsFloat(); DistributionRate = node.AsFloat();
} }
if (mapping.TryGetNode("ChargePowernet", out node)) if (mapping.TryGetNode("chargepowernet", out node))
{ {
_chargepowernet = node.AsBool(); _chargepowernet = node.AsBool();
} }

View File

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

View File

@@ -303,7 +303,7 @@ namespace Content.Server.GameObjects.Components.Power
else else
{ {
var name = device.Owner.Prototype.Name; 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);
} }
} }

View File

@@ -55,9 +55,9 @@
- type: Icon - type: Icon
texture: Objects/provider.png texture: Objects/provider.png
- type: PowerProvider - type: PowerProvider
Range: 5 range: 5
Priority: Provider priority: Provider
Load: 0 load: 0
- type: entity - type: entity
parent: WPPnobattery parent: WPPnobattery
@@ -66,10 +66,10 @@
description: Supplies power at range, has a backup battery just in case description: Supplies power at range, has a backup battery just in case
components: components:
- type: PowerStorage - type: PowerStorage
Capacity: 1000 capacity: 1000
Charge: 1000 charge: 1000
ChargeRate: 200 chargerate: 200
ChargePowernet: false chargepowernet: false
- type: entity - type: entity
@@ -86,11 +86,11 @@
- type: Icon - type: Icon
texture: Objects/storage.png texture: Objects/storage.png
- type: PowerStorage - type: PowerStorage
Capacity: 3000 capacity: 3000
Charge: 1000 charge: 1000
ChargeRate: 200 chargerate: 200
DistributionRate: 400 distributionrate: 400
ChargePowernet: true chargepowernet: true
- type: entity - type: entity
id: WiredMachine id: WiredMachine
@@ -106,9 +106,9 @@
- type: Icon - type: Icon
texture: Objects/wiredmachine.png texture: Objects/wiredmachine.png
- type: PowerDevice - type: PowerDevice
Drawtype: Node drawtype: Node
Load: 100 load: 100
Priority: High priority: High
- type: entity - type: entity
id: WirelessMachine id: WirelessMachine
@@ -124,6 +124,6 @@
- type: Icon - type: Icon
texture: Objects/wirelessmachine.png texture: Objects/wirelessmachine.png
- type: PowerDevice - type: PowerDevice
Drawtype: Both drawtype: Both
Load: 200 load: 200
Priority: Low priority: Low

View File

@@ -1,17 +1,28 @@
- type: entity - type: entity
name: Light name: Light
id: poweredlight id: poweredlight
parent: __engine_wall_light
components: components:
- type: Transform
- type: Clickable
# So we can click on it for deletion. # So we can click on it for deletion.
- type: BoundingBox - type: BoundingBox
- type: Sprite - type: Sprite
texture: Objects/wall_light_off.png sprite: Objects/lighting.rsi
state: off
- type: Icon
sprite: Objects/lighting.rsi
state: off
- type: PointLight
state: Off
radius: 8
energy: 1.2
offset: "0, -16"
color: "#DCDCC6"
- type: PowerDevice - type: PowerDevice
load: 1 load: 50
priority: Low priority: Low
- type: PoweredLight - type: PoweredLight
- type: PointLight
state: Off

View File

@@ -0,0 +1,21 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "on",
"select": [],
"flags": {},
"directions": 4
},
{
"name": "off",
"select": [],
"flags": {},
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 842 B

2
engine

Submodule engine updated: 3728c7eeee...b761d9a1eb