diff --git a/SkinManagerMod/CommsRadioSkinSwitcher.cs b/SkinManagerMod/CommsRadioSkinSwitcher.cs index 1b22072..a1fbed9 100644 --- a/SkinManagerMod/CommsRadioSkinSwitcher.cs +++ b/SkinManagerMod/CommsRadioSkinSwitcher.cs @@ -7,6 +7,7 @@ using DV.ThingTypes; using DV.UserManagement; using HarmonyLib; +using SMShared; using UnityEngine; using static DV.Common.GameFeatureFlags; @@ -456,10 +457,9 @@ private void ApplySelectedSkin() SkinManager.ApplySkin(SelectedCar, SelectedSkin, AreaToPaint); //CurrentThemeName = SelectedSkin.name; - if (CarTypes.IsMUSteamLocomotive(SelectedCar.carType) && SelectedCar.rearCoupler.IsCoupled()) + if (SelectedCar.rearCoupler.IsCoupled() && (SelectedCar.rearCoupler.coupledTo?.train is TrainCar attachedCar)) { - TrainCar attachedCar = SelectedCar.rearCoupler.coupledTo?.train; - if ((attachedCar != null) && CarTypes.IsTender(attachedCar.carLivery)) + if (CarTypes.IsMUSteamLocomotive(SelectedCar.carType) && CarTypes.IsTender(attachedCar.carLivery)) { // car attached behind loco is tender if (SelectedSkin.SupportsVehicle(attachedCar.carLivery)) @@ -468,6 +468,14 @@ private void ApplySelectedSkin() SkinManager.ApplySkin(attachedCar, SelectedSkin, AreaToPaint); } } + else if ((SelectedCar.carLivery.id == Constants.DE6_LIVERY_ID) && CarTypes.IsSlug(attachedCar.carLivery)) + { + // car attached behind DE6 is slug + if (SelectedSkin.SupportsVehicle(attachedCar.carLivery)) + { + SkinManager.ApplySkin(attachedCar, SelectedSkin, AreaToPaint); + } + } } } diff --git a/SkinManagerMod/CustomPaintTheme.cs b/SkinManagerMod/CustomPaintTheme.cs index 2f89c89..8cdeeef 100644 --- a/SkinManagerMod/CustomPaintTheme.cs +++ b/SkinManagerMod/CustomPaintTheme.cs @@ -1,6 +1,7 @@ using DV; using DV.Customization.Paint; using DV.ThingTypes; +using SMShared; using System.Collections.Generic; using System.Linq; using UnityEngine; @@ -16,8 +17,12 @@ public class CustomPaintTheme : PaintTheme public void RemoveSkin(Skin skin) => _skins.Remove(skin.LiveryId); public void RemoveSkin(string liveryId) => _skins.Remove(liveryId); - public bool SupportsVehicle(string liveryId) => _skins.ContainsKey(liveryId); - public bool SupportsVehicle(TrainCarLivery livery) => _skins.ContainsKey(livery.id); + public bool SupportsVehicle(string liveryId) + { + if (_skins.ContainsKey(liveryId)) return true; + return Main.Settings.allowDE6SkinsForSlug && (liveryId == Constants.SLUG_LIVERY_ID) && _skins.ContainsKey(Constants.DE6_LIVERY_ID); + } + public bool SupportsVehicle(TrainCarLivery livery) => SupportsVehicle(livery.id); public IEnumerable SupportedCarTypes => Globals.G.Types.Liveries.Where(type => _skins.ContainsKey(type.id)); @@ -29,6 +34,13 @@ public void Apply(GameObject target, TrainCar train) ApplyToTransform(target, skin, defaultSkin); } + else if ((train.carLivery.id == Constants.SLUG_LIVERY_ID) && + Main.Settings.allowDE6SkinsForSlug && + _skins.TryGetValue(Constants.DE6_LIVERY_ID, out skin)) + { + var defaultSkin = CarMaterialData.GetDataForCar(Constants.SLUG_LIVERY_ID); + ApplyToTransform(target, skin, defaultSkin); + } } private static void ApplyToTransform(GameObject objectRoot, Skin skin, CarMaterialData defaults) diff --git a/SkinManagerMod/SkinProvider.cs b/SkinManagerMod/SkinProvider.cs index fef93e9..9d3163a 100644 --- a/SkinManagerMod/SkinProvider.cs +++ b/SkinManagerMod/SkinProvider.cs @@ -236,7 +236,7 @@ public static List GetSkinsForType(string carId, bool includeD if (includeDefault) { - if (IsThemeable(carId)) + if (IsThemeable(carId) || (Main.Settings.allowDE6SkinsForSlug && (carId == Constants.SLUG_LIVERY_ID))) { result.AddRange(BuiltInThemeNames); }