internal static void ExtraOnGUI(this Page_ModsConfig instance)
 {
     if (RenameInProgress)
     {
         if ((Event.current.type == EventType.keyDown || Event.current.type == EventType.keyDown || Event.current.type == EventType.used) && (Event.current.keyCode == KeyCode.Escape || Event.current.keyCode == KeyCode.Return))
         {
             RenameInProgress    = false;
             selectedMod.AltName = renameBuf;
         }
     }
     else
     {
         if (Event.current.isMouse && Event.current.button == 1)
         {
             if (selectedMod.OriginalMetaData.Source == ContentSource.SteamWorkshop)
             {
                 CreateModRowActionSteam(GetModEnhanced(selectedMod.OriginalMetaData)).Invoke();
             }
             else
             {
                 CreateModRowActionLocal(GetModEnhanced(selectedMod.OriginalMetaData)).Invoke();
             }
         }
     }
 }
        static void Postfix(Page_ModsConfig __instance, Rect rect)
        {
            ModMetaData selectedMod = __instance.selectedMod;

            if (Prefs.DevMode && selectedMod != null && !selectedMod.IsCoreMod && selectedMod.Source == ContentSource.LocalFolder)
            {
                Rect   buttonRect = new Rect(580f, rect.height - 95f, 200f, 40f);
                string version    = FileUtil.GetModSyncVersionForMod(selectedMod.RootDir);
                if (!String.IsNullOrEmpty(version))
                {
                    // Add the ModSync verion on the top left of the window
                    GameFont origFont = Text.Font;
                    Text.Font = GameFont.Tiny;
                    Widgets.Label(new Rect(350f, 23f, 250f, 40f), "ModSync.ModSyncVersion".Translate().Replace("{version}", version));
                    Text.Font = origFont;

                    // Draw the "Update on ModSync.ninja" button
                    string label = (isSubmitting) ? "ModSync.PleaseWait".Translate() + "..." : "ModSync.UpdateOnModSync".Translate();
                    if (Widgets.ButtonText(buttonRect, label, true, false, !isSubmitting))
                    {
                        HandleUpdateOnModSync(selectedMod, version);
                    }
                }
                else // No ModSync.xml for the mod
                {
                    // Draw the "Upload to ModSync.ninja" button
                    if (Widgets.ButtonText(buttonRect, "ModSync.UploadToModSync".Translate()))
                    {
                        NetworkManager.OpenModSyncUrl();
                    }
                }
            }
        }
예제 #3
0
 public override void OnClicked(Page_ModsConfig window)
 {
     if (!Resolvers.EnumerableNullOrEmpty())
     {
         Utilities.FloatMenu(Resolvers);
     }
 }
        private static void PostCloseDetour(this Page_ModsConfig self)
        {
            if (SettingsHandler.LastRestartOnClose.Value != RestartOnClose)
            {
                SettingsHandler.LastRestartOnClose.Value = RestartOnClose;
                HugsLibController.Instance.Settings.SaveChanges();
            }

            ModsConfig.Save();
            int activeModsWhenOpenedHash = (int)typeof(Page_ModsConfig).GetField("activeModsWhenOpenedHash", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(self);

            if (activeModsWhenOpenedHash != ModLister.InstalledModsListHash(true))
            {
                if (RestartOnClose)
                {
                    PlatformHandler.RestartRimWorld();
                }

                //Copy of source from here
                bool assemblyWasLoaded = LoadedModManager.RunningMods.Any((ModContentPack m) => m.LoadedAnyAssembly);
                LongEventHandler.QueueLongEvent(delegate
                {
                    PlayDataLoader.ClearAllPlayData();
                    PlayDataLoader.LoadAllPlayData(false);
                    if (assemblyWasLoaded)
                    {
                        LongEventHandler.ExecuteWhenFinished(delegate
                        {
                            Find.WindowStack.Add(new Dialog_MessageBox("ModWithAssemblyWasUnloaded".Translate(), null, null, null, null, null, false));
                        });
                    }
                }, "LoadingLongEvent", true, null);
            }
        }
예제 #5
0
        internal static bool Promotion(Rect mainRect, Page_ModsConfig page)
        {
            if (SteamManager.Initialized == false)
            {
                return(false);
            }

            var mod = page.selectedMod;

            if (mod == null ||
                ref_steamAuthor(mod.GetWorkshopItemHook()).m_SteamID != CrossPromotion.userID ||
                CrossPromotion.promotionMods.Count == 0)
            {
                return(false);
            }

            var leftColumn  = mainRect.width * 2 / 3;
            var rightColumn = mainRect.width - leftColumn - 10f;

            GUI.BeginGroup(mainRect);
            ContentPart(mainRect, leftColumn, mod, page);
            PromotionPart(mainRect, leftColumn, rightColumn, mod, page);
            GUI.EndGroup();

            return(true);
        }
        public override void OnClicked(Page_ModsConfig window)
        {
            ModMetaData modWithIdentifier = ModLister.GetModWithIdentifier(packageId, ignorePostfix: true);

            if (modWithIdentifier != null && modWithIdentifier.Active)
            {
                window.SelectMod(modWithIdentifier);
            }
        }
예제 #7
0
        // Postfix add a button to the mods page
        public static void PostfixPageModsConfig(Rect rect, Page_ModsConfig __instance)
        {
            Vector2 BottomButSize = new Vector2(150f, 38f);
            float   num           = 10f;
            Rect    rect4         = new Rect(rect.x + rect.width / 2f - BottomButSize.x / 2f, num, BottomButSize.x, BottomButSize.y);

            if (Widgets.ButtonText(rect4, "RimChat.MC.Page.Button.Test".Translate(), true, false, true))
            {
                Log.Warning("Clicked our test postfix button!");
            }
        }
예제 #8
0
        public override void OnClicked(Page_ModsConfig window)
        {
            ModMetaData modWithIdentifier = ModLister.GetModWithIdentifier(packageId, ignorePostfix: true);

            if (modWithIdentifier == null)
            {
                if (!Url.NullOrEmpty())
                {
                    SteamUtility.OpenUrl(Url);
                }
            }
            else if (!modWithIdentifier.Active)
            {
                window.SelectMod(modWithIdentifier);
            }
        }
예제 #9
0
 internal static void OnItemUnsubscribed(RemoteStoragePublishedFileUnsubscribed_t result)
 {
     if (Workshop.IsOurAppId(result.m_nAppID))
     {
         if (Prefs.LogVerbose)
         {
             Log.Message("Workshop: Item unsubscribed: " + result.m_nPublishedFileId);
         }
         Page_ModsConfig page_ModsConfig = Find.WindowStack.WindowOfType <Page_ModsConfig>();
         if (page_ModsConfig != null)
         {
             page_ModsConfig.Notify_SteamItemUnsubscribed(result.m_nPublishedFileId);
         }
         Page_SelectScenario page_SelectScenario = Find.WindowStack.WindowOfType <Page_SelectScenario>();
         if (page_SelectScenario != null)
         {
             page_SelectScenario.Notify_SteamItemUnsubscribed(result.m_nPublishedFileId);
         }
         WorkshopItems.Notify_Unsubscribed(result.m_nPublishedFileId);
     }
 }
        static void Postfix(Page_ModsConfig __instance, Rect rect)
        {
            ModMetaData selectedMod = __instance.selectedMod;

            if (Prefs.DevMode && selectedMod != null && !selectedMod.IsCoreMod && selectedMod.Source == ContentSource.LocalFolder)
            {
                Rect buttonRect = new Rect(580f, rect.height - 95f, 200f, 40f);

                ModToSync mod = null;
                if (File.Exists(selectedMod.RootDir + "/About/ModSync.xml"))
                {
                    // Draw the "Update ModSync" button
                    if (Widgets.ButtonText(buttonRect, "ModSync.UpdateModSyncFile".Translate()))
                    {
                        if (!ModToSyncFactory.TryCreateModToSync(selectedMod, out mod))
                        {
                            mod = null;
                            Log.Error("Could not open ModSync.xml file for [" + selectedMod.Name + "]");
                        }
                    }
                }
                else // No ModSync.xml for the mod
                {
                    if (Widgets.ButtonText(buttonRect, "ModSync.CreateModSyncFile".Translate()))
                    {
                        mod = new ModToSync(selectedMod, new ModSyncInfo(selectedMod.Name, "1.0.0.0"));
                    }
                }

                if (mod != null)
                {
                    string assemblyVersion          = FileUtil.GetVersionFromDll(selectedMod);
                    Dialog_CreateModSyncFile dialog = new Dialog_CreateModSyncFile(mod, assemblyVersion);
                    Find.WindowStack.Add(dialog);
                }
            }
        }
        internal static void DoWindowContents(this Page_ModsConfig instance, Rect rect)
        {
            Rect mainRect = (Rect)AccessTools.Method(typeof(Page_ModsConfig), "GetMainRect").Invoke(instance, new object[] { rect, 0f, true });

            GUI.BeginGroup(mainRect);
            Text.Font = GameFont.Small;
            float num   = 0f;
            Rect  rect2 = new Rect(17f, num, 316f, 30f);

            if (Widgets.ButtonText(rect2, "OpenSteamWorkshop".Translate(), true, false, true))
            {
                SteamUtility.OpenSteamWorkshopPage();
            }
            num += 30f;
            Rect rect3 = new Rect(17f, num, 316f, 30f);

            if (Widgets.ButtonText(rect3, "GetModsFromForum".Translate(), true, false, true))
            {
                Application.OpenURL("http://rimworldgame.com/getmods");
            }
            num += 30f;
            num += 17f;

            // Modlist

            Rect rect4 = new Rect(0f, num, 350f, mainRect.height - num);

            Widgets.DrawMenuSection(rect4, true);

            float height = (float)(ModLister.AllInstalledMods.Count <ModMetaData>() * 34 + 300);
            Rect  rect5  = new Rect(0f, 26f, rect4.width - 16f, height);

            Widgets.BeginScrollView(rect4, ref modListScrollPosition, rect5, true);
            Rect             rect6            = rect5.ContractedBy(4f);
            Listing_Standard listing_Standard = new Listing_Standard();

            listing_Standard.ColumnWidth = rect6.width;
            listing_Standard.Begin(rect6);

            Rect searchBox = listing_Standard.GetRect(26f);

            searchString = TextEntryWidgets.TextEntryWithPlaceHolder(searchBox, searchString, "SearchPlaceHolder".Translate());

            int reorderableGroup = -1;

            if (!SearchInProgress)
            {
                reorderableGroup = ReorderableWidget.NewGroup(delegate(int from, int to) {
                    AccessTools.Method(typeof(ModsConfig), "Reorder").Invoke(null, new object[] { from, to });
                    SoundDefOf.TickHigh.PlayOneShotOnCamera(null);
                });
            }
            int num2 = 0;

            foreach (ModMetaDataEnhanced current in ModsInListOrder())
            {
                DoModRow(listing_Standard, current, num2, reorderableGroup);
                num2++;
            }
            for (int i = 0; i < WorkshopItems.DownloadingItemsCount; i++)
            {
                DoModRowDownloading(listing_Standard, num2);
                num2++;
            }
            listing_Standard.End();
            Widgets.EndScrollView();

            // selected mod details
            Rect position = new Rect(rect4.xMax + 17f, 0f, mainRect.width - rect4.width - 17f, mainRect.height);

            GUI.BeginGroup(position);
            if (selectedMod != null)
            {
                Text.Font = GameFont.Medium;
                Rect rect7 = new Rect(0f, 0f, position.width, 40f);
                Text.Anchor = TextAnchor.UpperCenter;
                Widgets.Label(rect7, selectedMod.OriginalMetaData.Name.Truncate(rect7.width, null));
                Text.Anchor = TextAnchor.UpperLeft;
                if (!selectedMod.OriginalMetaData.IsCoreMod)
                {
                    Rect rect8 = rect7;
                    Text.Font   = GameFont.Tiny;
                    Text.Anchor = TextAnchor.LowerRight;
                    if (!selectedMod.OriginalMetaData.VersionCompatible)
                    {
                        GUI.color = Color.red;
                    }
                    Widgets.Label(rect8, "ModTargetVersion".Translate(new object[]
                    {
                        selectedMod.OriginalMetaData.TargetVersion
                    }));
                    GUI.color   = Color.white;
                    Text.Anchor = TextAnchor.UpperLeft;
                    Text.Font   = GameFont.Small;
                }
                Rect position2 = new Rect(0f, rect7.yMax, 0f, 20f);
                if (selectedMod.OriginalMetaData.previewImage != null)
                {
                    position2.width  = Mathf.Min((float)selectedMod.OriginalMetaData.previewImage.width, position.width);
                    position2.height = (float)selectedMod.OriginalMetaData.previewImage.height * (position2.width / (float)selectedMod.OriginalMetaData.previewImage.width);
                    if (position2.height > 300f)
                    {
                        position2.width *= 300f / position2.height;
                        position2.height = 300f;
                    }
                    position2.x = position.width / 2f - position2.width / 2f;
                    GUI.DrawTexture(position2, selectedMod.OriginalMetaData.previewImage, ScaleMode.ScaleToFit);
                }
                Text.Font = GameFont.Small;
                float num3 = position2.yMax + 10f;
                if (!selectedMod.OriginalMetaData.Author.NullOrEmpty())
                {
                    Rect rect9 = new Rect(0f, num3, position.width / 2f, 25f);
                    Widgets.Label(rect9, "Author".Translate() + ": " + selectedMod.OriginalMetaData.Author);
                }
                if (!selectedMod.OriginalMetaData.Url.NullOrEmpty())
                {
                    float num4   = Mathf.Min(position.width / 2f, Text.CalcSize(selectedMod.OriginalMetaData.Url).x);
                    Rect  rect10 = new Rect(position.width - num4, num3, num4, 25f);
                    Text.WordWrap = false;
                    if (Widgets.ButtonText(rect10, selectedMod.OriginalMetaData.Url, false, false, true))
                    {
                        Application.OpenURL(selectedMod.OriginalMetaData.Url);
                    }
                    Text.WordWrap = true;
                }
                WidgetRow widgetRow = new WidgetRow(position.width, num3 + 25f, UIDirection.LeftThenUp, 99999f, 4f);
                if (SteamManager.Initialized && selectedMod.OriginalMetaData.OnSteamWorkshop)
                {
                    if (widgetRow.ButtonText("Unsubscribe", null, true, false))
                    {
                        Find.WindowStack.Add(Dialog_MessageBox.CreateConfirmation("ConfirmUnsubscribe".Translate(new object[]
                        {
                            selectedMod.OriginalMetaData.Name
                        }), delegate {
                            selectedMod.OriginalMetaData.enabled = false;
                            AccessTools.Method(typeof(Workshop), "Unsubscribe").Invoke(null, new object[] { selectedMod.OriginalMetaData });
                            AccessTools.Method(typeof(Page_ModsConfig), "Notify_SteamItemUnsubscribed").Invoke(instance, new object[] { selectedMod.OriginalMetaData.GetPublishedFileId() });
                        }, true, null));
                    }
                    if (widgetRow.ButtonText("WorkshopPage".Translate(), null, true, false))
                    {
                        SteamUtility.OpenWorkshopPage(selectedMod.OriginalMetaData.GetPublishedFileId());
                    }
                }
                float num5    = num3 + 25f + 24f;
                Rect  outRect = new Rect(0f, num5, position.width, position.height - num5 - 40f);
                float width   = outRect.width - 16f;
                Rect  rect11  = new Rect(0f, 0f, width, Text.CalcHeight(selectedMod.OriginalMetaData.Description, width));
                Widgets.BeginScrollView(outRect, ref modDescriptionScrollPosition, rect11, true);
                Widgets.Label(rect11, selectedMod.OriginalMetaData.Description);
                Widgets.EndScrollView();
                if (Prefs.DevMode && SteamManager.Initialized && selectedMod.OriginalMetaData.CanToUploadToWorkshop())
                {
                    Rect rect12 = new Rect(0f, position.yMax - 40f, 200f, 40f);
                    if (Widgets.ButtonText(rect12, Workshop.UploadButtonLabel(selectedMod.OriginalMetaData.GetPublishedFileId()), true, false, true))
                    {
                        if (!VersionControl.IsWellFormattedVersionString(selectedMod.OriginalMetaData.TargetVersion))
                        {
                            Messages.Message("MessageModNeedsWellFormattedTargetVersion".Translate(new object[]
                            {
                                VersionControl.CurrentVersionString
                            }), MessageSound.RejectInput);
                        }
                        else
                        {
                            Find.WindowStack.Add(Dialog_MessageBox.CreateConfirmation("ConfirmSteamWorkshopUpload".Translate(), delegate {
                                SoundDefOf.TickHigh.PlayOneShotOnCamera(null);
                                Dialog_MessageBox dialog_MessageBox = Dialog_MessageBox.CreateConfirmation("ConfirmContentAuthor".Translate(), delegate {
                                    SoundDefOf.TickHigh.PlayOneShotOnCamera(null);
                                    AccessTools.Method(typeof(Workshop), "Upload").Invoke(null, new object[] { selectedMod.OriginalMetaData });
                                }, true, null);
                                dialog_MessageBox.buttonAText      = "Yes".Translate();
                                dialog_MessageBox.buttonBText      = "No".Translate();
                                dialog_MessageBox.interactionDelay = 6f;
                                Find.WindowStack.Add(dialog_MessageBox);
                            }, true, null));
                        }
                    }
                }
            }
            GUI.EndGroup();
            GUI.EndGroup();

            DoBottomLeftWindowContents(rect);
            DoBottomRightWindowContents(rect);
        }
 internal static void PreOpen(this Page_ModsConfig instance)
 {
     loadedMods = new List <ModMetaDataEnhanced>();
     UpdateLoadedMods();
     selectedMod = loadedMods.FirstOrDefault(mod => mod.Identifier == instance.selectedMod.Identifier);
 }
예제 #13
0
        static void PromotionPart(Rect mainRect, float leftColumn, float rightColumn, ModMetaData mod, Page_ModsConfig page)
        {
            var mainModID = mod.GetPublishedFileId();

            Text.Font = GameFont.Tiny;
            var headerHeight = 30f;
            var headerRect   = new Rect(leftColumn + 10f, -4f, rightColumn - 20f, headerHeight);

            Text.Anchor = TextAnchor.UpperCenter;
            Widgets.Label(headerRect, "Mods of " + mod.Author.Replace("Andreas Pardeike", "Brrainz") + ":".Truncate(headerRect.width, null));
            Text.Anchor = TextAnchor.UpperLeft;

            var outRect       = new Rect(leftColumn + 10f, headerHeight - 4f, rightColumn, mainRect.height - (headerHeight - 4f));
            var width         = outRect.width - 20f;
            var previewHeight = width * 319f / 588f;
            var promoMods     = CrossPromotion.promotionMods.ToArray().Where(m => m.m_nPublishedFileId != mainModID);
            var workshopMods  = WorkshopItems.AllSubscribedItems.Select(wi => wi.PublishedFileId.m_PublishedFileId).ToList();
            var activeMods    = ModLister.AllInstalledMods.Where(meta => meta.Active).Select(meta => meta.GetPublishedFileId().m_PublishedFileId).ToList();

            var height = 0f;

            foreach (var promoMod in promoMods)
            {
                var myModID     = promoMod.m_nPublishedFileId.m_PublishedFileId;
                var isLocalFile = ModLister.AllInstalledMods.Any(meta => meta.GetPublishedFileId().m_PublishedFileId == myModID && meta.Source == ContentSource.LocalFolder);
                var isSubbed    = workshopMods.Contains(myModID);
                CrossPromotion.allVoteStati.TryGetValue(myModID, out var voteStatus);

                if (height > 0)
                {
                    height += 10f;
                }
                var preview = CrossPromotion.PreviewForMod(promoMod.m_nPublishedFileId.m_PublishedFileId);
                if (preview != null)
                {
                    height += width * preview.height / preview.width + 2f;
                    if (isLocalFile == false && (isSubbed == false || (voteStatus == false)))
                    {
                        height += 16f;
                    }
                }
            }

            Widgets.BeginScrollView(outRect, ref rightScroll, new Rect(0f, 0f, width, height), true);
            var firstTime = true;
            var modRect   = new Rect(0f, 0f, width, 0f);

            foreach (var promoMod in promoMods)
            {
                var myModID     = promoMod.m_nPublishedFileId.m_PublishedFileId;
                var isLocalFile = ModLister.AllInstalledMods.Any(meta => meta.GetPublishedFileId().m_PublishedFileId == myModID && meta.Source == ContentSource.LocalFolder);
                var isSubbed    = workshopMods.Contains(myModID);
                var isActive    = activeMods.Contains(myModID);
                CrossPromotion.allVoteStati.TryGetValue(myModID, out var voteStatus);

                if (firstTime == false)
                {
                    modRect.y += 10f;
                }

                var preview = CrossPromotion.PreviewForMod(promoMod.m_nPublishedFileId.m_PublishedFileId);
                if (preview != null)
                {
                    modRect.height = width * preview.height / preview.width;
                    GUI.DrawTexture(modRect, preview, ScaleMode.ScaleToFit);

                    var checkRect = modRect;
                    checkRect.xMax -= 4f;
                    checkRect.yMax -= 4f;
                    checkRect.xMin  = checkRect.xMax - 18f;
                    checkRect.yMin  = checkRect.yMax - 18f;
                    var active = isActive;
                    GUI.DrawTexture(checkRect.ContractedBy(-2f), CheckboxBackground);
                    Widgets.Checkbox(checkRect.xMin, checkRect.yMin, ref active, checkRect.width);
                    if (active != isActive)
                    {
                        var clickedMod = ModLister.AllInstalledMods.FirstOrDefault(meta => meta.GetPublishedFileId().m_PublishedFileId == myModID);
                        if (clickedMod != null)
                        {
                            ModsConfig.SetActive(clickedMod, active);
                            ModsConfig.Save();
                        }
                    }

                    if (Mouse.IsOver(checkRect) == false)
                    {
                        Widgets.DrawHighlightIfMouseover(modRect);
                        if (Widgets.ButtonInvisible(modRect, true))
                        {
                            var description  = promoMod.m_rgchTitle + "\n\n" + promoMod.m_rgchDescription;
                            var actionButton = isSubbed || isLocalFile ? "Select" : "Subscribe";
                            void actionButtonAction()
                            {
                                if (isSubbed || isLocalFile)
                                {
                                    var orderedMods = (IEnumerable <ModMetaData>)AccessTools.Method(typeof(Page_ModsConfig), "ModsInListOrder").Invoke(page, new object[0]);
                                    page.selectedMod = orderedMods.FirstOrDefault(meta => meta.GetPublishedFileId().m_PublishedFileId == myModID);
                                    var modsBefore = orderedMods.FirstIndexOf(m => m == page.selectedMod);
                                    if (modsBefore >= 0)
                                    {
                                        Traverse.Create(page).Field("modListScrollPosition").SetValue(new Vector2(0f, modsBefore * 26f + 4f));
                                    }
                                }
                                else
                                {
                                    new Thread(() =>
                                    {
                                        CrossPromotion.subscribingMods.Add(myModID);
                                        SteamUGC.SubscribeItem(new PublishedFileId_t(myModID));
                                    }).Start();
                                }
                            }

                            var infoWindow = new Dialog_MessageBox(description, "Close".Translate(), null, actionButton, actionButtonAction, null, false, null, null);
                            Find.WindowStack.Add(infoWindow);
                        }
                    }
                    modRect.y += modRect.height + 2f;

                    modRect.height = 0f;
                    if (isLocalFile == false)
                    {
                        if (isSubbed == false)
                        {
                            modRect.height = 16f;
                            if (CrossPromotion.subscribingMods.Contains(myModID))
                            {
                                Widgets.Label(modRect, WaitingString);
                            }
                            else if (Widgets.ButtonText(modRect, "Subscribe", false, true, true))
                            {
                                new Thread(() =>
                                {
                                    CrossPromotion.subscribingMods.Add(myModID);
                                    SteamUGC.SubscribeItem(new PublishedFileId_t(myModID));
                                }).Start();
                            }
                        }
                        else if (voteStatus != null && voteStatus == false)
                        {
                            modRect.height = 16f;
                            if (Widgets.ButtonText(modRect, "Like", false, true, true))
                            {
                                new Thread(() =>
                                {
                                    CrossPromotion.allVoteStati[myModID] = true;
                                    SteamUGC.SetUserItemVote(new PublishedFileId_t(myModID), true);
                                }).Start();
                            }
                        }
                    }
                    modRect.y += modRect.height;
                }

                firstTime = false;
            }
            Widgets.EndScrollView();
        }
예제 #14
0
        static void ContentPart(Rect mainRect, float leftColumn, ModMetaData mod, Page_ModsConfig page)
        {
            var workshopMods = WorkshopItems.AllSubscribedItems.Select(wi => wi.PublishedFileId.m_PublishedFileId).ToList();

            var mainModID   = mod.GetPublishedFileId().m_PublishedFileId;
            var promoMods   = CrossPromotion.promotionMods.ToArray();
            var thisMod     = promoMods.FirstOrDefault(m => m.m_nPublishedFileId.m_PublishedFileId == mainModID);
            var isLocalFile = ModLister.AllInstalledMods.Any(meta => meta.GetPublishedFileId().m_PublishedFileId == mainModID && meta.Source == ContentSource.LocalFolder);
            var isSubbed    = workshopMods.Contains(mainModID);

            if (CrossPromotion.lastPresentedMod != mainModID)
            {
                leftScroll  = Vector2.zero;
                rightScroll = Vector2.zero;
                CrossPromotion.lastPresentedMod = mainModID;

                new Thread(() =>
                {
                    foreach (var promoMod in promoMods)
                    {
                        CrossPromotion.UpdateVotingStatus(promoMod.m_nPublishedFileId.m_PublishedFileId, (result2, failure2) =>
                        {
                            CrossPromotion.allVoteStati[promoMod.m_nPublishedFileId.m_PublishedFileId] = (result2.m_eResult == EResult.k_EResultOK) ? result2.m_bVotedUp : (bool?)null;
                        });
                    }
                }).Start();
            }

            var description = thisMod.m_rgchDescription;

            if (description == null || description.Length == 0)
            {
                description = mod.Description;
            }

            var outRect   = new Rect(0f, 0f, leftColumn, mainRect.height);
            var width     = outRect.width - 20f;
            var imageRect = new Rect(0f, 0f, width, width * mod.previewImage.height / mod.previewImage.width);
            var textRect  = new Rect(0f, 24f + 10f + imageRect.height, width, Text.CalcHeight(description, width));
            var innerRect = new Rect(0f, 0f, width, imageRect.height + 20f + 8f + 10f + textRect.height);

            Widgets.BeginScrollView(outRect, ref leftScroll, innerRect, true);
            GUI.DrawTexture(imageRect, mod.previewImage, ScaleMode.ScaleToFit);
            var widgetRow = new WidgetRow(imageRect.xMax, imageRect.yMax + 8f, UIDirection.LeftThenDown, width, 8f);

            if (isLocalFile == false)
            {
                if (widgetRow.ButtonText("Unsubscribe".Translate(), null, true, true))
                {
                    Find.WindowStack.Add(Dialog_MessageBox.CreateConfirmation("ConfirmUnsubscribe".Translate(mod.Name), delegate
                    {
                        mod.enabled = false;
                        new Thread(() =>
                        {
                            AccessTools.Method(typeof(Workshop), "Unsubscribe").Invoke(null, new object[] { mod });
                            AccessTools.Method(typeof(Page_ModsConfig), "Notify_SteamItemUnsubscribed").Invoke(page, new object[] { mainModID });
                        }).Start();
                    }, true, null));
                }
            }
            if (isSubbed)
            {
                if (widgetRow.ButtonText("WorkshopPage".Translate(), null, true, true))
                {
                    SteamUtility.OpenWorkshopPage(new PublishedFileId_t(mainModID));
                }
            }
            if (Prefs.DevMode && mod.CanToUploadToWorkshop())
            {
                widgetRow = new WidgetRow(imageRect.xMin, imageRect.yMax + 8f, UIDirection.RightThenDown, width, 8f);
                if (widgetRow.ButtonText("Upload", null, true, true))
                {
                    Find.WindowStack.Add(Dialog_MessageBox.CreateConfirmation("ConfirmSteamWorkshopUpload".Translate(), delegate
                    {
                        AccessTools.Method(typeof(Workshop), "Upload").Invoke(null, new object[] { mod });
                    }, true, null));
                }
            }

            Widgets.Label(textRect, description);
            Widgets.EndScrollView();
        }
 public static bool Prefix(this Page_ModsConfig __instance, ref Rect rect)
 {
     Page_ModsConfig_Controller.DoWindowContents(__instance, rect);
     return(false);
 }
예제 #16
0
 public abstract void OnClicked(Page_ModsConfig window);
 static void Prefix(Page_ModsConfig __instance, ModMetaData mod)
 {
     ModManager_ButtonPrefix(null, mod, __instance.truncatedModNamesCache);
 }
예제 #18
0
 public static void Postfix(this Page_ModsConfig __instance)
 {
     Page_ModsConfig_Controller.PreOpen(__instance);
 }