From e36033a3ac8568da2e9b5c6a4ac17467de841a71 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Sun, 27 May 2018 21:45:31 +0200 Subject: [PATCH] Power improvements: * crashes fixed * made lights an RSI. --- .../Components/Power/PowerDevice.cs | 15 +++++--- .../Power/PowerGeneratorComponent.cs | 2 +- .../Power/PowerProviderComponent.cs | 32 ++++++++++++---- .../Components/Power/PowerStorageComponent.cs | 10 ++--- .../Components/Power/PoweredLightComponent.cs | 4 +- .../GameObjects/Components/Power/Powernet.cs | 2 +- Resources/Prototypes/Entities/Power.yml | 36 +++++++++--------- .../Prototypes/Entities/PoweredLighting.yml | 21 +++++++--- .../Textures/Objects/lighting.rsi/meta.json | 21 ++++++++++ .../Textures/Objects/lighting.rsi/off.png | Bin 0 -> 576 bytes .../Textures/Objects/lighting.rsi/on.png | Bin 0 -> 842 bytes engine | 2 +- 12 files changed, 99 insertions(+), 46 deletions(-) create mode 100644 Resources/Textures/Objects/lighting.rsi/meta.json create mode 100644 Resources/Textures/Objects/lighting.rsi/off.png create mode 100644 Resources/Textures/Objects/lighting.rsi/on.png diff --git a/Content.Server/GameObjects/Components/Power/PowerDevice.cs b/Content.Server/GameObjects/Components/Power/PowerDevice.cs index 10dcd4812e..2144e887a3 100644 --- a/Content.Server/GameObjects/Components/Power/PowerDevice.cs +++ b/Content.Server/GameObjects/Components/Power/PowerDevice.cs @@ -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(); } - 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(); } diff --git a/Content.Server/GameObjects/Components/Power/PowerGeneratorComponent.cs b/Content.Server/GameObjects/Components/Power/PowerGeneratorComponent.cs index 93dc572596..fad2204879 100644 --- a/Content.Server/GameObjects/Components/Power/PowerGeneratorComponent.cs +++ b/Content.Server/GameObjects/Components/Power/PowerGeneratorComponent.cs @@ -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(); } diff --git a/Content.Server/GameObjects/Components/Power/PowerProviderComponent.cs b/Content.Server/GameObjects/Components/Power/PowerProviderComponent.cs index 6c0d6a5f5d..6dc70e885c 100644 --- a/Content.Server/GameObjects/Components/Power/PowerProviderComponent.cs +++ b/Content.Server/GameObjects/Components/Power/PowerProviderComponent.cs @@ -31,27 +31,38 @@ namespace Content.Server.GameObjects.Components.Power /// public SortedSet DeviceLoadList = new SortedSet(new Powernet.DevicePriorityCompare()); + /// + /// List of devices in range that we "advertised" to. + /// + public HashSet AdvertisedDevices = new HashSet(); + public List DepoweredDevices = new List(); 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(); } @@ -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(); } /// @@ -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); } } } diff --git a/Content.Server/GameObjects/Components/Power/PowerStorageComponent.cs b/Content.Server/GameObjects/Components/Power/PowerStorageComponent.cs index 37aa5264d1..413f7066ba 100644 --- a/Content.Server/GameObjects/Components/Power/PowerStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Power/PowerStorageComponent.cs @@ -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(); } diff --git a/Content.Server/GameObjects/Components/Power/PoweredLightComponent.cs b/Content.Server/GameObjects/Components/Power/PoweredLightComponent.cs index c2635b27dd..f29ce7cf2a 100644 --- a/Content.Server/GameObjects/Components/Power/PoweredLightComponent.cs +++ b/Content.Server/GameObjects/Components/Power/PoweredLightComponent.cs @@ -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; } }; diff --git a/Content.Server/GameObjects/Components/Power/Powernet.cs b/Content.Server/GameObjects/Components/Power/Powernet.cs index 190915c52d..28d9be747e 100644 --- a/Content.Server/GameObjects/Components/Power/Powernet.cs +++ b/Content.Server/GameObjects/Components/Power/Powernet.cs @@ -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); } } diff --git a/Resources/Prototypes/Entities/Power.yml b/Resources/Prototypes/Entities/Power.yml index 1d83a8c6f6..bfc37efa94 100644 --- a/Resources/Prototypes/Entities/Power.yml +++ b/Resources/Prototypes/Entities/Power.yml @@ -55,9 +55,9 @@ - type: Icon texture: Objects/provider.png - type: PowerProvider - Range: 5 - Priority: Provider - Load: 0 + range: 5 + priority: Provider + load: 0 - type: entity parent: WPPnobattery @@ -66,10 +66,10 @@ description: Supplies power at range, has a backup battery just in case components: - type: PowerStorage - Capacity: 1000 - Charge: 1000 - ChargeRate: 200 - ChargePowernet: false + capacity: 1000 + charge: 1000 + chargerate: 200 + chargepowernet: false - type: entity @@ -86,11 +86,11 @@ - type: Icon texture: Objects/storage.png - type: PowerStorage - Capacity: 3000 - Charge: 1000 - ChargeRate: 200 - DistributionRate: 400 - ChargePowernet: true + capacity: 3000 + charge: 1000 + chargerate: 200 + distributionrate: 400 + chargepowernet: true - type: entity id: WiredMachine @@ -106,9 +106,9 @@ - type: Icon texture: Objects/wiredmachine.png - type: PowerDevice - Drawtype: Node - Load: 100 - Priority: High + drawtype: Node + load: 100 + priority: High - type: entity id: WirelessMachine @@ -124,6 +124,6 @@ - type: Icon texture: Objects/wirelessmachine.png - type: PowerDevice - Drawtype: Both - Load: 200 - Priority: Low + drawtype: Both + load: 200 + priority: Low diff --git a/Resources/Prototypes/Entities/PoweredLighting.yml b/Resources/Prototypes/Entities/PoweredLighting.yml index 0cd57da13e..67351c3ed4 100644 --- a/Resources/Prototypes/Entities/PoweredLighting.yml +++ b/Resources/Prototypes/Entities/PoweredLighting.yml @@ -1,17 +1,28 @@ - type: entity name: Light id: poweredlight - parent: __engine_wall_light components: + - type: Transform + - type: Clickable # So we can click on it for deletion. - type: BoundingBox - 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 - load: 1 + load: 50 priority: Low - type: PoweredLight - - type: PointLight - state: Off diff --git a/Resources/Textures/Objects/lighting.rsi/meta.json b/Resources/Textures/Objects/lighting.rsi/meta.json new file mode 100644 index 0000000000..82febab64b --- /dev/null +++ b/Resources/Textures/Objects/lighting.rsi/meta.json @@ -0,0 +1,21 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "on", + "select": [], + "flags": {}, + "directions": 4 + }, + { + "name": "off", + "select": [], + "flags": {}, + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/lighting.rsi/off.png b/Resources/Textures/Objects/lighting.rsi/off.png new file mode 100644 index 0000000000000000000000000000000000000000..147fc5221c8ff3a79553760688b114a92bffd788 GIT binary patch literal 576 zcmV-G0>Axi6zu~BU;Gk%%wja!ejm}r)bTw{*)CaWN?d0(I z^2-NneFWLQ#gvvE$LDMR;P&Py$-I~>_`&^MW$nU)VW`O;$RP>CP*iJ!l?7yr8;u5i z1tI#jWnEsm*=&kRIrx+F@O|HsWeic$>-CI?^eBoF2Z~7L{Wb-L%eXjX16-)!9j9cZ zaxMG0Hb;czi05*guna8L?RG`K-`C2$Ph=UYJLQ{xQvrgh7)`)?49K?b_2NwX;sjlI1`3{2PnHo$@gn2Jzw=8QPg{Ph_H z$xpi!4jd&}_lm_iMj=87A%qY@2qCscgQk&LY?7?`9Ei>n>*i z4L}3X05kv%kZT=)VBuw^1fM5fZaR$!F^(blRF&dLhI-6u;GpP>(2}%D|S66*iDMFv0 z38mjDT%*y5!n1UM$)&w-h&pJD$3N4*&~=>#a*$F6CpqXT?-pV?h(1uxYquZcLpf`g ze?+w7n9v74Ks;LLA@U)8Vjt^#TskaKBeX0#@OMH8!Fz zS!0(VBsdFKW-fXb;2e~KB8Q2$&1;caJB|MSK?@%y2|8G<{^V{vTkJ|wB!KbqLLJ8; zz22wP2EmMbn~ierB&Xk?Qu`Z3z07G|O^#`?{itPb?5z1AR?Aum9OFT|O{~6_$#__7 z&2sDk1S!kqlJl#o3>YO4TSMstn9UTgN+cb8?6iP=N(^IvwzC)sk68%VzEN zlRTCXVuTabPi+7ao6qNDW15BdKrrsv62dlQLDugw>p*bB8BS8P904$<-p0h>2Z2B! zs>yQv6D`j{$xEf>ywjw#WC9OJbVfzN$OR>{U*fock&ww`a^=ozj>1{v0^`D^4h92a zy}oiSR+P`X|2;52IgI!~s%N|15|t~B`T*MdwMq&2xu`A%CO83{fCLjLCF7g}V2B{j zY$UnJ3PN)X?c(`?06gKy98>@i!4MLakdCDhkt+XHhu0iqWPF0)oqe9koa9@f!7S_H ztmBqxN~ZzIl=MQd%V7vXe<3oCKp+qZ1OkCTNE8g+Dj<1>KI^3p_)ZM0%C;jx6&nev z)CARRSuziP#|E)&I~I+qGO8uyY%l1R*cSp3GlEdK)oeCNtJS(xg+lz!Vt3_(RCu0# ziD*GSVr3ZA^E`4m93nQr|H=1_UHcEY-M(k}LPCYhe&yWpj@`Z0M(w$0Icj{(jk?