private void Shutdown() { // A different save may be chosen which can have different progress, so we need to reload the db and helpers. UnsubscribeEvents(); this.ReloadHelpers = true; this.CurrentGiftHelper = null; Helper.Events.Display.MenuChanged -= OnMenuChanged; }
/// <summary>Raised after a game menu is opened, closed, or replaced.</summary> /// <param name="sender">The event sender.</param> /// <param name="e">The event data.</param> private void OnMenuChanged(object sender, MenuChangedEventArgs e) { // menu closed if (e.NewMenu == null) { if (this.CurrentGiftHelper != null) { Utils.DebugLog("Closing current helper: " + this.CurrentGiftHelper.GetType()); UnsubscribeEvents(); this.CurrentGiftHelper.OnClose(); } return; } // menu opened/changed Type newMenuType = e.NewMenu.GetType(); if (this.WasResized && this.CurrentGiftHelper != null && this.CurrentGiftHelper.IsOpen && e.OldMenu?.GetType() == newMenuType) { // resize event Utils.DebugLog("[OnClickableMenuChanged] Invoking resize event on helper: " + this.CurrentGiftHelper.GetType()); this.CurrentGiftHelper.OnResize(e.NewMenu); this.WasResized = false; return; } this.WasResized = false; if (this.GiftHelpers.ContainsKey(newMenuType)) { // Close the current gift helper if (this.CurrentGiftHelper != null) { Utils.DebugLog("[OnClickableMenuChanged] Closing current helper: " + this.CurrentGiftHelper.GetType()); UnsubscribeEvents(); this.CurrentGiftHelper.OnClose(); } this.CurrentGiftHelper = this.GiftHelpers[newMenuType]; if (!this.CurrentGiftHelper.IsInitialized) { Utils.DebugLog("[OnClickableMenuChanged initialized helper: " + this.CurrentGiftHelper.GetType()); this.CurrentGiftHelper.Init(e.NewMenu); } if (this.CurrentGiftHelper.OnOpen(e.NewMenu)) { Utils.DebugLog("[OnClickableMenuChanged Successfully opened helper: " + this.CurrentGiftHelper.GetType()); // Only subscribe to the events if it opened successfully SubscribeEvents(); } } }
private void LoadGiftHelpers(IModHelper helper) { Utils.DebugLog("Initializing gift helpers"); // TODO: add a reload method to the gift helpers instead of fully re-creating them // Force the gift info to be rebuilt IGiftDataProvider dataProvider = null; if (Config.ShowOnlyKnownGifts) { // The prefix is purely for convenience. Mostly so I know which is which. string prefix = new string(Game1.player.Name.Where(char.IsLetterOrDigit).ToArray()); string path = this.Config.ShareKnownGiftsWithAllSaves ? Path.Combine(StoredGiftDatabase.DBRoot, StoredGiftDatabase.DBFileName) : Path.Combine(StoredGiftDatabase.DBRoot, $"{prefix}_{Game1.player.UniqueMultiplayerID}", StoredGiftDatabase.DBFileName); GiftDatabase = new StoredGiftDatabase(helper, path); if (this.ModManifest.Version.IsNewerThan("2.7") && !this.Config.ShareKnownGiftsWithAllSaves) { string oldPath = Path.Combine(StoredGiftDatabase.DBRoot, Constants.SaveFolderName, StoredGiftDatabase.DBFileName); string fullOldPath = Path.Combine(helper.DirectoryPath, oldPath); if (File.Exists(fullOldPath)) { Utils.DebugLog($"Found old DB at {oldPath}. Migrating to {path}.", LogLevel.Info); StoredGiftDatabase dbRef = (StoredGiftDatabase)GiftDatabase; StoredGiftDatabase.MigrateDatabase(helper, oldPath, ref dbRef); } } dataProvider = new ProgressionGiftDataProvider(GiftDatabase); ControlEvents.MouseChanged += CheckGiftGivenAfterMouseChanged; ControlEvents.ControllerButtonPressed += CheckGiftGivenAfterControllerButtonPressed; } else { GiftDatabase = new GiftDatabase(helper); dataProvider = new AllGiftDataProvider(GiftDatabase); ControlEvents.MouseChanged -= CheckGiftGivenAfterMouseChanged; ControlEvents.ControllerButtonPressed -= CheckGiftGivenAfterControllerButtonPressed; } // Add the helpers if they're enabled in config CurrentGiftHelper = null; this.GiftHelpers = new Dictionary <Type, IGiftHelper>(); if (Config.ShowOnCalendar) { this.GiftHelpers.Add(typeof(Billboard), new CalendarGiftHelper(dataProvider, Config, helper.Reflection, helper.Translation)); } if (Config.ShowOnSocialPage) { this.GiftHelpers.Add(typeof(GameMenu), new SocialPageGiftHelper(dataProvider, Config, helper.Reflection, helper.Translation)); } MenuEvents.MenuClosed += OnClickableMenuClosed; MenuEvents.MenuChanged += OnClickableMenuChanged; }
private void OnClickableMenuChanged(object sender, EventArgsClickableMenuChanged e) { DebugPrintMenuInfo(e.PriorMenu, e.NewMenu); // Reset flag wasMenuClosedInvoked = false; previousMenu = e.PriorMenu; Type newMenuType = e.NewMenu.GetType(); if (currentGiftHelper != null && currentGiftHelper.IsOpen() && e.PriorMenu != null && e.PriorMenu.GetType() == newMenuType) { // resize event Utils.DebugLog("[OnClickableMenuChanged] Invoking resize event on helper: " + currentGiftHelper.GetType().ToString()); currentGiftHelper.OnResize(e.NewMenu); return; } if (giftHelpers.ContainsKey(newMenuType)) { // Close the current gift helper if (currentGiftHelper != null) { Utils.DebugLog("[OnClickableMenuChanged] Closing current helper: " + currentGiftHelper.GetType().ToString()); UnsubscribeEvents(); currentGiftHelper.OnClose(); } currentGiftHelper = giftHelpers[newMenuType]; if (!currentGiftHelper.IsInitialized()) { Utils.DebugLog("[OnClickableMenuChanged initialized helper: " + currentGiftHelper.GetType().ToString()); currentGiftHelper.Init(e.NewMenu); } if (currentGiftHelper.OnOpen(e.NewMenu)) { Utils.DebugLog("[OnClickableMenuChanged Successfully opened helper: " + currentGiftHelper.GetType().ToString()); // Only subscribe to the events if it opened successfully SubscribeEvents(); } } }
private void LoadGiftHelpers(IModHelper helper) { Utils.DebugLog("Initializing gift helpers"); // TODO: add a reload method to the gift helpers instead of fully re-creating them // Force the gift info to be rebuilt IGiftDataProvider dataProvider = null; if (Config.ShowOnlyKnownGifts) { string path = this.Config.ShareKnownGiftsWithAllSaves ? Path.Combine(StoredGiftDatabase.DBRoot, StoredGiftDatabase.DBFileName) : Path.Combine(StoredGiftDatabase.DBRoot, Constants.SaveFolderName, StoredGiftDatabase.DBFileName); GiftDatabase = new StoredGiftDatabase(helper, path); dataProvider = new ProgressionGiftDataProvider(GiftDatabase); ControlEvents.MouseChanged += CheckGiftGivenAfterMouseChanged; ControlEvents.ControllerButtonPressed += CheckGiftGivenAfterControllerButtonPressed; } else { GiftDatabase = new GiftDatabase(helper); dataProvider = new AllGiftDataProvider(GiftDatabase); ControlEvents.MouseChanged -= CheckGiftGivenAfterMouseChanged; ControlEvents.ControllerButtonPressed -= CheckGiftGivenAfterControllerButtonPressed; } // Add the helpers if they're enabled in config CurrentGiftHelper = null; this.GiftHelpers = new Dictionary <Type, IGiftHelper>(); if (Config.ShowOnCalendar) { this.GiftHelpers.Add(typeof(Billboard), new CalendarGiftHelper(dataProvider, Config, helper.Reflection, helper.Translation)); } if (Config.ShowOnSocialPage) { this.GiftHelpers.Add(typeof(GameMenu), new SocialPageGiftHelper(dataProvider, Config, helper.Reflection, helper.Translation)); } MenuEvents.MenuClosed += OnClickableMenuClosed; MenuEvents.MenuChanged += OnClickableMenuChanged; }