mirror of
https://github.com/DeltaV-Station/Delta-v.git
synced 2026-10-03 01:27:26 +00:00
Move a metric fuckton of AtmosphereSystem to Shared. (#42989)
* AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * fix the tests I broke * Remove methods that the client shouldn't be calling. Hamburger. * light cleanup for now * review * whoop * docs updates and misc changes --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com> Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
This commit is contained in:
committed by
Coryler
co-authored by
Princess Cheeseballs
ArtisticRoomba
parent
6195c9982a
commit
733d479425
@@ -1,9 +1,8 @@
|
||||
using System.Diagnostics;
|
||||
using Content.Server.Atmos.Components;
|
||||
using Content.Server.Atmos.Piping.Components;
|
||||
using Content.Server.NodeContainer.NodeGroups;
|
||||
using Content.Shared.Atmos;
|
||||
using Content.Shared.Atmos.Components;
|
||||
using Content.Shared.Atmos.EntitySystems;
|
||||
using Content.Shared.Atmos.Reactions;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Shared.Map.Components;
|
||||
@@ -20,61 +19,6 @@ public partial class AtmosphereSystem
|
||||
consider adding a method here instead of making your own way to work around it.
|
||||
*/
|
||||
|
||||
/// <summary>
|
||||
/// Gets the <see cref="GasMixture"/> that an entity is contained within.
|
||||
/// </summary>
|
||||
/// <param name="ent">The entity to get the mixture for.</param>
|
||||
/// <param name="ignoreExposed">If true, will ignore mixtures that the entity is contained in
|
||||
/// (ex. lockers and cryopods) and just get the tile mixture.</param>
|
||||
/// <param name="excite">If true, will mark the tile as active for atmosphere processing.</param>
|
||||
/// <returns>A <see cref="GasMixture"/> if one could be found, null otherwise.</returns>
|
||||
[PublicAPI]
|
||||
public GasMixture? GetContainingMixture(Entity<TransformComponent?> ent, bool ignoreExposed = false, bool excite = false)
|
||||
{
|
||||
if (!Resolve(ent, ref ent.Comp))
|
||||
return null;
|
||||
|
||||
return GetContainingMixture(ent, ent.Comp.GridUid, ent.Comp.MapUid, ignoreExposed, excite);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the <see cref="GasMixture"/> that an entity is contained within.
|
||||
/// </summary>
|
||||
/// <param name="ent">The entity to get the mixture for.</param>
|
||||
/// <param name="grid">The grid that the entity may be on.</param>
|
||||
/// <param name="map">The map that the entity may be on.</param>
|
||||
/// <param name="ignoreExposed">If true, will ignore mixtures that the entity is contained in
|
||||
/// (ex. lockers and cryopods) and just get the tile mixture.</param>
|
||||
/// <param name="excite">If true, will mark the tile as active for atmosphere processing.</param>
|
||||
/// <returns>A <see cref="GasMixture"/> if one could be found, null otherwise.</returns>
|
||||
[PublicAPI]
|
||||
public GasMixture? GetContainingMixture(
|
||||
Entity<TransformComponent?> ent,
|
||||
Entity<GridAtmosphereComponent?, GasTileOverlayComponent?>? grid,
|
||||
Entity<MapAtmosphereComponent?>? map,
|
||||
bool ignoreExposed = false,
|
||||
bool excite = false)
|
||||
{
|
||||
if (!Resolve(ent, ref ent.Comp))
|
||||
return null;
|
||||
|
||||
if (!ignoreExposed && !ent.Comp.Anchored)
|
||||
{
|
||||
// Used for things like disposals/cryo to change which air people are exposed to.
|
||||
var ev = new AtmosExposedGetAirEvent((ent, ent.Comp), excite);
|
||||
RaiseLocalEvent(ent, ref ev);
|
||||
if (ev.Handled)
|
||||
return ev.Gas;
|
||||
|
||||
// TODO ATMOS: recursively iterate up through parents
|
||||
// This really needs recursive InContainer metadata flag for performance
|
||||
// And ideally some fast way to get the innermost airtight container.
|
||||
}
|
||||
|
||||
var position = _transformSystem.GetGridTilePositionOrDefault((ent, ent.Comp));
|
||||
return GetTileMixture(grid, map, position, excite);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if a grid has an atmosphere.
|
||||
/// </summary>
|
||||
@@ -153,6 +97,69 @@ public partial class AtmosphereSystem
|
||||
entity.Comp.InvalidatedCoords.Add(tile);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the gas mixture for a specific tile that an entity is on.
|
||||
/// </summary>
|
||||
/// <param name="entity">The entity to get the tile mixture for.</param>
|
||||
/// <param name="excite">Whether to mark the tile as active for atmosphere processing.</param>
|
||||
/// <returns>A <see cref="GasMixture"/> if one could be found, null otherwise.</returns>
|
||||
/// <remarks>This does not return the <see cref="GasMixture"/> that the entity
|
||||
/// may be contained in, ex. if the entity is currently in a locker/crate with its own
|
||||
/// <see cref="GasMixture"/>.</remarks>
|
||||
[PublicAPI]
|
||||
public GasMixture? GetTileMixture(Entity<TransformComponent?> entity, bool excite = false)
|
||||
{
|
||||
if (!Resolve(entity.Owner, ref entity.Comp))
|
||||
return null;
|
||||
|
||||
var indices = XformSystem.GetGridTilePositionOrDefault(entity);
|
||||
return GetTileMixture(entity.Comp.GridUid, entity.Comp.MapUid, indices, excite);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the <see cref="GasMixture"/> that an entity is contained within.
|
||||
/// </summary>
|
||||
/// <param name="ent">The entity to get the mixture for.</param>
|
||||
/// <param name="ignoreExposed">If true, will ignore mixtures that the entity is contained in
|
||||
/// (ex. lockers and cryopods) and just get the tile mixture.</param>
|
||||
/// <param name="excite">If true, will mark the tile as active for atmosphere processing.</param>
|
||||
/// <returns>A <see cref="GasMixture"/> if one could be found, null otherwise.</returns>
|
||||
[PublicAPI]
|
||||
public GasMixture? GetContainingMixture(Entity<TransformComponent?> ent, bool ignoreExposed = false, bool excite = false)
|
||||
{
|
||||
if (!Resolve(ent, ref ent.Comp))
|
||||
return null;
|
||||
|
||||
return GetContainingMixture(ent, ent.Comp.GridUid, ent.Comp.MapUid, ignoreExposed, excite);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the <see cref="GasMixture"/> that an entity is contained within.
|
||||
/// </summary>
|
||||
/// <param name="ent">The entity to get the mixture for.</param>
|
||||
/// <param name="grid">The grid that the entity may be on.</param>
|
||||
/// <param name="map">The map that the entity may be on.</param>
|
||||
/// <param name="ignoreExposed">If true, will ignore mixtures that the entity is contained in
|
||||
/// (ex. lockers and cryopods) and just get the tile mixture.</param>
|
||||
/// <param name="excite">If true, will mark the tile as active for atmosphere processing.</param>
|
||||
/// <returns>A <see cref="GasMixture"/> if one could be found, null otherwise.</returns>
|
||||
[PublicAPI]
|
||||
public GasMixture? GetContainingMixture(Entity<TransformComponent?> ent,
|
||||
Entity<GridAtmosphereComponent?, GasTileOverlayComponent?>? grid,
|
||||
Entity<MapAtmosphereComponent?>? map,
|
||||
bool ignoreExposed = false,
|
||||
bool excite = false)
|
||||
{
|
||||
if (!Resolve(ent, ref ent.Comp))
|
||||
return null;
|
||||
|
||||
if (!ignoreExposed && TryGetExposedMixture(ent, out var mixture))
|
||||
return mixture;
|
||||
|
||||
var position = XformSystem.GetGridTilePositionOrDefault((ent, ent.Comp));
|
||||
return GetTileMixture(grid, map, position, excite);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the gas mixtures for a list of tiles on a grid or map.
|
||||
/// </summary>
|
||||
@@ -226,33 +233,6 @@ public partial class AtmosphereSystem
|
||||
return mixtures;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the gas mixture for a specific tile that an entity is on.
|
||||
/// </summary>
|
||||
/// <param name="entity">The entity to get the tile mixture for.</param>
|
||||
/// <param name="excite">Whether to mark the tile as active for atmosphere processing.</param>
|
||||
/// <returns>A <see cref="GasMixture"/> if one could be found, null otherwise.</returns>
|
||||
/// <remarks>This does not return the <see cref="GasMixture"/> that the entity
|
||||
/// may be contained in, ex. if the entity is currently in a locker/crate with its own
|
||||
/// <see cref="GasMixture"/>.</remarks>
|
||||
[PublicAPI]
|
||||
public GasMixture? GetTileMixture(Entity<TransformComponent?> entity, bool excite = false)
|
||||
{
|
||||
if (!Resolve(entity.Owner, ref entity.Comp))
|
||||
return null;
|
||||
|
||||
var indices = _transformSystem.GetGridTilePositionOrDefault(entity);
|
||||
return GetTileMixture(entity.Comp.GridUid, entity.Comp.MapUid, indices, excite);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the gas mixture for a specific tile on a grid or map.
|
||||
/// </summary>
|
||||
/// <param name="grid">The grid to get the mixture from.</param>
|
||||
/// <param name="map">The map to get the mixture from.</param>
|
||||
/// <param name="gridTile">The tile to get the mixture from.</param>
|
||||
/// <param name="excite">Whether to mark the tile as active for atmosphere processing.</param>
|
||||
/// <returns>>A <see cref="GasMixture"/> if one could be found, null otherwise.</returns>
|
||||
[PublicAPI]
|
||||
public GasMixture? GetTileMixture(
|
||||
Entity<GridAtmosphereComponent?, GasTileOverlayComponent?>? grid,
|
||||
@@ -281,6 +261,34 @@ public partial class AtmosphereSystem
|
||||
return GasMixture.SpaceGas;
|
||||
}
|
||||
|
||||
public override void MergeContainingMixture(Entity<TransformComponent?> entity, GasMixture mixture, bool ignoreExposed = false, bool excite = false)
|
||||
{
|
||||
if (GetContainingMixture(entity, ignoreExposed, excite) is not { } containingMixture)
|
||||
return;
|
||||
|
||||
Merge(containingMixture, mixture);
|
||||
}
|
||||
|
||||
[PublicAPI]
|
||||
public override void MergeTileMixture(Entity<TransformComponent?> entity, GasMixture mixture, bool excite = false)
|
||||
{
|
||||
if (GetTileMixture(entity, excite) is not { } tileMixture)
|
||||
return;
|
||||
|
||||
Merge(tileMixture, mixture);
|
||||
}
|
||||
|
||||
public override void AdjustContainingMixture(Entity<TransformComponent?> entity, Gas gas, float mols, bool ignoreExposed = false, bool excite = false)
|
||||
{
|
||||
GetContainingMixture(entity, ignoreExposed, excite)?.AdjustMoles(gas, mols);
|
||||
}
|
||||
|
||||
[PublicAPI]
|
||||
public override void AdjustTileMixture(Entity<TransformComponent?> entity, Gas gas, float mols, bool excite = false)
|
||||
{
|
||||
GetTileMixture(entity, excite)?.AdjustMoles(gas, mols);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Triggers a tile's <see cref="GasMixture"/> to react.
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user