Remove atmos archiving.
This commit is contained in:
@@ -42,13 +42,6 @@ namespace Content.Server.Atmos.EntitySystems
|
|||||||
return MathF.Max(NumericsHelpers.HorizontalAdd(tmp), Atmospherics.MinimumHeatCapacity);
|
return MathF.Max(NumericsHelpers.HorizontalAdd(tmp), Atmospherics.MinimumHeatCapacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public float GetHeatCapacityArchived(GasMixture mixture)
|
|
||||||
{
|
|
||||||
Span<float> tmp = stackalloc float[mixture.Moles.Length];
|
|
||||||
NumericsHelpers.Multiply(mixture.MolesArchived, GasSpecificHeats, tmp);
|
|
||||||
return MathF.Max(NumericsHelpers.HorizontalAdd(tmp), Atmospherics.MinimumHeatCapacity);
|
|
||||||
}
|
|
||||||
|
|
||||||
public float GetThermalEnergy(GasMixture mixture)
|
public float GetThermalEnergy(GasMixture mixture)
|
||||||
{
|
{
|
||||||
return mixture.Temperature * GetHeatCapacity(mixture);
|
return mixture.Temperature * GetHeatCapacity(mixture);
|
||||||
@@ -79,7 +72,7 @@ namespace Content.Server.Atmos.EntitySystems
|
|||||||
|
|
||||||
public float Share(GasMixture receiver, GasMixture sharer, int atmosAdjacentTurfs)
|
public float Share(GasMixture receiver, GasMixture sharer, int atmosAdjacentTurfs)
|
||||||
{
|
{
|
||||||
var temperatureDelta = receiver.TemperatureArchived - sharer.TemperatureArchived;
|
var temperatureDelta = receiver.Temperature - sharer.Temperature;
|
||||||
var absTemperatureDelta = Math.Abs(temperatureDelta);
|
var absTemperatureDelta = Math.Abs(temperatureDelta);
|
||||||
var oldHeatCapacity = 0f;
|
var oldHeatCapacity = 0f;
|
||||||
var oldSharerHeatCapacity = 0f;
|
var oldSharerHeatCapacity = 0f;
|
||||||
@@ -130,12 +123,12 @@ namespace Content.Server.Atmos.EntitySystems
|
|||||||
// Transfer of thermal energy (via changed heat capacity) between self and sharer.
|
// Transfer of thermal energy (via changed heat capacity) between self and sharer.
|
||||||
if (!receiver.Immutable && newHeatCapacity > Atmospherics.MinimumHeatCapacity)
|
if (!receiver.Immutable && newHeatCapacity > Atmospherics.MinimumHeatCapacity)
|
||||||
{
|
{
|
||||||
receiver.Temperature = ((oldHeatCapacity * receiver.Temperature) - (heatCapacityToSharer * receiver.TemperatureArchived) + (heatCapacitySharerToThis * sharer.TemperatureArchived)) / newHeatCapacity;
|
receiver.Temperature = ((oldHeatCapacity * receiver.Temperature) - (heatCapacityToSharer * receiver.Temperature) + (heatCapacitySharerToThis * sharer.Temperature)) / newHeatCapacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sharer.Immutable && newSharerHeatCapacity > Atmospherics.MinimumHeatCapacity)
|
if (!sharer.Immutable && newSharerHeatCapacity > Atmospherics.MinimumHeatCapacity)
|
||||||
{
|
{
|
||||||
sharer.Temperature = ((oldSharerHeatCapacity * sharer.Temperature) - (heatCapacitySharerToThis * sharer.TemperatureArchived) + (heatCapacityToSharer*receiver.TemperatureArchived)) / newSharerHeatCapacity;
|
sharer.Temperature = ((oldSharerHeatCapacity * sharer.Temperature) - (heatCapacitySharerToThis * sharer.Temperature) + (heatCapacityToSharer*receiver.Temperature)) / newSharerHeatCapacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Thermal energy of the system (self and sharer) is unchanged.
|
// Thermal energy of the system (self and sharer) is unchanged.
|
||||||
@@ -154,17 +147,17 @@ namespace Content.Server.Atmos.EntitySystems
|
|||||||
var moles = receiver.TotalMoles;
|
var moles = receiver.TotalMoles;
|
||||||
var theirMoles = sharer.TotalMoles;
|
var theirMoles = sharer.TotalMoles;
|
||||||
|
|
||||||
return (receiver.TemperatureArchived * (moles + movedMoles)) - (sharer.TemperatureArchived * (theirMoles - movedMoles)) * Atmospherics.R / receiver.Volume;
|
return (receiver.Temperature * (moles + movedMoles)) - (sharer.Temperature * (theirMoles - movedMoles)) * Atmospherics.R / receiver.Volume;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public float TemperatureShare(GasMixture receiver, GasMixture sharer, float conductionCoefficient)
|
public float TemperatureShare(GasMixture receiver, GasMixture sharer, float conductionCoefficient)
|
||||||
{
|
{
|
||||||
var temperatureDelta = receiver.TemperatureArchived - sharer.TemperatureArchived;
|
var temperatureDelta = receiver.Temperature - sharer.Temperature;
|
||||||
if (MathF.Abs(temperatureDelta) > Atmospherics.MinimumTemperatureDeltaToConsider)
|
if (MathF.Abs(temperatureDelta) > Atmospherics.MinimumTemperatureDeltaToConsider)
|
||||||
{
|
{
|
||||||
var heatCapacity = GetHeatCapacityArchived(receiver);
|
var heatCapacity = GetHeatCapacity(receiver);
|
||||||
var sharerHeatCapacity = GetHeatCapacityArchived(sharer);
|
var sharerHeatCapacity = GetHeatCapacity(sharer);
|
||||||
|
|
||||||
if (sharerHeatCapacity > Atmospherics.MinimumHeatCapacity && heatCapacity > Atmospherics.MinimumHeatCapacity)
|
if (sharerHeatCapacity > Atmospherics.MinimumHeatCapacity && heatCapacity > Atmospherics.MinimumHeatCapacity)
|
||||||
{
|
{
|
||||||
@@ -183,10 +176,10 @@ namespace Content.Server.Atmos.EntitySystems
|
|||||||
|
|
||||||
public float TemperatureShare(GasMixture receiver, float conductionCoefficient, float sharerTemperature, float sharerHeatCapacity)
|
public float TemperatureShare(GasMixture receiver, float conductionCoefficient, float sharerTemperature, float sharerHeatCapacity)
|
||||||
{
|
{
|
||||||
var temperatureDelta = receiver.TemperatureArchived - sharerTemperature;
|
var temperatureDelta = receiver.Temperature - sharerTemperature;
|
||||||
if (MathF.Abs(temperatureDelta) > Atmospherics.MinimumTemperatureDeltaToConsider)
|
if (MathF.Abs(temperatureDelta) > Atmospherics.MinimumTemperatureDeltaToConsider)
|
||||||
{
|
{
|
||||||
var heatCapacity = GetHeatCapacityArchived(receiver);
|
var heatCapacity = GetHeatCapacity(receiver);
|
||||||
|
|
||||||
if (sharerHeatCapacity > Atmospherics.MinimumHeatCapacity && heatCapacity > Atmospherics.MinimumHeatCapacity)
|
if (sharerHeatCapacity > Atmospherics.MinimumHeatCapacity && heatCapacity > Atmospherics.MinimumHeatCapacity)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,9 +16,6 @@ namespace Content.Server.Atmos.EntitySystems
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tile.ArchivedCycle < fireCount)
|
|
||||||
Archive(tile, fireCount);
|
|
||||||
|
|
||||||
tile.CurrentCycle = fireCount;
|
tile.CurrentCycle = fireCount;
|
||||||
var adjacentTileLength = 0;
|
var adjacentTileLength = 0;
|
||||||
|
|
||||||
@@ -38,7 +35,6 @@ namespace Content.Server.Atmos.EntitySystems
|
|||||||
// If the tile is null or has no air, we don't do anything for it.
|
// If the tile is null or has no air, we don't do anything for it.
|
||||||
if(enemyTile?.Air == null) continue;
|
if(enemyTile?.Air == null) continue;
|
||||||
if (fireCount <= enemyTile.CurrentCycle) continue;
|
if (fireCount <= enemyTile.CurrentCycle) continue;
|
||||||
Archive(enemyTile, fireCount);
|
|
||||||
|
|
||||||
var shouldShareAir = false;
|
var shouldShareAir = false;
|
||||||
|
|
||||||
@@ -110,13 +106,6 @@ namespace Content.Server.Atmos.EntitySystems
|
|||||||
RemoveActiveTile(gridAtmosphere, tile);
|
RemoveActiveTile(gridAtmosphere, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Archive(TileAtmosphere tile, int fireCount)
|
|
||||||
{
|
|
||||||
tile.Air?.Archive();
|
|
||||||
tile.ArchivedCycle = fireCount;
|
|
||||||
tile.TemperatureArchived = tile.Temperature;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void LastShareCheck(TileAtmosphere tile)
|
private void LastShareCheck(TileAtmosphere tile)
|
||||||
{
|
{
|
||||||
if (tile.Air == null || tile.ExcitedGroup == null)
|
if (tile.Air == null || tile.ExcitedGroup == null)
|
||||||
|
|||||||
@@ -21,9 +21,6 @@ namespace Content.Server.Atmos.EntitySystems
|
|||||||
if (adjacent == null || adjacent.ThermalConductivity == 0f)
|
if (adjacent == null || adjacent.ThermalConductivity == 0f)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(adjacent.ArchivedCycle < gridAtmosphere.UpdateCounter)
|
|
||||||
Archive(adjacent, gridAtmosphere.UpdateCounter);
|
|
||||||
|
|
||||||
NeighborConductWithSource(gridAtmosphere, adjacent, tile);
|
NeighborConductWithSource(gridAtmosphere, adjacent, tile);
|
||||||
|
|
||||||
ConsiderSuperconductivity(gridAtmosphere, adjacent);
|
ConsiderSuperconductivity(gridAtmosphere, adjacent);
|
||||||
@@ -37,8 +34,6 @@ namespace Content.Server.Atmos.EntitySystems
|
|||||||
{
|
{
|
||||||
if(tile.Air == null)
|
if(tile.Air == null)
|
||||||
{
|
{
|
||||||
if(tile.ArchivedCycle < gridAtmosphere.UpdateCounter)
|
|
||||||
Archive(tile, gridAtmosphere.UpdateCounter);
|
|
||||||
return AtmosDirection.All;
|
return AtmosDirection.All;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,7 +123,7 @@ namespace Content.Server.Atmos.EntitySystems
|
|||||||
|
|
||||||
private void TemperatureShareMutualSolid(TileAtmosphere tile, TileAtmosphere other, float conductionCoefficient)
|
private void TemperatureShareMutualSolid(TileAtmosphere tile, TileAtmosphere other, float conductionCoefficient)
|
||||||
{
|
{
|
||||||
var deltaTemperature = (tile.TemperatureArchived - other.TemperatureArchived);
|
var deltaTemperature = (tile.Temperature - other.Temperature);
|
||||||
if (MathF.Abs(deltaTemperature) > Atmospherics.MinimumTemperatureDeltaToConsider
|
if (MathF.Abs(deltaTemperature) > Atmospherics.MinimumTemperatureDeltaToConsider
|
||||||
&& tile.HeatCapacity != 0f && other.HeatCapacity != 0f)
|
&& tile.HeatCapacity != 0f && other.HeatCapacity != 0f)
|
||||||
{
|
{
|
||||||
@@ -146,7 +141,7 @@ namespace Content.Server.Atmos.EntitySystems
|
|||||||
if (tile.Temperature > Atmospherics.T0C)
|
if (tile.Temperature > Atmospherics.T0C)
|
||||||
{
|
{
|
||||||
// Hardcoded space temperature.
|
// Hardcoded space temperature.
|
||||||
var deltaTemperature = (tile.TemperatureArchived - Atmospherics.TCMB);
|
var deltaTemperature = (tile.Temperature - Atmospherics.TCMB);
|
||||||
if ((tile.HeatCapacity > 0) && (MathF.Abs(deltaTemperature) > Atmospherics.MinimumTemperatureDeltaToConsider))
|
if ((tile.HeatCapacity > 0) && (MathF.Abs(deltaTemperature) > Atmospherics.MinimumTemperatureDeltaToConsider))
|
||||||
{
|
{
|
||||||
var heat = tile.ThermalConductivity * deltaTemperature * (tile.HeatCapacity *
|
var heat = tile.ThermalConductivity * deltaTemperature * (tile.HeatCapacity *
|
||||||
|
|||||||
@@ -26,9 +26,6 @@ namespace Content.Server.Atmos
|
|||||||
[DataField("moles")] [ViewVariables]
|
[DataField("moles")] [ViewVariables]
|
||||||
public float[] Moles = new float[Atmospherics.AdjustedNumberOfGases];
|
public float[] Moles = new float[Atmospherics.AdjustedNumberOfGases];
|
||||||
|
|
||||||
[DataField("molesArchived")] [ViewVariables]
|
|
||||||
public float[] MolesArchived = new float[Atmospherics.AdjustedNumberOfGases];
|
|
||||||
|
|
||||||
[DataField("temperature")] [ViewVariables]
|
[DataField("temperature")] [ViewVariables]
|
||||||
private float _temperature = Atmospherics.TCMB;
|
private float _temperature = Atmospherics.TCMB;
|
||||||
|
|
||||||
@@ -73,9 +70,6 @@ namespace Content.Server.Atmos
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[DataField("temperatureArchived")] [ViewVariables]
|
|
||||||
public float TemperatureArchived { get; private set; }
|
|
||||||
|
|
||||||
[DataField("volume")] [ViewVariables]
|
[DataField("volume")] [ViewVariables]
|
||||||
public float Volume { get; set; }
|
public float Volume { get; set; }
|
||||||
|
|
||||||
@@ -96,13 +90,6 @@ namespace Content.Server.Atmos
|
|||||||
Immutable = true;
|
Immutable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public void Archive()
|
|
||||||
{
|
|
||||||
Moles.AsSpan().CopyTo(MolesArchived.AsSpan());
|
|
||||||
TemperatureArchived = Temperature;
|
|
||||||
}
|
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public float GetMoles(int gasId)
|
public float GetMoles(int gasId)
|
||||||
{
|
{
|
||||||
@@ -253,7 +240,6 @@ namespace Content.Server.Atmos
|
|||||||
{
|
{
|
||||||
// The arrays MUST have a specific length.
|
// The arrays MUST have a specific length.
|
||||||
Array.Resize(ref Moles, Atmospherics.AdjustedNumberOfGases);
|
Array.Resize(ref Moles, Atmospherics.AdjustedNumberOfGases);
|
||||||
Array.Resize(ref MolesArchived, Atmospherics.AdjustedNumberOfGases);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool Equals(object? obj)
|
public override bool Equals(object? obj)
|
||||||
@@ -268,12 +254,10 @@ namespace Content.Server.Atmos
|
|||||||
if (ReferenceEquals(null, other)) return false;
|
if (ReferenceEquals(null, other)) return false;
|
||||||
if (ReferenceEquals(this, other)) return true;
|
if (ReferenceEquals(this, other)) return true;
|
||||||
return Moles.SequenceEqual(other.Moles)
|
return Moles.SequenceEqual(other.Moles)
|
||||||
&& MolesArchived.SequenceEqual(other.MolesArchived)
|
|
||||||
&& _temperature.Equals(other._temperature)
|
&& _temperature.Equals(other._temperature)
|
||||||
&& ReactionResults.SequenceEqual(other.ReactionResults)
|
&& ReactionResults.SequenceEqual(other.ReactionResults)
|
||||||
&& Immutable == other.Immutable
|
&& Immutable == other.Immutable
|
||||||
&& LastShare.Equals(other.LastShare)
|
&& LastShare.Equals(other.LastShare)
|
||||||
&& TemperatureArchived.Equals(other.TemperatureArchived)
|
|
||||||
&& Volume.Equals(other.Volume);
|
&& Volume.Equals(other.Volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -284,13 +268,10 @@ namespace Content.Server.Atmos
|
|||||||
for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++)
|
for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++)
|
||||||
{
|
{
|
||||||
var moles = Moles[i];
|
var moles = Moles[i];
|
||||||
var molesArchived = MolesArchived[i];
|
|
||||||
hashCode.Add(moles);
|
hashCode.Add(moles);
|
||||||
hashCode.Add(molesArchived);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hashCode.Add(_temperature);
|
hashCode.Add(_temperature);
|
||||||
hashCode.Add(TemperatureArchived);
|
|
||||||
hashCode.Add(Immutable);
|
hashCode.Add(Immutable);
|
||||||
hashCode.Add(LastShare);
|
hashCode.Add(LastShare);
|
||||||
hashCode.Add(Volume);
|
hashCode.Add(Volume);
|
||||||
@@ -303,11 +284,9 @@ namespace Content.Server.Atmos
|
|||||||
var newMixture = new GasMixture()
|
var newMixture = new GasMixture()
|
||||||
{
|
{
|
||||||
Moles = (float[])Moles.Clone(),
|
Moles = (float[])Moles.Clone(),
|
||||||
MolesArchived = (float[])MolesArchived.Clone(),
|
|
||||||
_temperature = _temperature,
|
_temperature = _temperature,
|
||||||
Immutable = Immutable,
|
Immutable = Immutable,
|
||||||
LastShare = LastShare,
|
LastShare = LastShare,
|
||||||
TemperatureArchived = TemperatureArchived,
|
|
||||||
Volume = Volume,
|
Volume = Volume,
|
||||||
};
|
};
|
||||||
return newMixture;
|
return newMixture;
|
||||||
|
|||||||
@@ -13,18 +13,12 @@ namespace Content.Server.Atmos
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class TileAtmosphere : IGasMixtureHolder
|
public class TileAtmosphere : IGasMixtureHolder
|
||||||
{
|
{
|
||||||
[ViewVariables]
|
|
||||||
public int ArchivedCycle;
|
|
||||||
|
|
||||||
[ViewVariables]
|
[ViewVariables]
|
||||||
public int CurrentCycle;
|
public int CurrentCycle;
|
||||||
|
|
||||||
[ViewVariables]
|
[ViewVariables]
|
||||||
public float Temperature { get; set; } = Atmospherics.T20C;
|
public float Temperature { get; set; } = Atmospherics.T20C;
|
||||||
|
|
||||||
[ViewVariables]
|
|
||||||
public float TemperatureArchived { get; set; } = Atmospherics.T20C;
|
|
||||||
|
|
||||||
[ViewVariables]
|
[ViewVariables]
|
||||||
public TileAtmosphere? PressureSpecificTarget { get; set; }
|
public TileAtmosphere? PressureSpecificTarget { get; set; }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user