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); }; } }
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); }
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. } }
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; }
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); }