private void SetUpPositions() { _labels.Clear(); _modToggles.Clear(); _currentItemIndex = 0; var mods = ModRegistry.GetRegisteredItems(); for (var index = 0; index < 7; ++index) { _optionSlots.Add(new ClickableComponent(new Rectangle(xPositionOnScreen + Game1.tileSize / 4, yPositionOnScreen + Game1.tileSize * 6 / 4 + Game1.pixelZoom + index * ((height - Game1.tileSize * 2) / 7), width - Game1.tileSize / 2, (height - Game1.tileSize * 2) / 7 + Game1.pixelZoom), string.Concat(index))); } foreach (var mod in mods) { if (mod.UniqueId == ModLoader1.Instance.ModSettings.UniqueId) { continue; } var checkbox = new DisableableOptionCheckbox($"{mod.Name} by {mod.Author}", 11) { IsChecked = mod.ModState == ModState.Loaded }; if (mod.ModState != ModState.Loaded && mod.ModState != ModState.Deactivated) { ResolveLoadingIssue(checkbox, mod); } _modToggles.Add(checkbox); _modOptions[checkbox] = mod; } }
private void ResolveLoadingIssue(DisableableOptionCheckbox checkbox, ModManifest mod) { checkbox.IsDisabled = true; if (mod.ModState == ModState.MissingDependency) { var missingDependencies = mod.Dependencies.Where(n => n.DependencyState == DependencyState.Missing); var missingParents = mod.Dependencies.Where(n => n.DependencyState == DependencyState.ParentMissing); var tooLow = mod.Dependencies.Where(n => n.DependencyState == DependencyState.TooLowVersion); var tooHigh = mod.Dependencies.Where(n => n.DependencyState == DependencyState.TooHighVersion); var modDependencies = missingDependencies as ModDependency[] ?? missingDependencies.ToArray(); if (modDependencies.Any()) { checkbox.DisableReason = $"Missing Dependencies: : {string.Join(", ", modDependencies.Select(n => n.UniqueId))}"; } else if (modDependencies.Any()) { checkbox.DisableReason = $"Dependent Mods Missing Dependencies: : {string.Join(", ", missingParents.Select(n => n.UniqueId))}"; } else { var tooLowDependencies = tooLow as ModDependency[] ?? tooLow.ToArray(); if (tooLowDependencies.Any()) { checkbox.DisableReason = $"Dependency Version Too Low: : {string.Join(", ", tooLowDependencies.Select(n => n.UniqueId + $"(Minimum: {n.MinimumVersion.ToString()})"))}"; } else { var tooHighDependencies = tooHigh as ModDependency[] ?? tooHigh.ToArray(); if (tooHighDependencies.Any()) { checkbox.DisableReason = $"Dependency Version Too High: : {string.Join(",", tooHighDependencies.Select(n => n.UniqueId + $"(Maximum: {n.MaximumVersion.ToString()})"))}"; } } } } else if (mod.ModState == ModState.Errored) { var lastException = mod.LastException?.Message ?? ""; checkbox.DisableReason = $"Error: {lastException}"; } }
private void OnTogglePress(DisableableOptionCheckbox disableableOptionCheckbox) { if (disableableOptionCheckbox.IsDisabled) { return; } Game1.playSound("coin"); if (disableableOptionCheckbox.IsChecked) { Log.Info($"Loaded Mod: {_modOptions[disableableOptionCheckbox].Name}"); Farmhand.ModLoader.ReactivateMod(_modOptions[disableableOptionCheckbox]); } else { Log.Info($"Unloaded Mod: {_modOptions[disableableOptionCheckbox].Name}"); Farmhand.ModLoader.DeactivateMod(_modOptions[disableableOptionCheckbox]); } }
private void SetUpPositions() { _labels.Clear(); _modToggles.Clear(); _currentItemIndex = 0; upArrow = new ClickableTextureComponent(new Rectangle(xPositionOnScreen + width + Game1.tileSize / 4, yPositionOnScreen + Game1.tileSize / 4, 11 * Game1.pixelZoom, 12 * Game1.pixelZoom), Game1.mouseCursors, new Rectangle(421, 459, 11, 12), Game1.pixelZoom); downArrow = new ClickableTextureComponent(new Rectangle(xPositionOnScreen + width + Game1.tileSize / 4, yPositionOnScreen + height - Game1.tileSize, 11 * Game1.pixelZoom, 12 * Game1.pixelZoom), Game1.mouseCursors, new Rectangle(421, 472, 11, 12), Game1.pixelZoom); scrollBar = new ClickableTextureComponent(new Rectangle(upArrow.bounds.X + Game1.pixelZoom * 3, upArrow.bounds.Y + upArrow.bounds.Height + Game1.pixelZoom, 6 * Game1.pixelZoom, 10 * Game1.pixelZoom), Game1.mouseCursors, new Rectangle(435, 463, 6, 10), Game1.pixelZoom); scrollBarRunner = new Rectangle(scrollBar.bounds.X, upArrow.bounds.Y + upArrow.bounds.Height + Game1.pixelZoom, scrollBar.bounds.Width, height - Game1.tileSize - upArrow.bounds.Height - Game1.pixelZoom * 7); var mods = ModRegistry.GetRegisteredItems(); for (var index = 0; index < 4; ++index) { _optionSlots.Add(new ClickableComponent(new Rectangle(xPositionOnScreen + Game1.tileSize / 4, yPositionOnScreen + Game1.tileSize / 4 + index * (height / 4) - (index * 7), width - Game1.tileSize / 2, (height / 4 + Game1.pixelZoom) - 11), string.Concat(index))); } foreach (var mod in mods) { if (Equals(mod.UniqueId, ModLoader1.Instance.ModSettings.UniqueId)) { continue; } var checkbox = new DisableableOptionCheckbox("", 11) { IsChecked = mod.ModState == ModState.Loaded }; if (mod.IsFarmhandMod && mod.ModState != ModState.Loaded && mod.ModState != ModState.Deactivated) { ResolveLoadingIssue(checkbox, (ModManifest)mod); } _modToggles.Add(checkbox); _modOptions[checkbox] = mod; } }