Ejemplo n.º 1
0
        private void OnMinerUpdated(EntityUid uid, GasMinerComponent miner, AtmosDeviceUpdateEvent args)
        {
            if (!CheckMinerOperation(args.Atmosphere, miner, out var tile) || !miner.Enabled || !miner.SpawnGas.HasValue || miner.SpawnAmount <= 0f)
            {
                return;
            }

            // Time to mine some gas.

            var merger = new GasMixture(1)
            {
                Temperature = miner.SpawnTemperature
            };

            merger.SetMoles(miner.SpawnGas.Value, miner.SpawnAmount);

            tile.AssumeAir(merger);
        }
Ejemplo n.º 2
0
        private void OnMinerUpdated(EntityUid uid, GasMinerComponent miner, AtmosDeviceUpdateEvent args)
        {
            var atmosphereSystem = Get <AtmosphereSystem>();

            if (!CheckMinerOperation(atmosphereSystem, miner, out var environment) || !miner.Enabled || !miner.SpawnGas.HasValue || miner.SpawnAmount <= 0f)
            {
                return;
            }

            // Time to mine some gas.

            var merger = new GasMixture(1)
            {
                Temperature = miner.SpawnTemperature
            };

            merger.SetMoles(miner.SpawnGas.Value, miner.SpawnAmount);

            atmosphereSystem.Merge(environment, merger);
        }
        private bool CheckMinerOperation(GasMinerComponent miner, [NotNullWhen(true)] out GasMixture?environment)
        {
            var uid = miner.Owner;

            environment = _atmosphereSystem.GetContainingMixture(uid, true, true);

            var transform = Transform(uid);
            var position  = _transformSystem.GetGridOrMapTilePosition(uid, transform);

            // Space.
            if (_atmosphereSystem.IsTileSpace(transform.GridUid, transform.MapUid, position))
            {
                miner.Broken = true;
                return(false);
            }

            // Air-blocked location.
            if (environment == null)
            {
                miner.Broken = true;
                return(false);
            }

            // External pressure above threshold.
            if (!float.IsInfinity(miner.MaxExternalPressure) &&
                environment.Pressure > miner.MaxExternalPressure - miner.SpawnAmount * miner.SpawnTemperature * Atmospherics.R / environment.Volume)
            {
                miner.Broken = true;
                return(false);
            }

            // External gas amount above threshold.
            if (!float.IsInfinity(miner.MaxExternalAmount) && environment.TotalMoles > miner.MaxExternalAmount)
            {
                miner.Broken = true;
                return(false);
            }

            miner.Broken = false;
            return(true);
        }
Ejemplo n.º 4
0
        private bool CheckMinerOperation(IGridAtmosphereComponent atmosphere, GasMinerComponent miner, [NotNullWhen(true)] out TileAtmosphere?tile)
        {
            tile = atmosphere.GetTile(miner.Owner.Transform.Coordinates) !;

            // Space.
            if (atmosphere.IsSpace(tile.GridIndices))
            {
                miner.Broken = true;
                return(false);
            }

            // Airblocked location.
            if (tile.Air == null)
            {
                miner.Broken = true;
                return(false);
            }

            // External pressure above threshold.
            if (!float.IsInfinity(miner.MaxExternalPressure) &&
                tile.Air.Pressure > miner.MaxExternalPressure - miner.SpawnAmount * miner.SpawnTemperature * Atmospherics.R / tile.Air.Volume)
            {
                miner.Broken = true;
                return(false);
            }

            // External gas amount above threshold.
            if (!float.IsInfinity(miner.MaxExternalAmount) && tile.Air.TotalMoles > miner.MaxExternalAmount)
            {
                miner.Broken = true;
                return(false);
            }

            miner.Broken = false;
            return(true);
        }
        private bool CheckMinerOperation(GasMinerComponent miner, [NotNullWhen(true)] out GasMixture?environment)
        {
            environment = _atmosphereSystem.GetTileMixture(EntityManager.GetComponent <TransformComponent>(miner.Owner).Coordinates, true);

            // Space.
            if (_atmosphereSystem.IsTileSpace(EntityManager.GetComponent <TransformComponent>(miner.Owner).Coordinates))
            {
                miner.Broken = true;
                return(false);
            }

            // Air-blocked location.
            if (environment == null)
            {
                miner.Broken = true;
                return(false);
            }

            // External pressure above threshold.
            if (!float.IsInfinity(miner.MaxExternalPressure) &&
                environment.Pressure > miner.MaxExternalPressure - miner.SpawnAmount * miner.SpawnTemperature * Atmospherics.R / environment.Volume)
            {
                miner.Broken = true;
                return(false);
            }

            // External gas amount above threshold.
            if (!float.IsInfinity(miner.MaxExternalAmount) && environment.TotalMoles > miner.MaxExternalAmount)
            {
                miner.Broken = true;
                return(false);
            }

            miner.Broken = false;
            return(true);
        }