private IEnumerator SetupRoomElevatorSwitch() { SetupRoom setupRoom = SceneManager.Instance.CurrentRoom as SetupRoom; if (setupRoom == null) { yield break; } try { ElevatorRoomGameObject = Resources.Load <GameObject>("PC/Prefabs/ElevatorRoom/ElevatorBombRoom"); } catch (Exception ex) { DebugHelper.LogException(ex, "Can't load the Elevator room prefab."); gameObject.SetActive(false); yield break; } if (setupRoom.ElevatorSwitch == null) { ElevatorSwitch.OnInteract += OnInteract; ElevatorLEDOn.SetActive(IsON); ElevatorLEDOff.SetActive(!IsON); ElevatorSwitch.transform.localEulerAngles = new Vector3(IsON ? 55 : -55, 0, 0); yield break; } ElevatorSwitch elevatorSwitch = setupRoom.ElevatorSwitch; DebugHelper.Log("Found an Elevator switch, Activating it now"); try { elevatorSwitch.GetComponentInChildren <Selectable>(true).SelectableArea.ActivateSelectableArea(); elevatorSwitch.Switch.SetInitialState(GameplayState.GameplayRoomPrefabOverride != null); elevatorSwitch.LEDOn.SetActive(GameplayState.GameplayRoomPrefabOverride != null); elevatorSwitch.LEDOff.SetActive(GameplayState.GameplayRoomPrefabOverride == null); elevatorSwitch.Switch.OnToggle += toggleState => { DebugHelper.Log($"Toggle State = {toggleState}"); if (elevatorSwitch.On() && IRCConnection.Instance.State != IRCConnectionState.Connected) { elevatorSwitch.Switch.Toggle(); Audio.PlaySound(KMSoundOverride.SoundEffect.Strike, elevatorSwitch.Switch.transform); return; } GameplayState.GameplayRoomPrefabOverride = toggleState ? ElevatorRoomGameObject : null; IRCConnection.SendMessageFormat("Elevator is {0}", GameplayState.GameplayRoomPrefabOverride == null ? (ElevatorRoomGameObject == null ? "not loaded" : "off") : "on"); elevatorSwitch.LEDOn.SetActive(GameplayState.GameplayRoomPrefabOverride != null); elevatorSwitch.LEDOff.SetActive(GameplayState.GameplayRoomPrefabOverride == null); }; } catch (Exception ex) { DebugHelper.LogException(ex, "Could not activate elevator switch due to an exception:"); yield break; } elevatorSwitch.gameObject.SetActive(true); yield return(null); yield return(null); elevatorSwitch.gameObject.SetActive(true); gameObject.SetActive(false); }