Ejemplo n.º 1
0
    public static IEnumerator ModifyFreeplayDevice(bool firstTime)
    {
        yield return(null);

        SetupRoom setupRoom = FindObjectOfType <SetupRoom>();

        if (setupRoom)
        {
            FreeplayDevice freeplayDevice = setupRoom.FreeplayDevice;
            ExecOnDescendants(freeplayDevice.gameObject, gameObj =>
            {
                string gameObjName = gameObj.name;
                if (gameObjName == "FreeplayLabel" || gameObjName == "Free Play Label")
                {
                    gameObj.GetComponent <TMPro.TextMeshPro>().text = CurrentMode == Mode.Normal ? Localization.GetLocalizedString($"FreeplayDevice/label_free{(gameObjName == "FreeplayLabel" ? "playInnerTitle" : "PlayCover")}") : $"{CurrentMode} mode";
                }
            });

            freeplayDevice.CurrentSettings.Time = CurrentMode == Mode.Time ? Modes.settings.TimeModeStartingTime * 60 : originalTime;
            TimeSpan timeSpan = TimeSpan.FromSeconds(freeplayDevice.CurrentSettings.Time);
            freeplayDevice.TimeText.text = string.Format("{0}:{1:00}", (int)timeSpan.TotalMinutes, timeSpan.Seconds);

            if (!firstTime)
            {
                yield break;
            }
            if (CurrentMode == Mode.Normal)
            {
                originalTime = freeplayDevice.CurrentSettings.Time;
            }

            freeplayDevice.TimeIncrement.OnPush          += delegate { ReflectedTypes.IsInteractingField.SetValue(freeplayDevice.TimeIncrement, true); };
            freeplayDevice.TimeIncrement.OnInteractEnded += delegate
            {
                originalTime = freeplayDevice.CurrentSettings.Time;
                if (CurrentMode != Mode.Time)
                {
                    return;
                }

                Modes.settings.TimeModeStartingTime = freeplayDevice.CurrentSettings.Time / 60;
                Modes.modConfig.Write(Modes.settings);
            };

            freeplayDevice.TimeDecrement.OnPush          += delegate { ReflectedTypes.IsInteractingField.SetValue(freeplayDevice.TimeDecrement, true); };
            freeplayDevice.TimeDecrement.OnInteractEnded += delegate
            {
                originalTime = freeplayDevice.CurrentSettings.Time;
                if (CurrentMode != Mode.Time)
                {
                    return;
                }

                Modes.settings.TimeModeStartingTime = freeplayDevice.CurrentSettings.Time / 60;
                Modes.modConfig.Write(Modes.settings);
            };
        }
    }
Ejemplo n.º 2
0
        private IEnumerator SetupSetupRoom()
        {
            yield return(null);

            SetupRoom setupRoom = FindObjectOfType <SetupRoom>();
            ExtendedMissionSettingsMonitor missionPageMonitor = setupRoom.BombBinder.MissionDetailPage.gameObject.AddComponent <ExtendedMissionSettingsMonitor>();

            Debug.Log("[Extended Mission Settings] Started monitoring Bomb Binder");
        }
    private IEnumerator CheckForBombBinderAndFreeplayDevice()
    {
        yield return(null);

        SetupRoom setupRoom = (SetupRoom)SceneManager.Instance.CurrentRoom;

        _bombBinderCommander = new BombBinderCommander(setupRoom.BombBinder);
        _freeplayCommander   = new FreeplayCommander(setupRoom.FreeplayDevice);
    }
Ejemplo n.º 4
0
        public static void GlobalExceptionHandler(Exception ex)
        {
            string message = ex.GetType().Name + ": \"" + ex.Message + "\"" + System.Environment.NewLine + ex.StackTrace;

            Console.Error.WriteLine(message);
            if (SetupRoom is SetupRoom)
            {
                SetupRoom.WriteLine(message);
                SetupRoom.State = SetupRoom.LoadingState.EXCEPTION;
                Room            = SetupRoom;
            }
            if (!Android)
            {
                throw ex;                       // Android just quits without showing exceptions. Don't want that.
            }
        }
Ejemplo n.º 5
0
    private IEnumerator CheckForBrochure()
    {
        yield return(null);

        if (done)
        {
            yield break;
        }
        //Get the SetupRoom to call the ModManagerHoldable
        SetupRoom          setupRoom = (SetupRoom)SceneManager.Instance.CurrentRoom;
        ModManagerHoldable _brochure = setupRoom.ModManagerHoldable;
        //Grab ModButton and move it to give room for the new button
        Selectable ModButton = _brochure.OpenModManagerButton;

        ModButton.transform.Translate(0, 0, 0.01f);
        //Clone the ModButton
        Selectable ManualButton = Object.Instantiate(ModButton, ModButton.transform);
        //Grab the Brochure's selectable to add the new button to the list of its children selectables.
        Selectable Brochure = _brochure.GetComponent <Selectable>();

        //Actually move the new button
        ManualButton.transform.Translate(-0.005f, -0.002f, 0.005f);
        //Quickly grab the texture for the middle panel so I can replace it.
        MeshRenderer replace = _brochure.GetComponent <Transform>().Find("PanelMiddleBack").GetComponent <MeshRenderer>();

        replace.material.mainTexture = ManualCheckerLoader.Instance.brochureReplacement;
        Brochure.Children            = Brochure.Children.Concat(new[] { ManualButton, null }).ToArray();
        //The text autosizing makes the text smaller, which I do not want. So for now, setting this to false.
        ManualButton.GetComponentInChildren <TextMeshPro>().enableAutoSizing = false;
        ManualButton.GetComponentInChildren <TextMeshPro>().text             = "Manage Manuals";
        //Using this to deal with see through text in the Manual manager, maybe.
        fontmaterial = ManualButton.GetComponentInChildren <TextMeshPro>().fontMaterial;
        font         = ManualButton.GetComponentInChildren <TextMeshPro>().font;

        /*Getting ready to call EnterModManagerStateFromSetup, however, I will be replacing modManagerScene with my own scene
         * As such, I'll basically be copying this method here, and replacing the last line.*/
        //ManualButton.OnInteract += delegate () { button = true; Debug.LogFormat("[Manual] " + button.ToString()); SceneManager.Instance.EnterModManagerStateFromSetup(); return false; };
        //ManualButton.OnInteract += delegate () { button = true; SceneManager.Instance.EnterModManagerStateFromSetup(); return false; };
        ManualButton.OnInteract += delegate() { OnInteract(); return(false); };
        done = true;
    }
Ejemplo n.º 6
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);
    }