Example #1
0
            // 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);
                }
            }
Example #2
0
            // 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");*/
            }
Example #4
0
 // 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) { }
 }
Example #5
0
        /// <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);
        }
Example #6
0
        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);
                        }
                    }
                }
            }