Added "VulnerableToEMP" property to Powered. Can be edited in sub editor. Reactors and relays are not affected by EMP by default. Closes #495

This commit is contained in:
Joonas Rikkonen
2018-07-18 15:07:21 +03:00
parent d6ec1bc339
commit 30a453191f
4 changed files with 14 additions and 10 deletions
@@ -261,7 +261,7 @@
<Sprite texture="signalcomp.png" depth="0.8" sourcerect="48,16,16,16"/> <Sprite texture="signalcomp.png" depth="0.8" sourcerect="48,16,16,16"/>
<RelayComponent canbeselected = "true"> <RelayComponent canbeselected="true" vulnerabletoemp="false">
<GuiFrame rect="0,0,200,160" alignment="Center" style="ItemUI"/> <GuiFrame rect="0,0,200,160" alignment="Center" style="ItemUI"/>
</RelayComponent> </RelayComponent>
@@ -21,7 +21,7 @@
<Sprite texture = "reactor.png" sourcerect="0,0,321,192" depth="0.8"/> <Sprite texture = "reactor.png" sourcerect="0,0,321,192" depth="0.8"/>
<Reactor canbeselected = "true"> <Reactor canbeselected="true" vulnerabletoemp="false">
<GuiFrame rect="0,0,760,460" alignment="Center" style="ItemUI"/> <GuiFrame rect="0,0,760,460" alignment="Center" style="ItemUI"/>
<RequiredSkill name="Construction" level="30"/> <RequiredSkill name="Construction" level="30"/>
<StatusEffect type="InWater" target="This" Temperature="-500.0"/> <StatusEffect type="InWater" target="This" Temperature="-500.0"/>
@@ -34,7 +34,6 @@ namespace Barotrauma.Items.Components
set { powerConsumption = value; } set { powerConsumption = value; }
} }
[Serialize(false, true)] [Serialize(false, true)]
public override bool IsActive public override bool IsActive
{ {
@@ -60,6 +59,13 @@ namespace Barotrauma.Items.Components
set { voltage = Math.Max(0.0f, value); } set { voltage = Math.Max(0.0f, value); }
} }
[Editable(ToolTip = "Can the item be damaged by electomagnetic pulses."), Serialize(true, true)]
public bool VulnerableToEMP
{
get;
set;
}
public Powered(Item item, XElement element) public Powered(Item item, XElement element)
: base(item, element) : base(item, element)
{ {
@@ -79,14 +79,12 @@ namespace Barotrauma
float distSqr = Vector2.DistanceSquared(item.WorldPosition, worldPosition); float distSqr = Vector2.DistanceSquared(item.WorldPosition, worldPosition);
if (distSqr > displayRangeSqr) continue; if (distSqr > displayRangeSqr) continue;
//ignore reactors (don't want to blow them up)
if (item.GetComponent<Reactor>() != null) continue;
float distFactor = 1.0f - (float)Math.Sqrt(distSqr) / displayRange; float distFactor = 1.0f - (float)Math.Sqrt(distSqr) / displayRange;
//damage repairable power-consuming items //damage repairable power-consuming items
var powerTransfer = item.GetComponent<Powered>(); var powered = item.GetComponent<Powered>();
if (powerTransfer != null && item.FixRequirements.Count > 0) if (powered == null || !powered.VulnerableToEMP) continue;
if (item.FixRequirements.Count > 0)
{ {
item.Condition -= 100 * empStrength * distFactor; item.Condition -= 100 * empStrength * distFactor;
} }