public bool TryRegisterMenu(Type menuType) { if (HandlerMapping.TryGetHandler(menuType, out IMenuHandler handler)) { HandlerMapping.Add(menuType, handler); Log.Debug($"API: Registered {menuType}, handled by {handler.GetType()}"); return(true); } Log.Error($"API: Don't know how to handle {menuType}, not registered!"); return(false); }
/// <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) { // close the current handler and unsubscribe from the events if (this.CurrentMenuHandler != null) { //Log.Trace("[OnMenuClosed] Closing current menu handler"); this.CurrentMenuHandler.Close(); this.CurrentMenuHandler = null; UnsubscribeHandlerEvents(); } return; } // ignore resize event if (e.OldMenu?.GetType() == e.NewMenu?.GetType() && this.WasResizeEvent) { this.WasResizeEvent = false; return; } this.WasResizeEvent = false; // Reset // switch the currently handler to the one for the new menu type var nuMenu = e.NewMenu; Log.TraceIfD($"Menu changed from {e.OldMenu} to {nuMenu}"); if ( HandlerMapping.TryGetHandler(nuMenu.GetType(), out IMenuHandler handler) || HandlerMapping.TryGetHandler(nuMenu.ToString(), out handler) ) { Log.TraceIfD($"{nuMenu} intercepted"); // Close the current one if still open, it's likely invalid if (this.CurrentMenuHandler != null) { DequeueMenuHandlerOpener(); this.CurrentMenuHandler.Close(); } EnqueueMenuHandlerOpener(nuMenu, handler); } else { Log.TraceIfD($"{nuMenu} not intercepted, don't know how"); } }