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 void SetRoom(MyOxygenRoom room) { Room = room; Room.Link = this; }
public MyOxygenRoomLink(MyOxygenRoom room) { SetRoom(room); }