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); } }
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)); }
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); }
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)); }
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)); }
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)); }
public static string ActivateMod(ModMetaData mod) { return(Key("ActivateMod").Translate(mod.Name, Manifest.For(mod)?.Version, Key("ContentSource", mod.Source.ToString()).Translate())); }