From e0a99bcdbc1e01d77be0f8d7c4f4ae790af39df8 Mon Sep 17 00:00:00 2001 From: Katy Fox Date: Thu, 23 Jan 2025 09:26:09 -0500 Subject: [PATCH] implement random spawning prevention --- SkinConfigurator/ViewModels/ThemeConfigModel.cs | 1 + SkinManagerMod/SkinProvider.cs | 17 ++++++++++++++--- SkinManagerMod/ThemeSettings.cs | 2 ++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/SkinConfigurator/ViewModels/ThemeConfigModel.cs b/SkinConfigurator/ViewModels/ThemeConfigModel.cs index 54a5938..36169b5 100644 --- a/SkinConfigurator/ViewModels/ThemeConfigModel.cs +++ b/SkinConfigurator/ViewModels/ThemeConfigModel.cs @@ -191,6 +191,7 @@ public ThemeConfigItem JsonModel() { Name = ThemeName, HideFromStores = HideFromStores, + PreventRandomSpawning = PreventRandomSpawning, }; if (HasValidImage) diff --git a/SkinManagerMod/SkinProvider.cs b/SkinManagerMod/SkinProvider.cs index 7a8eaa7..e24e3b0 100644 --- a/SkinManagerMod/SkinProvider.cs +++ b/SkinManagerMod/SkinProvider.cs @@ -307,11 +307,13 @@ public static string GetNewSkin(TrainCarLivery carType) (Main.Settings.defaultSkinsMode == DefaultSkinsMode.AllowForAllCars); // || (CustomCarTypes.ContainsKey(carType) && (Main.Settings.defaultSkinsMode == SkinManagerSettings.DefaultSkinsMode.AllowForCustomCars)); - int nChoices = allowRandomDefault ? group.Skins.Count + 1 : group.Skins.Count; + var allowedRandom = group.Skins.Where(AllowRandomSpawning).ToList(); + int nChoices = allowRandomDefault ? allowedRandom.Count + 1 : allowedRandom.Count; + int choice = UnityEngine.Random.Range(0, nChoices); - if (choice < group.Skins.Count) + if (choice < allowedRandom.Count) { - return group.Skins[choice].Name; + return allowedRandom[choice].Name; } } @@ -319,6 +321,15 @@ public static string GetNewSkin(TrainCarLivery carType) return DefaultThemeName; } + private static bool AllowRandomSpawning(Skin skin) + { + if (TryGetThemeSettings(skin.Name, out var settings)) + { + return !settings.PreventRandomSpawning; + } + return true; + } + #endregion //==================================================================================================== diff --git a/SkinManagerMod/ThemeSettings.cs b/SkinManagerMod/ThemeSettings.cs index 9589014..94402bf 100644 --- a/SkinManagerMod/ThemeSettings.cs +++ b/SkinManagerMod/ThemeSettings.cs @@ -10,6 +10,7 @@ public class ThemeSettings public readonly string ThemeName; public Version HighestVersion; public bool HideFromStores; + public bool PreventRandomSpawning; public SkinTexture CanLabel; public Color? LabelBaseColor; @@ -49,6 +50,7 @@ public static ThemeSettings Create(string basePath, ThemeConfigItem data, Versio var result = new ThemeSettings(data.Name, version) { HideFromStores = data.HideFromStores, + PreventRandomSpawning = data.PreventRandomSpawning, }; TryParseColor(data.LabelBaseColor, basePath, ref result.LabelBaseColor);