diff --git a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Reactor.cs b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Reactor.cs index 12341263a..47e31d51c 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Reactor.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Reactor.cs @@ -11,6 +11,15 @@ namespace Barotrauma.Items.Components { private GUITickBox autoTempTickBox; + private const int GraphSize = 25; + private float graphTimer; + private int updateGraphInterval = 500; + + private float[] fissionRateGraph = new float[GraphSize]; + private float[] coolingRateGraph = new float[GraphSize]; + private float[] tempGraph = new float[GraphSize]; + private float[] loadGraph = new float[GraphSize]; + partial void InitProjSpecific() { var button = new GUIButton(new Rectangle(410, 70, 40, 40), "-", "", GuiFrame); diff --git a/Barotrauma/BarotraumaShared/Content/Items/Reactor/reactor.xml b/Barotrauma/BarotraumaShared/Content/Items/Reactor/reactor.xml index 75c6100ad..435f14547 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Reactor/reactor.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Reactor/reactor.xml @@ -39,6 +39,7 @@ + diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Reactor.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Reactor.cs index dcf134a29..4b539408c 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Reactor.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Reactor.cs @@ -32,22 +32,13 @@ namespace Barotrauma.Items.Components //turned down and cooling increased private float shutDownTemp; - private float fireTemp, meltDownTemp; + private float fireTemp, meltDownTemp, meltDownDelay; + + private float meltDownTimer; //how much power is provided to the grid per 1 temperature unit private float powerPerTemp; - private int graphSize = 25; - - private float graphTimer; - - private int updateGraphInterval = 500; - - private float[] fissionRateGraph; - private float[] coolingRateGraph; - private float[] tempGraph; - private float[] loadGraph; - private float load; private bool unsentChanges; @@ -67,6 +58,13 @@ namespace Barotrauma.Items.Components } } + [Serialize(30.0f, true)] + public float MeltdownDelay + { + get { return meltDownDelay; } + set { meltDownDelay = Math.Max(value, 0.0f); } + } + [Editable(ToolTip = "The temperature at which the reactor catches fire."), Serialize(9000.0f, true)] public float FireTemp { @@ -155,17 +153,9 @@ namespace Barotrauma.Items.Components public Reactor(Item item, XElement element) : base(item, element) { - fissionRateGraph = new float[graphSize]; - coolingRateGraph = new float[graphSize]; - tempGraph = new float[graphSize]; - loadGraph = new float[graphSize]; - shutDownTemp = 500.0f; - - powerPerTemp = 1.0f; - + powerPerTemp = 1.0f; IsActive = true; - InitProjSpecific(); } @@ -227,8 +217,19 @@ namespace Barotrauma.Items.Components if (temperature > meltDownTemp) { - MeltDown(); - return; + item.SendSignal(0, "1", "meltdown_warning", null); + meltDownTimer += deltaTime; + + if (meltDownTimer > MeltdownDelay) + { + MeltDown(); + return; + } + } + else + { + item.SendSignal(0, "0", "meltdown_warning", null); + meltDownTimer = Math.Max(0.0f, meltDownTimer - deltaTime); } load = 0.0f; @@ -326,28 +327,26 @@ namespace Barotrauma.Items.Components private void MeltDown() { - if (item.Condition <= 0.0f) return; + if (item.Condition <= 0.0f || GameMain.Client != null) return; GameServer.Log("Reactor meltdown!", ServerLog.MessageType.ItemInteraction); - + item.Condition = 0.0f; var containedItems = item.ContainedItems; - if (containedItems == null) return; - - foreach (Item containedItem in item.ContainedItems) + if (containedItems != null) { - if (containedItem == null) continue; - containedItem.Condition = 0.0f; - } - - if (GameMain.Server != null) - { - if (GameMain.Server.ConnectedClients.Contains(BlameOnBroken)) + foreach (Item containedItem in containedItems) { - BlameOnBroken.Karma = 0.0f; + if (containedItem == null) continue; + containedItem.Condition = 0.0f; } } + + if (GameMain.Server != null && GameMain.Server.ConnectedClients.Contains(BlameOnBroken)) + { + BlameOnBroken.Karma = 0.0f; + } } public override bool Pick(Character picker) diff --git a/Barotrauma/BarotraumaShared/Submarines/Aegir Mark III.sub b/Barotrauma/BarotraumaShared/Submarines/Aegir Mark III.sub index 46128132c..46a84530c 100644 Binary files a/Barotrauma/BarotraumaShared/Submarines/Aegir Mark III.sub and b/Barotrauma/BarotraumaShared/Submarines/Aegir Mark III.sub differ diff --git a/Barotrauma/BarotraumaShared/Submarines/Nehalennia.sub b/Barotrauma/BarotraumaShared/Submarines/Nehalennia.sub index d21d7b160..b72efa23f 100644 Binary files a/Barotrauma/BarotraumaShared/Submarines/Nehalennia.sub and b/Barotrauma/BarotraumaShared/Submarines/Nehalennia.sub differ diff --git a/Barotrauma/BarotraumaShared/Submarines/Vellamo.sub b/Barotrauma/BarotraumaShared/Submarines/Vellamo.sub index 841320461..99f0d9dd3 100644 Binary files a/Barotrauma/BarotraumaShared/Submarines/Vellamo.sub and b/Barotrauma/BarotraumaShared/Submarines/Vellamo.sub differ