コード例 #1
0
        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;
                }
            }
        }
コード例 #2
0
        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));
        }
コード例 #3
0
ファイル: MelonMain.cs プロジェクト: gurrenm3/BTD-Mod-Helper
        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");
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 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;
         }
     }
 }
コード例 #6
0
 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();
 }
コード例 #7
0
        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();
            }
        }
コード例 #8
0
    // 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;
        }
    }
コード例 #9
0
        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();
            }
        }
コード例 #10
0
 //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;
 }
コード例 #11
0
 public static void OnGeneratingWorld() => ModSettingsHandler.SyncWorldWeightsIntoLocalWeights();
コード例 #12
0
ファイル: MelonMain.cs プロジェクト: gurrenm3/BTD-Mod-Helper
        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;
        }