Пример #1
0
        public static bool MatchesVersion(ModMetaData mod, EqualityOperator op, Version version, bool unknownResult = false)
        {
            var modVersion = Manifest.For(mod)?.Version;

            if (modVersion == null || version == null)
            {
                return(unknownResult);
            }

            switch (op)
            {
            case EqualityOperator.Equal:
                return(version == modVersion);

            case EqualityOperator.Exists:
                return(mod != null);

            case EqualityOperator.GreaterEqual:
                return(modVersion >= version);

            case EqualityOperator.LesserEqual:
                return(modVersion <= version);

            default:
                return(unknownResult);
            }
        }
Пример #2
0
 public static bool MatchesIdentifier(this ModMetaData mod, string identifier)
 {
     identifier = identifier.StripSpaces();
     return(!identifier.NullOrEmpty() &&
            (mod.Identifier.StripSpaces() == identifier ||
             mod.Name.StripSpaces() == identifier ||
             Manifest.For(mod)?.identifier == identifier));
 }
Пример #3
0
        public static void ResolveFindMod(
            string identifier,
            ModButton requester            = null,
            Version desired                = null,
            Dependency.EqualityOperator op = Dependency.EqualityOperator.GreaterEqual,
            Version current                = null,
            bool replace = false)
        {
            // find identifier in available
            var mods = ModButtonManager.AvailableMods
                       .Where(m => m.MatchesIdentifier(identifier))
                       .Where(m => m.VersionCompatible)
                       .Where(m => desired == null || Dependency.MatchesVersion(m, op, desired, true))
                       .Where(m => current == null || Manifest.For(m)?.Version > current)
                       .OrderByDescending(m => Manifest.For(m)?.Version);

            var options = NewOptions;

            if (mods.Any())
            {
                var insertIndex = requester != null
                    ? ModButtonManager.ActiveButtons.IndexOf(requester)
                    : ModButtonManager.ActiveButtons.Count;

                foreach (var mod in mods)
                {
                    options.Add(new FloatMenuOption(I18n.ActivateMod(mod), () =>
                    {
                        var button      = ModButton_Installed.For(mod);
                        button.Selected = mod;
                        ModButtonManager.Insert(button, insertIndex);
                        if (replace && requester != null && requester != button)
                        {
                            requester.Active = false;
                        }
                    }));
                }
            }
            else
            {
                if (desired != null)
                {
                    options.Add(new FloatMenuOption(I18n.NoMatchingModInstalled(identifier, desired, op), null));
                }
                else
                {
                    options.Add(new FloatMenuOption(I18n.NoMatchingModInstalled(identifier), null));
                }
            }
            if (requester is ModButton_Missing missing && missing.Identifier.IsSteamWorkshopIdentifier())
            {
                options.Add(SubscribeOption(missing.Name, missing.Identifier));
            }
            options.Add(WorkshopSearchOption(requester?.TrimmedName ?? identifier));
            options.Add(ForumSearchOption(requester?.TrimmedName ?? identifier));
            FloatMenu(options);
        }
Пример #4
0
        public static VersionStatus For(ModMetaData mod)
        {
            var manifest = Manifest.For(mod);

            if (manifest != null && !manifest.TargetVersions.NullOrEmpty())
            {
                return(For(mod, manifest));
            }
            return(For(mod, mod.SupportedVersionsReadOnly));
        }
Пример #5
0
        public static VersionStatus For(ModMetaData mod)
        {
            var manifest = Manifest.For(mod);

            if (manifest != null && !manifest.TargetVersions.NullOrEmpty())
            {
                return(For(mod, manifest));
            }
            return(For(mod, Match(mod.TargetVersion), mod.TargetVersion));
        }
Пример #6
0
        public static bool HandleCrossPromotions(ref Rect canvas, ModMetaData mod)
        {
            if (!_enabled)
            {
                return(false);
            }

            if (!ModManager.Settings.ShowPromotions || !Manifest.For(mod).showCrossPromotions)
            {
                return(false);
            }

            if (mod.GetPublishedFileId() == PublishedFileId_t.Invalid)
            {
                return(false);
            }

            var author = AuthorForMod(mod.GetPublishedFileId());

            if (author == null)
            {
                return(false);
            }

            var promotions = ModsForAuthor(author.Value)?.Where(p => p.ShouldShow);

            if (promotions == null || !promotions.Any())
            {
                return(false);
            }

            if (Widgets.ButtonImage(
                    new Rect(canvas.xMax - SmallIconSize, canvas.yMin, SmallIconSize, SmallIconSize), Gear, Color.grey,
                    GenUI.MouseoverColor))
            {
                Utilities.OpenSettingsFor(ModManager.Instance);
            }
            Utilities.DoLabel(ref canvas, I18n.PromotionsFor(mod.Author));
            DrawCrossPromotions(ref canvas, promotions);
            return(true);
        }
 public static Manifest GetManifest(this ModMetaData mod)
 {
     return(Manifest.For(mod));
 }
Пример #8
0
 public static string ActivateMod(ModMetaData mod)
 {
     return(Key("ActivateMod").Translate(mod.Name, Manifest.For(mod)?.Version,
                                         Key("ContentSource", mod.Source.ToString()).Translate()));
 }