From 1561fa48673abe02e902cb4cf6aa06c79c4fa271 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Tue, 19 Mar 2019 14:37:52 +0200 Subject: [PATCH] df7366c...817c58e commit 817c58e2a4b04017130cc06c522471e76dc109e0 Author: Joonas Rikkonen Date: Tue Mar 19 14:37:16 2019 +0200 Some changes to the reactor logic: The colored areas on the fission rate gauge now follow the amount of available fuel (previously they were static and didn't really have an effect on anything), and trying to push the fission rate above the upper limit makes the pointer "jitter" to make it more obvious that the fission rate can't be pushed any further. --- .../Source/Items/Components/Machines/Reactor.cs | 12 +++++++++++- .../Source/Items/Components/Machines/Reactor.cs | 14 +++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Reactor.cs b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Reactor.cs index 19882d141..d0e98ead9 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Reactor.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Reactor.cs @@ -331,8 +331,18 @@ namespace Barotrauma.Items.Components spriteBatch.GraphicsDevice.ScissorRectangle = container.Rect; spriteBatch.Begin(SpriteSortMode.Deferred, rasterizerState: GameMain.ScissorTestEnable); + //make the pointer jitter a bit if it's at the upper limit of the fission rate + float jitter = 0.0f; + if (FissionRate > allowedFissionRate.Y - 5.0f) + { + float jitterAmount = Math.Min(targetFissionRate - allowedFissionRate.Y, 10.0f); + float t = graphTimer / updateGraphInterval; + + jitter = (PerlinNoise.GetPerlin(t * 0.5f, t * 0.1f) - 0.5f) * jitterAmount; + } + DrawMeter(spriteBatch, container.Rect, - fissionRateMeter, FissionRate, new Vector2(0.0f, 100.0f), optimalFissionRate, allowedFissionRate); + fissionRateMeter, FissionRate + jitter, new Vector2(0.0f, 100.0f), optimalFissionRate, allowedFissionRate); spriteBatch.End(); spriteBatch.GraphicsDevice.ScissorRectangle = prevScissorRect; diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Reactor.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Reactor.cs index 660bc5dd8..0f790a004 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Reactor.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Reactor.cs @@ -201,19 +201,19 @@ namespace Barotrauma.Items.Components tolerance = MathHelper.Lerp(5.0f, 20.0f, degreeOfSuccess); allowedTurbineOutput = new Vector2(correctTurbineOutput - tolerance, correctTurbineOutput + tolerance); - float temperatureTolerance = MathHelper.Lerp(10.0f, 20.0f, degreeOfSuccess); optimalTemperature = Vector2.Lerp(new Vector2(40.0f, 60.0f), new Vector2(30.0f, 70.0f), degreeOfSuccess); allowedTemperature = Vector2.Lerp(new Vector2(30.0f, 70.0f), new Vector2(10.0f, 90.0f), degreeOfSuccess); - - float fissionRateTolerance = MathHelper.Lerp(10.0f, 20.0f, degreeOfSuccess); - optimalFissionRate = Vector2.Lerp(new Vector2(40.0f, 70.0f), new Vector2(30.0f, 85.0f), degreeOfSuccess); - allowedFissionRate = Vector2.Lerp(new Vector2(30.0f, 85.0f), new Vector2(20.0f, 98.0f), degreeOfSuccess); + + optimalFissionRate = Vector2.Lerp(new Vector2(30, AvailableFuel - 20), new Vector2(20, AvailableFuel - 10), degreeOfSuccess); + optimalFissionRate.X = Math.Min(optimalFissionRate.X, optimalFissionRate.Y - 10); + allowedFissionRate = Vector2.Lerp(new Vector2(20, AvailableFuel), new Vector2(10, AvailableFuel), degreeOfSuccess); + allowedFissionRate.X = Math.Min(allowedFissionRate.X, allowedFissionRate.Y - 10); float heatAmount = fissionRate * (AvailableFuel / 100.0f) * 2.0f; float temperatureDiff = (heatAmount - turbineOutput) - Temperature; Temperature += MathHelper.Clamp(Math.Sign(temperatureDiff) * 10.0f * deltaTime, -Math.Abs(temperatureDiff), Math.Abs(temperatureDiff)); if (item.InWater && AvailableFuel < 100.0f) Temperature -= 12.0f * deltaTime; - + FissionRate = MathHelper.Lerp(fissionRate, Math.Min(targetFissionRate, AvailableFuel), deltaTime); TurbineOutput = MathHelper.Lerp(turbineOutput, targetTurbineOutput, deltaTime); @@ -364,7 +364,7 @@ namespace Barotrauma.Items.Components } else if (-currPowerConsumption < load) { - targetFissionRate = Math.Min(targetFissionRate + speed * 2 * deltaTime, allowedFissionRate.Y); + targetFissionRate = Math.Min(targetFissionRate + speed * 2 * deltaTime, 100.0f); } targetFissionRate = MathHelper.Clamp(targetFissionRate, 0.0f, 100.0f); }