コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }