// ReSharper disable once InconsistentNaming public static bool EnterToggle(OverlayMenu __instance, KIconToggleMenu.ToggleInfo toggle_info) { try { //bool toggleMaterialColor = ((OverlayMenu.OverlayToggleInfo)toggle_info).simView bool toggleMaterialColor = (SimViewMode)GetField(toggle_info, "simView") == (SimViewMode)IDs.ToggleMaterialColorOverlayID; if (!toggleMaterialColor) { return(true); } State.ConfiguratorState.Enabled = !State.ConfiguratorState.Enabled; RefreshMaterialColor(); return(false); } catch (Exception e) { State.Logger.Log("EnterToggle failed."); State.Logger.Log(e); return(true); } }
// ReSharper disable once InconsistentNaming public static bool EnterToggle(OverlayMenu __instance, KIconToggleMenu.ToggleInfo toggle_info) { try { bool toggleMaterialColor = Traverse.Create(toggle_info).Field <HashedString>("simView").Value == IDs.MaterialColorOverlayHS; if (!toggleMaterialColor) { return(true); } State.ConfiguratorState.Enabled = !State.ConfiguratorState.Enabled; Painter.Refresh(); return(false); } catch (Exception e) { State.Logger.Log("EnterToggle failed."); State.Logger.Log(e); return(true); } }
public static void Postfix(ManagementMenu.ScreenData screenData, ManagementMenu __instance) { KIconToggleMenu.ToggleInfo researchInfo = Traverse.Create(__instance).Field("researchInfo").GetValue <KIconToggleMenu.ToggleInfo>(); ManagementMenu.ScreenData activeScreen = Traverse.Create(__instance).Field("activeScreen").GetValue <ManagementMenu.ScreenData>(); if (screenData.toggleInfo == researchInfo && activeScreen == screenData) { RequirementFunctions.CountResourcesInReservoirs(); ResearchScreen researchScreen = (ResearchScreen)ManagementMenu.Instance.researchScreen; Dictionary <Tech, ResearchEntry> entryMap = Traverse.Create(researchScreen).Field("entryMap").GetValue <Dictionary <Tech, ResearchEntry> >(); foreach (Tech tech in entryMap.Keys) { if (!tech.IsComplete()) { LocText researchName = Traverse.Create(entryMap[tech]).Field("researchName").GetValue <LocText>(); if (!TechRequirements.Instance.HasTechReq(tech.Id)) { continue; } researchName.GetComponent <ToolTip>().toolTip = CreateTechTooltipText(tech); } } } /*else if (screenData.toggleInfo == researchInfo && activeScreen != screenData) * Debug.Log("ResearchRequirements: Research closed"); * else * Debug.Log("ResearchRequirements: Other screen toogled");*/ }
// TODO: log exception public static void EnterToggleSprite(KIconToggleMenu.ToggleInfo toggleInfo, KIconToggleMenu toggleMenu) { try { // TODO: remove magic string if (toggleInfo.icon == "overlay_materialcolor") { toggleInfo.toggle.fgImage.sprite = FileManager.LoadSpriteFromFile(Common.Paths.MaterialColorOverlayIconPath, 256, 256); } } catch (Exception e) { } }
/// <summary> /// Gets an instance of the private overlay toggle info class used for creating new /// overlay buttons. /// </summary> /// <param name="text">The button text to be shown on mouseover.</param> /// <param name="icon_name">The icon to show in the overlay list.</param> /// <param name="sim_view">The overlay mode to enter when selected.</param> /// <returns>The button to be added.</returns> private static KIconToggleMenu.ToggleInfo CreateOverlayInfo(string text, string icon_name, HashedString sim_view, Action openKey, string tooltip) { const int KNOWN_PARAMS = 7; KIconToggleMenu.ToggleInfo info = null; ConstructorInfo[] cs; if (OVERLAY_TYPE == null || (cs = OVERLAY_TYPE.GetConstructors(INSTANCE_ALL)). Length != 1) { PUtil.LogWarning("Unable to add PipPlantOverlay - missing constructor"); } else { var cons = cs[0]; var toggleParams = cons.GetParameters(); int paramCount = toggleParams.Length; // Manually plug in the knowns if (paramCount < KNOWN_PARAMS) { PUtil.LogWarning("Unable to add PipPlantOverlay - parameters missing"); } else { object[] args = new object[paramCount]; args[0] = text; args[1] = icon_name; args[2] = sim_view; args[3] = ""; args[4] = openKey; args[5] = tooltip; args[6] = text; // 3 and further (if existing) get new optional values for (int i = KNOWN_PARAMS; i < paramCount; i++) { var op = toggleParams[i]; if (op.IsOptional) { args[i] = op.DefaultValue; } else { PUtil.LogWarning("Unable to add PipPlantOverlay - new parameters"); args[i] = null; } } info = cons.Invoke(args) as KIconToggleMenu.ToggleInfo; } } return(info); }
static bool Prefix(PlanScreen __instance, KButtonEvent e, KIconToggleMenu.ToggleInfo ___activeCategoryInfo) { bool isActiveMenu = ___activeCategoryInfo != null; bool isActiveOverlay = OverlayScreen.Instance.GetMode() != OverlayModes.None.ID; // The first click, when something is selected, doesn't get processed here. // It goes through ToolMenu and gets processed by PlanScreen.OnActiveToolChanged. // If both are active, check if they're supposed to be closed on the second click, and close. if (isActiveMenu && isActiveOverlay && TryConsumeRightClick()) { if (Options.Opts.BuildMenu == Options.ClickNum.Two) { CloseMenu(); } if (Options.Opts.Overlay == Options.ClickNum.Two) { CloseOverlay(); } } // If either the menu or overlay is active, close it. else if ((isActiveMenu ^ isActiveOverlay) && TryConsumeRightClick()) { if (isActiveMenu) { CloseMenu(); } if (isActiveOverlay) { CloseOverlay(); } } return(false); bool TryConsumeRightClick() => PlayerController.Instance.ConsumeIfNotDragging(e, Action.MouseRight); void CloseMenu() => __instance.OnClickCategory(___activeCategoryInfo); void CloseOverlay() => OverlayScreen.Instance.ToggleOverlay(OverlayModes.None.ID, true); }
public static void Postfix(ManagementMenu.ScreenData screenData, ManagementMenu __instance) { KIconToggleMenu.ToggleInfo researchInfo = Traverse.Create(__instance).Field("researchInfo").GetValue <KIconToggleMenu.ToggleInfo>(); ManagementMenu.ScreenData activeScreen = Traverse.Create(__instance).Field("activeScreen").GetValue <ManagementMenu.ScreenData>(); if (screenData.toggleInfo == researchInfo && activeScreen == screenData) { RequirementFunctions.CountResourcesInReservoirs(); ResearchScreen researchScreen = Traverse.Create(ManagementMenu.Instance).Field("researchScreen").GetValue <ResearchScreen>(); if (researchScreen == null) { return; } Dictionary <Tech, ResearchEntry> entryMap = Traverse.Create(researchScreen).Field("entryMap").GetValue <Dictionary <Tech, ResearchEntry> >(); foreach (Tech tech in entryMap.Keys) { if (!tech.IsComplete()) { LocText researchName = Traverse.Create(entryMap[tech]).Field("researchName").GetValue <LocText>(); researchName.GetComponent <ToolTip>().toolTip = CreateTechTooltipText(tech); } } } }