public void SetWeightReference(string race, float value) { string fullID = ModSettingsHandler.GetRaceSettingWeightID(windowContext, race); if (fullID != null) { SettingHandle <float> handle = windowHandles.FirstOrFallback(h => h.Name == fullID, null); if (handle != null) { if (value > 1.0f) { value = 1.0f; } if (value >= 0.0f) { prevAdjustedRaces[race] = false; } else if (value < 0.0f) { if (race.ToLower() == "human" && windowContext == HandleContext.GENERAL) { value = handle.DefaultValue; } else { prevAdjustedRaces[race] = true; } } handle.Value = value; } } }
public override void OnApplicationStart() { MelonLogger.Msg("Mod has finished loading"); MelonLogger.Msg("Checking for updates..."); var updateDir = this.GetModDirectory() + "\\UpdateInfo"; Directory.CreateDirectory(updateDir); UpdateHandler.SaveModUpdateInfo(updateDir); var allUpdateInfo = UpdateHandler.LoadAllUpdateInfo(updateDir); UpdateHandler.CheckForUpdates(allUpdateInfo, modsNeedingUpdates); string settingsDir = this.GetModSettingsDir(createIfNotExists: true); ModSettingsHandler.InitializeModSettings(settingsDir); ModSettingsHandler.LoadModSettings(settingsDir); ModMonoBehavior.LoadAllModMonoBehaviors(); Schedule_GameModel_Loaded(); Harmony.PatchPostfix(typeof(SettingsScreen), nameof(SettingsScreen.OnShow), typeof(MelonMain), nameof(MelonMain.SettingsPatch)); }
public override void OnApplicationStart() { MelonLogger.Msg("Checking for updates..."); var updateDir = this.GetModDirectory() + "\\UpdateInfo"; Directory.CreateDirectory(updateDir); UpdateHandler.SaveModUpdateInfo(updateDir); var allUpdateInfo = UpdateHandler.LoadAllUpdateInfo(updateDir); UpdateHandler.CheckForUpdates(allUpdateInfo, modsNeedingUpdates); //CheckModsForUpdates(); var settingsDir = this.GetModSettingsDir(true); ModSettingsHandler.InitializeModSettings(settingsDir); ModSettingsHandler.LoadModSettings(settingsDir); MainMenu.hasSeenModderWarning = AutoHideModdedClientPopup; Schedule_GameModel_Loaded(); MelonLogger.Msg("Mod has finished loading"); }
public float GrabWeightReference(string race, HandleContext context, bool returnNegative = false) { string fullID = ModSettingsHandler.GetRaceSettingWeightID(context, race); if (fullID != null) { SettingHandle <float> handle = windowHandles.FirstOrFallback(h => h.Name == fullID, null); if (handle != null) { if ((prevAdjustedRaces[race] && windowContext == context) || (handle.Value < 0.0f && windowContext != context)) { if (returnNegative) { return(-1.0f); } switch (context) { case HandleContext.STARTING: return(GrabWeightReference(race, HandleContext.WORLD)); case HandleContext.WORLD: case HandleContext.LOCAL: //This is performed so that it can also return the human's race setting return(GrabWeightReference(race, HandleContext.GENERAL)); case HandleContext.GENERAL: KeyValuePair <string, RaceDiversificationPool> data = racesDiversified.FirstOrFallback(r => r.Key == race); if (data.Key != null) { return(data.Value.flatGenerationWeight); } break; } } //This does not display negatives (checkbox will check for that instead) if (handle.Value >= 0.0f) { return(handle.Value); } else { return(0.0f); } } } return(0.0f); }
private void EvaluateWhichDefsAreAdjusted() { foreach (string race in ModSettingsHandler.evaluatedRaces) { string fullID = ModSettingsHandler.GetRaceSettingWeightID(windowContext, race); SettingHandle <float> handle = windowHandles.FirstOrFallback(h => h.Name == fullID, null); if (handle.Value < 0.0f) { prevAdjustedRaces[race] = true; } else { prevAdjustedRaces[race] = false; } } }
public override void PreClose() { foreach (SettingHandle <float> handle in windowHandles) { //Should only update values within this window's context if (ModSettingsHandler.WhatContextIsID(handle.Name) == windowContext) { float value = handle.Value; if (prevAdjustedRaces[handle.Title]) { value = -1f; } else { value = GrabWeightReference(handle.Title, windowContext); } ModSettingsHandler.allHandleReferences.Find(h => h.Name == handle.Name).Value = value; } } base.PreClose(); }
public override void OnMainMenu() { if (UpdateHandler.updatedMods && PopupScreen.instance != null) { PopupScreen.instance.ShowPopup(PopupScreen.Placement.menuCenter, "Restart Required", "You've downloaded new updates for mods, but still need to restart your game to apply them.\n" + "\nWould you like to do that now?", new Action(() => MenuManager.instance.QuitGame()), "Yes, quit the game", null, "Not now", Popup.TransitionAnim.Update); UpdateHandler.updatedMods = false; } //TODO: with only external changing, settings should load when going to the main menu //TODO: with in game changing, settings should save when going to the main menu //ModSettingsHandler.SaveModSettings(modSettingsDir); ModSettingsHandler.LoadModSettings(this.GetModSettingsDir()); if (!scheduledInGamePatch) { Schedule_InGame_Loaded(); } }
// Update is called once per frame void Update() { if (Active) { switch (Mode) { case GravityMode.Global: Physics.gravity = GravityVector; // set the global gravity to our gravity break; case GravityMode.Relative: Physics.gravity = Quaternion.Euler(ServiceProvider.Instance.PlayerAircraft.MainCockpitRotation) * GravityVector; // set the global gravity to our gravity, relative to the main cockpit break; } } else if (LastActive) { // make sure gravity is normal when this mod is disabled Physics.gravity = new Vector3(0.0f, -9.81f, 0.0f); } LastActive = Active; if (!ModSettingsHandler.ModSettingsReady) { // if the mod settings aren't ready to generate settings, wait return; } if (SettingsPage == null || SettingsPage.Equals(null)) { // if we have no settings page SettingsPage = ModSettingsHandler.AddSettingsPage("AdjustableGravity", "Adjustable Gravity", "Setting for the global gravity"); // generate page ActiveSetting = ModSettingsHandler.AddSettingToPage(SettingsPage, "Active", "Mod Active", ModSettingTypes.Toggle, true.ToString()); // and settings GravitySetting = ModSettingsHandler.AddSettingToPage(SettingsPage, "Gravity", "Gravity", ModSettingTypes.Vector3, new Vector3(0.0f, -9.81f, 0.0f).ToStringCompact()); GravityModeSetting = ModSettingsHandler.AddSettingToPage(SettingsPage, "GravityMode", "Gravity Mode", ModSettingTypes.Dropdown, "0", GravityMode.Global.ToString(), GravityMode.Relative.ToString()); SettingsPage.LoadSettings(); // load saved settings (if they've been saved before, otherwise defaults) bool.TryParse(ActiveSetting.Value, out Active); // parse active ModSettingConverter.Vector3TryParse(GravitySetting.Value, ref GravityVector); // parse the GravitySetting out to our GravityVector int GMode = 0; int.TryParse(GravityModeSetting.Value, out GMode); Mode = (GravityMode)GMode; } }
public override void OnFrontEndWorld() { // this code won't work for BATTD because it doesn't have PopupScreen.instance. Need to find replacement /*if (UpdateHandler.updatedMods && PopupScreen.instance != null) * { * PopupScreen.instance.ShowPopup(PopupScreen.Placement.menuCenter, "Restart Required", * "You've downloaded new updates for mods, but still need to restart your game to apply them.\n" + * "\nWould you like to do that now?", new Action(() => MenuManager.instance.QuitGame()), * "Yes, quit the game", null, "Not now", Popup.TransitionAnim.Update); * UpdateHandler.updatedMods = false; * }*/ //TODO: with only external changing, settings should load when going to the main menu //TODO: with in game changing, settings should save when going to the main menu //ModSettingsHandler.SaveModSettings(modSettingsDir); ModSettingsHandler.LoadModSettings(this.GetModSettingsDir()); if (!scheduledInGamePatch) { Schedule_InGame_Loaded(); } }
//Harmony manual postfix method public static void OnResetCreateWorldParams() { ModSettingsHandler.ResetHandle(ref ModSettingsHandler.setLocalWorldWeights, HandleContext.WORLD); ModSettingsHandler.ResetHandle(ref ModSettingsHandler.setLocalStartingPawnWeights, HandleContext.STARTING); ModSettingsHandler.OverrideAllAlienPawnkindsFromStartingPawns = false; }
public static void OnGeneratingWorld() => ModSettingsHandler.SyncWorldWeightsIntoLocalWeights();
public override void OnTitleScreen() { ModSettingsHandler.SaveModSettings(this.GetModSettingsDir()); if (!scheduledInGamePatch) { Schedule_InGame_Loaded(); } AutoSave.InitAutosave(this.GetModSettingsDir(true)); OpenLocalDirectory.OnInitialized.Add(option => { var buttonOption = (ButtonOption)option; buttonOption.ButtonText.text = "Open"; buttonOption.Button.AddOnClick(() => Process.Start(FileIOUtil.sandboxRoot)); }); ExportTowerJSONs.OnInitialized.Add(option => { var buttonOption = (ButtonOption)option; buttonOption.ButtonText.text = "Export"; buttonOption.Button.AddOnClick(() => { MelonLogger.Msg("Dumping Towers to local files"); foreach (var tower in Game.instance.model.towers) { var path = "Towers/" + tower.baseId + "/" + tower.name + ".json"; try { FileIOUtil.SaveObject(path, tower); MelonLogger.Msg("Saving " + FileIOUtil.sandboxRoot + path); } catch (Exception) { MelonLogger.Error("Failed to save " + FileIOUtil.sandboxRoot + path); } } PopupScreen.instance.ShowOkPopup($"Finished exporting towers to {FileIOUtil.sandboxRoot + "Towers"}"); }); }); ExportUpgradeJSONs.OnInitialized.Add(option => { var buttonOption = (ButtonOption)option; buttonOption.ButtonText.text = "Export"; buttonOption.Button.AddOnClick(() => { MelonLogger.Msg("Exporting Upgrades to local files"); foreach (var upgrade in Game.instance.model.upgrades) { var path = "Upgrades/" + upgrade.name + ".json"; try { FileIOUtil.SaveObject(path, upgrade); MelonLogger.Msg("Saving " + FileIOUtil.sandboxRoot + path); } catch (Exception) { MelonLogger.Error("Failed to save " + FileIOUtil.sandboxRoot + path); } } PopupScreen.instance.ShowOkPopup( $"Finished exporting upgrades to {FileIOUtil.sandboxRoot + "Upgrades"}"); }); }); afterTitleScreen = true; }