Merge remote-tracking branch 'origin/main' into 13-add-buttonconsole-command-to-initiate-a-console-message-logging-with-selected-engine

This commit is contained in:
2024-06-23 13:48:14 -05:00
7 changed files with 45 additions and 20 deletions

View File

@@ -3,5 +3,6 @@
public enum MrocHelperType public enum MrocHelperType
{ {
Handbrake, Handbrake,
GladhandAndAnglecock GladhandAndAnglecock,
BleedAirSystem
} }

View File

@@ -37,5 +37,7 @@ namespace RMROC451.TweaksAndThings.Extensions
} }
return car; return car;
} }
public static bool NotMotivePower(this Car car) => car is not BaseLocomotive && car.Archetype != Model.Definition.CarArchetype.Tender;
} }
} }

View File

@@ -2,6 +2,8 @@
using Game.State; using Game.State;
using HarmonyLib; using HarmonyLib;
using KeyValue.Runtime; using KeyValue.Runtime;
using Model;
using Model.OpsNew;
using Railloader; using Railloader;
using RMROC451.TweaksAndThings.Enums; using RMROC451.TweaksAndThings.Enums;
using RMROC451.TweaksAndThings.Extensions; using RMROC451.TweaksAndThings.Extensions;
@@ -11,6 +13,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using UI.Builder; using UI.Builder;
using UI.CarInspector; using UI.CarInspector;
using UI.Tags;
using static Model.Car; using static Model.Car;
namespace RMROC451.TweaksAndThings.Patches; namespace RMROC451.TweaksAndThings.Patches;
@@ -31,7 +34,7 @@ public class CarInspector_PopulateCarPanel_Patch
private static bool Prefix(CarInspector __instance, UIPanelBuilder builder) private static bool Prefix(CarInspector __instance, UIPanelBuilder builder)
{ {
TweaksAndThings tweaksAndThings = SingletonPluginBase<TweaksAndThings>.Shared; TweaksAndThingsPlugin tweaksAndThings = SingletonPluginBase<TweaksAndThingsPlugin>.Shared;
if (!tweaksAndThings.IsEnabled) return true; if (!tweaksAndThings.IsEnabled) return true;
var consist = __instance._car.EnumerateCoupled(LogicalEnd.A); var consist = __instance._car.EnumerateCoupled(LogicalEnd.A);
@@ -48,12 +51,18 @@ public class CarInspector_PopulateCarPanel_Patch
if (consist.Any(c => c.EndAirSystemIssue())) if (consist.Any(c => c.EndAirSystemIssue()))
{ {
hstack.AddButtonCompact("Connect Air Lines", delegate hstack.AddButtonCompact("Connect Air", delegate
{ {
MrocConsistHelper(__instance._car, MrocHelperType.GladhandAndAnglecock); MrocConsistHelper(__instance._car, MrocHelperType.GladhandAndAnglecock);
hstack.Rebuild(); hstack.Rebuild();
}).Tooltip("Connect Consist Air Lines", "Iterates over each car in this consist and connects gladhands and opens anglecocks."); }).Tooltip("Connect Consist Air", "Iterates over each car in this consist and connects gladhands and opens anglecocks.");
} }
hstack.AddButtonCompact("Bleed Consist", delegate
{
MrocConsistHelper(__instance._car, MrocHelperType.BleedAirSystem);
hstack.Rebuild();
}).Tooltip("Bleed Air Lines", "Iterates over each car in this consist and bleeds the air out of the lines.");
}); });
return true; return true;
@@ -61,27 +70,29 @@ public class CarInspector_PopulateCarPanel_Patch
private static UIPanelBuilder AddCarConsistRebuildObservers(UIPanelBuilder builder, IEnumerable<Model.Car> consist) private static UIPanelBuilder AddCarConsistRebuildObservers(UIPanelBuilder builder, IEnumerable<Model.Car> consist)
{ {
TagController tagController = UnityEngine.Object.FindFirstObjectByType<TagController>();
foreach (Model.Car car in consist) foreach (Model.Car car in consist)
{ {
builder = AddObserver(builder, car, PropertyChange.KeyForControl(PropertyChange.Control.Handbrake)); builder = AddObserver(builder, car, PropertyChange.KeyForControl(PropertyChange.Control.Handbrake), tagController);
foreach (LogicalEnd logicalEnd in ends) foreach (LogicalEnd logicalEnd in ends)
{ {
builder = AddObserver(builder, car, KeyValueKeyFor(EndGearStateKey.IsCoupled, car.LogicalToEnd(logicalEnd))); builder = AddObserver(builder, car, KeyValueKeyFor(EndGearStateKey.IsCoupled, car.LogicalToEnd(logicalEnd)), tagController);
builder = AddObserver(builder, car, KeyValueKeyFor(EndGearStateKey.IsAirConnected, car.LogicalToEnd(logicalEnd))); builder = AddObserver(builder, car, KeyValueKeyFor(EndGearStateKey.IsAirConnected, car.LogicalToEnd(logicalEnd)), tagController);
builder = AddObserver(builder, car, KeyValueKeyFor(EndGearStateKey.Anglecock, car.LogicalToEnd(logicalEnd))); builder = AddObserver(builder, car, KeyValueKeyFor(EndGearStateKey.Anglecock, car.LogicalToEnd(logicalEnd)), tagController);
} }
} }
return builder; return builder;
} }
private static UIPanelBuilder AddObserver(UIPanelBuilder builder, Model.Car car, string key) private static UIPanelBuilder AddObserver(UIPanelBuilder builder, Model.Car car, string key, TagController tagController)
{ {
builder.AddObserver( builder.AddObserver(
car.KeyValueObject.Observe( car.KeyValueObject.Observe(
key, key,
delegate (Value value) delegate (Value value)
{ {
tagController.UpdateTag(car, car.TagCallout, OpsController.Shared);
builder.Rebuild(); builder.Rebuild();
}, },
false false
@@ -106,16 +117,17 @@ public class CarInspector_PopulateCarPanel_Patch
IEnumerable<Model.Car> consist = car.EnumerateCoupled(LogicalEnd.A); IEnumerable<Model.Car> consist = car.EnumerateCoupled(LogicalEnd.A);
Log.Information($"{car} => {mrocHelperType} => {string.Join("/", consist.Select(c => c.ToString()))}"); Log.Information($"{car} => {mrocHelperType} => {string.Join("/", consist.Select(c => c.ToString()))}");
TrainController tc = UnityEngine.Object.FindObjectOfType<TrainController>();
switch (mrocHelperType) switch (mrocHelperType)
{ {
case MrocHelperType.Handbrake: case MrocHelperType.Handbrake:
if (consist.Any(c => c.HandbrakeApplied())) if (consist.Any(c => c.HandbrakeApplied()))
{ {
consist.Do(c => c.SetHandbrake(false)); consist.Do(c => c.SetHandbrake(false));
} else }
else
{ {
TrainController tc = UnityEngine.Object.FindObjectOfType<TrainController>(); consist = consist.Where(c => c is not BaseLocomotive && c.Archetype != Model.Definition.CarArchetype.Tender);
consist = consist.Where(c => c.DetermineFuelCar(true) != null);
Log.Information($"{car} => {mrocHelperType} => {string.Join("/", consist.Select(c => c.ToString()))}"); Log.Information($"{car} => {mrocHelperType} => {string.Join("/", consist.Select(c => c.ToString()))}");
//when ApplyHandbrakesAsNeeded is called, and the consist contains an engine, it stops applying brakes. //when ApplyHandbrakesAsNeeded is called, and the consist contains an engine, it stops applying brakes.
tc.ApplyHandbrakesAsNeeded(consist.ToList(), PlaceTrainHandbrakes.Automatic); tc.ApplyHandbrakesAsNeeded(consist.ToList(), PlaceTrainHandbrakes.Automatic);
@@ -130,7 +142,7 @@ public class CarInspector_PopulateCarPanel_Patch
StateManager.ApplyLocal( StateManager.ApplyLocal(
new PropertyChange( new PropertyChange(
c.id, c.id,
KeyValueKeyFor(EndGearStateKey.Anglecock, c.LogicalToEnd(end)), KeyValueKeyFor(EndGearStateKey.Anglecock, c.LogicalToEnd(end)),
new FloatPropertyValue(endGear.IsCoupled ? 1f : 0f) new FloatPropertyValue(endGear.IsCoupled ? 1f : 0f)
) )
@@ -144,6 +156,15 @@ public class CarInspector_PopulateCarPanel_Patch
}) })
); );
break; break;
case MrocHelperType.BleedAirSystem:
consist = consist.Where(c => c.NotMotivePower());
Log.Information($"{car} => {mrocHelperType} => {string.Join("/", consist.Select(c => c.ToString()))}");
foreach (Model.Car bleed in consist)
{
StateManager.ApplyLocal(new PropertyChange(bleed.id, PropertyChange.Control.Bleed, 1));
}
break;
} }
} }
} }

View File

@@ -25,7 +25,7 @@ public class EngineRosterRow_Refresh_Patch
{ {
public static void Postfix(EngineRosterRow __instance) public static void Postfix(EngineRosterRow __instance)
{ {
TweaksAndThings? tweaksAndThings = SingletonPluginBase<TweaksAndThings>.Shared; TweaksAndThingsPlugin? tweaksAndThings = SingletonPluginBase<TweaksAndThingsPlugin>.Shared;
RosterFuelColumnSettings? rosterFuelColumnSettings = tweaksAndThings?.settings?.EngineRosterFuelColumnSettings; RosterFuelColumnSettings? rosterFuelColumnSettings = tweaksAndThings?.settings?.EngineRosterFuelColumnSettings;
if (tweaksAndThings == null || if (tweaksAndThings == null ||

View File

@@ -32,7 +32,7 @@ public class ExpandedConsole_Add_Patch
{ {
try try
{ {
TweaksAndThings tweaksAndThings = SingletonPluginBase<TweaksAndThings>.Shared; TweaksAndThingsPlugin tweaksAndThings = SingletonPluginBase<TweaksAndThingsPlugin>.Shared;
StateManager shared = StateManager.Shared; StateManager shared = StateManager.Shared;
GameStorage gameStorage = shared.Storage; GameStorage gameStorage = shared.Storage;
WebhookSettings settings = tweaksAndThings?.settings?.WebhookSettingsList?.FirstOrDefault(ws => ws.RailroadMark == gameStorage.RailroadMark); WebhookSettings settings = tweaksAndThings?.settings?.WebhookSettingsList?.FirstOrDefault(ws => ws.RailroadMark == gameStorage.RailroadMark);

View File

@@ -2,6 +2,7 @@
using Model; using Model;
using Model.OpsNew; using Model.OpsNew;
using Railloader; using Railloader;
using RMROC451.TweaksAndThings;
using RMROC451.TweaksAndThings.Extensions; using RMROC451.TweaksAndThings.Extensions;
using UI; using UI;
using UI.Tags; using UI.Tags;
@@ -20,7 +21,7 @@ public class TagController_UpdateTag_Patch
private static void Postfix(Car car, TagCallout tagCallout) private static void Postfix(Car car, TagCallout tagCallout)
{ {
TagController tagController = UnityEngine.Object.FindObjectOfType<TagController>(); TagController tagController = UnityEngine.Object.FindObjectOfType<TagController>();
TweaksAndThings tweaksAndThings = SingletonPluginBase<TweaksAndThings>.Shared; TweaksAndThingsPlugin tweaksAndThings = SingletonPluginBase<TweaksAndThingsPlugin>.Shared;
if (!tweaksAndThings.IsEnabled || !tweaksAndThings.settings.HandBrakeAndAirTagModifiers) if (!tweaksAndThings.IsEnabled || !tweaksAndThings.settings.HandBrakeAndAirTagModifiers)
{ {

View File

@@ -15,7 +15,7 @@ using RMROC451.TweaksAndThings.Commands;
namespace RMROC451.TweaksAndThings; namespace RMROC451.TweaksAndThings;
public class TweaksAndThings : SingletonPluginBase<TweaksAndThings>, IUpdateHandler, IModTabHandler public class TweaksAndThingsPlugin : SingletonPluginBase<TweaksAndThingsPlugin>, IUpdateHandler, IModTabHandler
{ {
private HttpClient client; private HttpClient client;
internal HttpClient Client internal HttpClient Client
@@ -29,16 +29,16 @@ public class TweaksAndThings : SingletonPluginBase<TweaksAndThings>, IUpdateHand
} }
} }
internal Settings? settings { get; private set; } = null; internal Settings? settings { get; private set; } = null;
readonly ILogger logger = Log.ForContext<TweaksAndThings>(); readonly ILogger logger = Log.ForContext<TweaksAndThingsPlugin>();
IModdingContext moddingContext { get; set; } IModdingContext moddingContext { get; set; }
IModDefinition modDefinition { get; set; } IModDefinition modDefinition { get; set; }
static TweaksAndThings() static TweaksAndThingsPlugin()
{ {
Log.Information("Hello! Static Constructor was called!"); Log.Information("Hello! Static Constructor was called!");
} }
public TweaksAndThings(IModdingContext moddingContext, IModDefinition self) public TweaksAndThingsPlugin(IModdingContext moddingContext, IModDefinition self)
{ {
this.modDefinition = self; this.modDefinition = self;