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
{
Handbrake,
GladhandAndAnglecock
GladhandAndAnglecock,
BleedAirSystem
}

View File

@@ -37,5 +37,7 @@ namespace RMROC451.TweaksAndThings.Extensions
}
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 HarmonyLib;
using KeyValue.Runtime;
using Model;
using Model.OpsNew;
using Railloader;
using RMROC451.TweaksAndThings.Enums;
using RMROC451.TweaksAndThings.Extensions;
@@ -11,6 +13,7 @@ using System.Collections.Generic;
using System.Linq;
using UI.Builder;
using UI.CarInspector;
using UI.Tags;
using static Model.Car;
namespace RMROC451.TweaksAndThings.Patches;
@@ -31,7 +34,7 @@ public class CarInspector_PopulateCarPanel_Patch
private static bool Prefix(CarInspector __instance, UIPanelBuilder builder)
{
TweaksAndThings tweaksAndThings = SingletonPluginBase<TweaksAndThings>.Shared;
TweaksAndThingsPlugin tweaksAndThings = SingletonPluginBase<TweaksAndThingsPlugin>.Shared;
if (!tweaksAndThings.IsEnabled) return true;
var consist = __instance._car.EnumerateCoupled(LogicalEnd.A);
@@ -48,12 +51,18 @@ public class CarInspector_PopulateCarPanel_Patch
if (consist.Any(c => c.EndAirSystemIssue()))
{
hstack.AddButtonCompact("Connect Air Lines", delegate
hstack.AddButtonCompact("Connect Air", delegate
{
MrocConsistHelper(__instance._car, MrocHelperType.GladhandAndAnglecock);
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;
@@ -61,27 +70,29 @@ public class CarInspector_PopulateCarPanel_Patch
private static UIPanelBuilder AddCarConsistRebuildObservers(UIPanelBuilder builder, IEnumerable<Model.Car> consist)
{
TagController tagController = UnityEngine.Object.FindFirstObjectByType<TagController>();
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)
{
builder = AddObserver(builder, car, KeyValueKeyFor(EndGearStateKey.IsCoupled, car.LogicalToEnd(logicalEnd)));
builder = AddObserver(builder, car, KeyValueKeyFor(EndGearStateKey.IsAirConnected, car.LogicalToEnd(logicalEnd)));
builder = AddObserver(builder, car, KeyValueKeyFor(EndGearStateKey.Anglecock, car.LogicalToEnd(logicalEnd)));
builder = AddObserver(builder, car, KeyValueKeyFor(EndGearStateKey.IsCoupled, car.LogicalToEnd(logicalEnd)), tagController);
builder = AddObserver(builder, car, KeyValueKeyFor(EndGearStateKey.IsAirConnected, car.LogicalToEnd(logicalEnd)), tagController);
builder = AddObserver(builder, car, KeyValueKeyFor(EndGearStateKey.Anglecock, car.LogicalToEnd(logicalEnd)), tagController);
}
}
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(
car.KeyValueObject.Observe(
key,
delegate (Value value)
{
tagController.UpdateTag(car, car.TagCallout, OpsController.Shared);
builder.Rebuild();
},
false
@@ -106,16 +117,17 @@ public class CarInspector_PopulateCarPanel_Patch
IEnumerable<Model.Car> consist = car.EnumerateCoupled(LogicalEnd.A);
Log.Information($"{car} => {mrocHelperType} => {string.Join("/", consist.Select(c => c.ToString()))}");
TrainController tc = UnityEngine.Object.FindObjectOfType<TrainController>();
switch (mrocHelperType)
{
case MrocHelperType.Handbrake:
if (consist.Any(c => c.HandbrakeApplied()))
{
consist.Do(c => c.SetHandbrake(false));
} else
}
else
{
TrainController tc = UnityEngine.Object.FindObjectOfType<TrainController>();
consist = consist.Where(c => c.DetermineFuelCar(true) != null);
consist = consist.Where(c => c is not BaseLocomotive && c.Archetype != Model.Definition.CarArchetype.Tender);
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.
tc.ApplyHandbrakesAsNeeded(consist.ToList(), PlaceTrainHandbrakes.Automatic);
@@ -130,7 +142,7 @@ public class CarInspector_PopulateCarPanel_Patch
StateManager.ApplyLocal(
new PropertyChange(
c.id,
c.id,
KeyValueKeyFor(EndGearStateKey.Anglecock, c.LogicalToEnd(end)),
new FloatPropertyValue(endGear.IsCoupled ? 1f : 0f)
)
@@ -144,6 +156,15 @@ public class CarInspector_PopulateCarPanel_Patch
})
);
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)
{
TweaksAndThings? tweaksAndThings = SingletonPluginBase<TweaksAndThings>.Shared;
TweaksAndThingsPlugin? tweaksAndThings = SingletonPluginBase<TweaksAndThingsPlugin>.Shared;
RosterFuelColumnSettings? rosterFuelColumnSettings = tweaksAndThings?.settings?.EngineRosterFuelColumnSettings;
if (tweaksAndThings == null ||

View File

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

View File

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

View File

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