* Added atmos sprites from CEV-Eris * Moved canister sprites to appropriate dir * Removed unnecessary sprites, edited canisters prototype * Created Gas Canister UI and release pressure buttons * Changed GasMixture's pressure calculation (convert liters to cube meters) * Added relabeling Canisters * Reverted changes on GasMixture * Changed my name in the credits * Added valve opening on canisters * Change canister visual state when connected to a port * Added nullable to SharedGasCanisterComponent * Replaced nullable contexts * Changed again nullable annotation context * Moved name in the credits to correct alphabetical order * Canisters: Fix the most blatant issues with this PR (the added project interdependencies for no reason whatsoever) * Canisters: Stop crashes when canisters leave atmosphere * Canisters: Gas released into no atmosphere gets transferred "into space" (deleted) * Atmos: Nullability annotations on TileAtmosphere, explaination of the states of TileAtmosphere.Air * Canisters: If in an airblocked tile, do NOT release gas * Scrubbers: Fix typo leading to them not connecting properly. * Revert manual changes to credits file (sorry!) (1/2) This reverts commit 94f3b0e5df8d9c2fa189866a17a231920f99bdaf. * Revert manual changes to credits file (sorry!) (2/2) This reverts commit 1986fb094dfaa44060f08d280f36b755258d17a6. * Canisters: Apply @Zumorica 's reviews * Canisters: Add missing localization as suggested by PJB Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Canisters: Pressure lights! * Canisters: Light is now unshaded. * Canisters: Now using IActivate * Gas canisters (& air canister), now with their numbers properly calibrated (hopefully) * Canisters: Refactor how their layers are added to be more like ApcVisualizer * Canisters: Clean up of the tile invalidation/air release logic * Canisters: Some gas canister window improvements * Canisters: Clean up release pressure change button label code Co-authored-by: Clement-O <topy72.mine@gmail.com> Co-authored-by: Clément <clement.orlandini@gmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
This commit is contained in:
@@ -452,15 +452,16 @@ namespace Content.Server.Atmos
|
||||
|
||||
/// <summary>
|
||||
/// Releases gas from this mixture to the output mixture.
|
||||
/// If the output mixture is null, then this is being released into space.
|
||||
/// It can't transfer air to a mixture with higher pressure.
|
||||
/// </summary>
|
||||
/// <param name="outputAir"></param>
|
||||
/// <param name="targetPressure"></param>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public bool ReleaseGasTo(GasMixture outputAir, float targetPressure)
|
||||
public bool ReleaseGasTo(GasMixture? outputAir, float targetPressure)
|
||||
{
|
||||
var outputStartingPressure = outputAir.Pressure;
|
||||
var outputStartingPressure = outputAir?.Pressure ?? 0;
|
||||
var inputStartingPressure = Pressure;
|
||||
|
||||
if (outputStartingPressure >= MathF.Min(targetPressure, inputStartingPressure - 10))
|
||||
@@ -472,11 +473,11 @@ namespace Content.Server.Atmos
|
||||
|
||||
// We calculate the necessary moles to transfer with the ideal gas law.
|
||||
var pressureDelta = MathF.Min(targetPressure - outputStartingPressure, (inputStartingPressure - outputStartingPressure) / 2f);
|
||||
var transferMoles = pressureDelta * outputAir.Volume / (Temperature * Atmospherics.R);
|
||||
var transferMoles = pressureDelta * (outputAir?.Volume ?? Atmospherics.CellVolume) / (Temperature * Atmospherics.R);
|
||||
|
||||
// And now we transfer the gas.
|
||||
var removed = Remove(transferMoles);
|
||||
outputAir.Merge(removed);
|
||||
outputAir?.Merge(removed);
|
||||
|
||||
return true;
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
#nullable enable annotations
|
||||
using System;
|
||||
using System.Buffers;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.CompilerServices;
|
||||
@@ -49,7 +50,7 @@ namespace Content.Server.Atmos
|
||||
private static int _soundCooldown;
|
||||
|
||||
[ViewVariables]
|
||||
public TileAtmosphere PressureSpecificTarget { get; set; }
|
||||
public TileAtmosphere? PressureSpecificTarget { get; set; }
|
||||
|
||||
[ViewVariables]
|
||||
public float PressureDifference { get; set; }
|
||||
@@ -103,8 +104,12 @@ namespace Content.Server.Atmos
|
||||
[ViewVariables]
|
||||
public ExcitedGroup ExcitedGroup { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The air in this tile. If null, this tile is completely airblocked.
|
||||
/// This can be immutable if the tile is spaced.
|
||||
/// </summary>
|
||||
[ViewVariables]
|
||||
public GasMixture Air { get; set; }
|
||||
public GasMixture? Air { get; set; }
|
||||
|
||||
[ViewVariables, UsedImplicitly]
|
||||
private int _blockedAirflow => (int)BlockedAirflow;
|
||||
|
||||
Reference in New Issue
Block a user