示例#1
0
    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);
    }