private void GenerateHeatFromFurniture(Furniture furniture, float deltaTime) { if (furniture.Tile.Room.IsOutsideRoom() == true) { return; } Tile tile = furniture.Tile; float pressure = tile.Room.GetGasPressure(); float efficiency = ModUtils.Clamp01(pressure / furniture.Parameters["pressure_threshold"].ToFloat()); float energyChangePerSecond = furniture.Parameters["base_heating"].ToFloat() * efficiency; float energyChange = energyChangePerSecond * deltaTime; tile.Room.Atmosphere.ChangeEnergy(energyChange); }
public void Test_Clamp01_OutOfRange() { float value_1 = 1.0001f; float ans_1 = ModUtils.Clamp01(value_1); Assert.AreNotEqual(value_1, ans_1); Assert.GreaterOrEqual(ans_1, 0f); Assert.LessOrEqual(ans_1, 1f); float value_2 = -0.0001f; float ans_2 = ModUtils.Clamp01(value_2); Assert.AreNotEqual(value_2, ans_2); Assert.GreaterOrEqual(ans_2, 0f); Assert.LessOrEqual(ans_2, 1f); }
public void Test_Clamp01_InRange() { float value_1 = 0.12345f; Assert.AreEqual(value_1, ModUtils.Clamp01(value_1)); float value_2 = 0.9999f; Assert.AreEqual(value_2, ModUtils.Clamp01(value_2)); float value_3 = float.Epsilon; Assert.AreEqual(value_3, ModUtils.Clamp01(value_3)); float value_4 = 1f - float.Epsilon; Assert.AreEqual(value_4, ModUtils.Clamp01(value_4)); }
private void UpdateTemperature(Furniture furniture, float deltaTime) { if (furniture.Tile.Room.IsOutsideRoom() == true) { return; } Tile tile = furniture.Tile; float pressure = tile.Room.GetTotalGasPressure(); float efficiency = ModUtils.Clamp01(pressure / furniture.Parameters["pressure_threshold"].ToFloat()); float temperatureChangePerSecond = furniture.Parameters["base_heating"].ToFloat() * efficiency; float temperatureChange = temperatureChangePerSecond * deltaTime; // This is all wrong, temperature shouldn't be set to the temperature change // But as this entire system does not work well, and creates more unrealistic temperatures, // I'll leave it as is. // Multiply by this just to make the game make sense. temperatureChange = temperatureChange * 10; World.Current.temperature.SetTemperature(tile.X, tile.Y, tile.Z, temperatureChange); }