public MyOxygenRoomLink(MyOxygenRoom room)
 {
     Room      = room;
     Room.Link = this;
 }
        private void RemoveBlock(Vector3I deletedBlockPosition)
        {
            Vector3I     current = deletedBlockPosition;
            MyOxygenRoom maxRoom = GetOxygenRoomForCubeGridPosition(current);

            for (int i = 0; i < 6; i++)
            {
                Vector3I neighbour = current + m_neighbours[i];

                if (!IsInBounds(current))
                {
                    Debug.Fail("Should always be in bounds");
                    continue;
                }

                if (IsPressurized(current, neighbour))
                {
                    continue;
                }

                var neighbourRoom = GetOxygenRoomForCubeGridPosition(neighbour);
                if (neighbourRoom != null)
                {
                    if (maxRoom == null)
                    {
                        maxRoom = neighbourRoom;
                    }
                    else if (maxRoom.blockCount < neighbourRoom.blockCount)
                    {
                        maxRoom = neighbourRoom;
                    }
                }
            }

            if (maxRoom == null)
            {
                return;
            }

            for (int i = 0; i < 6; i++)
            {
                Vector3I neighbour = current + m_neighbours[i];

                if (!IsInBounds(current))
                {
                    Debug.Fail("Should always be in bounds");
                    continue;
                }

                var neighbourRoom = GetOxygenRoomForCubeGridPosition(neighbour);
                if (neighbourRoom != null && neighbourRoom != maxRoom)
                {
                    maxRoom.blockCount   += neighbourRoom.blockCount;
                    maxRoom.OxygenAmount += neighbourRoom.OxygenAmount;


                    if (maxRoom.IsPressurized && !neighbourRoom.IsPressurized)
                    {
                        if (maxRoom.OxygenLevel(m_cubeGrid.GridSize) - neighbourRoom.EnvironmentOxygen > 0.2f)
                        {
                            Vector3D from = m_cubeGrid.GridIntegerToWorld(current);
                            Vector3D to   = m_cubeGrid.GridIntegerToWorld(neighbour);

                            AddDepressurizationEffects(from, to);
                        }

                        maxRoom.IsPressurized        = false;
                        maxRoom.OxygenAmount         = 0f;
                        maxRoom.EnvironmentOxygen    = Math.Max(maxRoom.EnvironmentOxygen, neighbourRoom.EnvironmentOxygen);
                        maxRoom.DepressurizationTime = MySandboxGame.TotalGamePlayTimeInMilliseconds;
                    }
                    else if (!maxRoom.IsPressurized && neighbourRoom.IsPressurized)
                    {
                        maxRoom.EnvironmentOxygen = Math.Max(maxRoom.EnvironmentOxygen, neighbourRoom.EnvironmentOxygen);
                        if (neighbourRoom.OxygenLevel(m_cubeGrid.GridSize) - maxRoom.EnvironmentOxygen > 0.2f)
                        {
                            Vector3D from = m_cubeGrid.GridIntegerToWorld(neighbour);
                            Vector3D to   = m_cubeGrid.GridIntegerToWorld(current);

                            AddDepressurizationEffects(from, to);
                        }
                    }

                    neighbourRoom.Link.Room = maxRoom;
                }
            }

            Vector3I blockPosition = current - GridMin();

            m_cubeRoom[blockPosition.X, blockPosition.Y, blockPosition.Z].RoomLink = maxRoom.Link;
            maxRoom.blockCount++;
        }
 public MyOxygenBlock(MyOxygenRoom room)
 {
     Room = room;
     PreviousOxygenAmount = 0;
     OxygenChangeTime = 0;
 }
 public MyOxygenRoomLink(MyOxygenRoom room)
 {
     Room = room;
     Room.Link = this;
 }
 public void SetRoom(MyOxygenRoom room)
 {
     Room = room;
     Room.Link = this;
 }
 public MyOxygenRoomLink(MyOxygenRoom room)
 {
     SetRoom(room);
 }