From 38a41fbd545291c8f39a3a18949a8882346e88cb Mon Sep 17 00:00:00 2001 From: Brandon Callender Date: Sun, 2 Feb 2025 15:15:56 -0800 Subject: [PATCH] update mod for game version 1.2.3f1 (#6) * renaming settings and main mod file from defaults. moving it to a settings folder as well * while i'm here, update the underlying train system to latest decompiled * Update PatchedTransportCarAISystem.cs * formatting --- AllAboard/{Mod.cs => AllAboard.cs} | 29 +- AllAboard/Properties/PublishConfiguration.xml | 15 +- .../AllAboardSettings.cs} | 36 +- .../Patched/PatchedTransportCarAISystem.cs | 393 ++++++------------ .../Patched/PatchedTransportTrainAISystem.cs | 304 +++++--------- README.md | 241 +++++------ 6 files changed, 415 insertions(+), 603 deletions(-) rename AllAboard/{Mod.cs => AllAboard.cs} (70%) rename AllAboard/{Setting.cs => Settings/AllAboardSettings.cs} (65%) diff --git a/AllAboard/Mod.cs b/AllAboard/AllAboard.cs similarity index 70% rename from AllAboard/Mod.cs rename to AllAboard/AllAboard.cs index c5b533f..107b9b3 100644 --- a/AllAboard/Mod.cs +++ b/AllAboard/AllAboard.cs @@ -10,10 +10,12 @@ namespace AllAboard { - public class Mod : IMod + public class AllAboard : IMod { - public static ILog log = LogManager.GetLogger($"{nameof(AllAboard)}.{nameof(Mod)}").SetShowsErrorsInUI(false); - public static Setting m_Setting; + public static ILog log = LogManager.GetLogger($"{nameof(AllAboard)}.Mod") + .SetShowsErrorsInUI(false); + + public static AllAboardSettings m_AllAboardSettings; public void OnLoad(UpdateSystem updateSystem) { @@ -22,15 +24,18 @@ public void OnLoad(UpdateSystem updateSystem) if (GameManager.instance.modManager.TryGetExecutableAsset(this, out var asset)) log.Info($"Current mod asset at {asset.path}"); - m_Setting = new Setting(this); - m_Setting.RegisterInOptionsUI(); - GameManager.instance.localizationManager.AddSource("en-US", new LocaleEN(m_Setting)); + m_AllAboardSettings = new AllAboardSettings(this); + m_AllAboardSettings.RegisterInOptionsUI(); + GameManager.instance.localizationManager.AddSource("en-US", new LocaleEN(m_AllAboardSettings)); - AssetDatabase.global.LoadSettings(nameof(AllAboard), m_Setting, new Setting(this)); + AssetDatabase.global.LoadSettings("AllAboard", m_AllAboardSettings, + new AllAboardSettings(this)); - PublicTransportBoardingHelper.TrainMaxAllowedMinutesLate.Data = (uint) m_Setting.TrainMaxDwellDelaySlider; - PublicTransportBoardingHelper.BusMaxAllowedMinutesLate.Data = (uint) m_Setting.BusMaxDwellDelaySlider; + PublicTransportBoardingHelper.TrainMaxAllowedMinutesLate.Data = + (uint)m_AllAboardSettings.TrainMaxDwellDelaySlider; + PublicTransportBoardingHelper.BusMaxAllowedMinutesLate.Data = + (uint)m_AllAboardSettings.BusMaxDwellDelaySlider; World.DefaultGameObjectInjectionWorld.GetOrCreateSystemManaged().Enabled = false; World.DefaultGameObjectInjectionWorld.GetOrCreateSystemManaged().Enabled = false; updateSystem.UpdateAt(SystemUpdatePhase.GameSimulation); @@ -44,10 +49,10 @@ public void OnLoad(UpdateSystem updateSystem) public void OnDispose() { log.Info(nameof(OnDispose)); - if (m_Setting != null) + if (m_AllAboardSettings != null) { - m_Setting.UnregisterInOptionsUI(); - m_Setting = null; + m_AllAboardSettings.UnregisterInOptionsUI(); + m_AllAboardSettings = null; } } } diff --git a/AllAboard/Properties/PublishConfiguration.xml b/AllAboard/Properties/PublishConfiguration.xml index 66ffb9f..62e8358 100644 --- a/AllAboard/Properties/PublishConfiguration.xml +++ b/AllAboard/Properties/PublishConfiguration.xml @@ -19,12 +19,14 @@ tl;dr: This mod adds a hard cap on the Dwell Time of public transport vehicles, ### Changelog -#### 0.1.4 +#### 0.1.5 +- Rename the root mod files from the generic defaults. Should also make settings actually persist between saves! (Thanks Quoshik!) +- Updated the decompiled versions of the Car/Train AI Systems to 1.2.3f1. +#### 0.1.4 - Fixes a minor namespacing issue. - -#### 0.1.3 +#### 0.1.3 - Updated for 1.2.0f. Keeps in all of the new CO code that fixes some ResidentAI behavior while keeping a hard cap on dwell time. @@ -136,16 +138,15 @@ vehicle to reject the boarding cims! - + -- Fixes a minor namespacing issue. -- Updated for 1.2.0f. Keeps in all of the new CO code that fixes some ResidentAI behavior while keeping a hard cap on -dwell time. +- Rename the root mod files from the generic defaults. Should also make settings actually persist between saves! (Thanks Quoshik!) +- Updated the decompiled versions of the Car/Train AI Systems to 1.2.3f1. diff --git a/AllAboard/Setting.cs b/AllAboard/Settings/AllAboardSettings.cs similarity index 65% rename from AllAboard/Setting.cs rename to AllAboard/Settings/AllAboardSettings.cs index 51d0b14..cc5919d 100644 --- a/AllAboard/Setting.cs +++ b/AllAboard/Settings/AllAboardSettings.cs @@ -7,9 +7,14 @@ namespace AllAboard { - [FileLocation(nameof(Mod))] - public class Setting : ModSetting + [FileLocation(nameof(AllAboard))] + public class AllAboardSettings : ModSetting { + public AllAboardSettings(IMod mod) : base(mod) + { + SetDefaults(); + } + [SettingsUISlider(min = 0, max = 30, step = 1, unit = "Minutes")] public int TrainMaxDwellDelaySlider { get; set; } @@ -23,18 +28,13 @@ public bool ApplyButton { PublicTransportBoardingHelper.TrainMaxAllowedMinutesLate.Data = (uint)TrainMaxDwellDelaySlider; PublicTransportBoardingHelper.BusMaxAllowedMinutesLate.Data = (uint)BusMaxDwellDelaySlider; - Mod.log.InfoFormat( + AllAboard.log.InfoFormat( "Now max dwell delay: Bus: {0} minutes, Train : {1} minutes.", PublicTransportBoardingHelper.BusMaxAllowedMinutesLate.Data, PublicTransportBoardingHelper.TrainMaxAllowedMinutesLate.Data); } } - public Setting(IMod mod) : base(mod) - { - SetDefaults(); - } - public override void SetDefaults() { TrainMaxDwellDelaySlider = 8; @@ -44,11 +44,11 @@ public override void SetDefaults() public class LocaleEN : IDictionarySource { - private readonly Setting _setting; + private readonly AllAboardSettings m_AllAboardSettings; - public LocaleEN(Setting setting) + public LocaleEN(AllAboardSettings allAboardSettings) { - _setting = setting; + m_AllAboardSettings = allAboardSettings; } public IEnumerable> ReadEntries(IList errors, @@ -56,26 +56,26 @@ public IEnumerable> ReadEntries(IList { - { _setting.GetSettingsLocaleID(), "All Aboard!" }, + { m_AllAboardSettings.GetSettingsLocaleID(), "All Aboard!" }, { - _setting.GetOptionLabelLocaleID(nameof(Setting.TrainMaxDwellDelaySlider)), + m_AllAboardSettings.GetOptionLabelLocaleID(nameof(AllAboardSettings.TrainMaxDwellDelaySlider)), "Train Maximum Dwell Delay (in-game minutes)" }, { - _setting.GetOptionDescLocaleID(nameof(Setting.TrainMaxDwellDelaySlider)), + m_AllAboardSettings.GetOptionDescLocaleID(nameof(AllAboardSettings.TrainMaxDwellDelaySlider)), "Maximum amount of (in-game) time to allow a Train (Subway, Tram) to 'dwell' beyond its scheduled departure frame. " }, { - _setting.GetOptionLabelLocaleID(nameof(Setting.BusMaxDwellDelaySlider)), + m_AllAboardSettings.GetOptionLabelLocaleID(nameof(AllAboardSettings.BusMaxDwellDelaySlider)), "Bus Maximum Dwell Delay (in-game minutes)" }, { - _setting.GetOptionDescLocaleID(nameof(Setting.BusMaxDwellDelaySlider)), + m_AllAboardSettings.GetOptionDescLocaleID(nameof(AllAboardSettings.BusMaxDwellDelaySlider)), "Maximum amount of (in-game) time to allow a Bus to 'dwell' beyond its scheduled departure frame. " }, - { _setting.GetOptionLabelLocaleID(nameof(Setting.ApplyButton)), "Apply" }, - { _setting.GetOptionDescLocaleID(nameof(Setting.ApplyButton)), "Apply Settings" } + { m_AllAboardSettings.GetOptionLabelLocaleID(nameof(AllAboardSettings.ApplyButton)), "Apply" }, + { m_AllAboardSettings.GetOptionDescLocaleID(nameof(AllAboardSettings.ApplyButton)), "Apply Settings" } }; } diff --git a/AllAboard/System/Patched/PatchedTransportCarAISystem.cs b/AllAboard/System/Patched/PatchedTransportCarAISystem.cs index dbb43ac..1b451d8 100644 --- a/AllAboard/System/Patched/PatchedTransportCarAISystem.cs +++ b/AllAboard/System/Patched/PatchedTransportCarAISystem.cs @@ -1,9 +1,4 @@ -// Decompiled with JetBrains decompiler -// Type: Game.Simulation.TransportCarAISystem -// Assembly: Game, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null -// MVID: 407A0A0B-0B48-4732-BD57-8ACD1ADF3D7C - -using System.Runtime.CompilerServices; +using System.Runtime.CompilerServices; using AllAboard.System.Utility; using Colossal.Mathematics; using Game; @@ -110,9 +105,8 @@ protected override void OnCreate() m_TransportVehicleRequestArchetype = EntityManager.CreateArchetype( ComponentType.ReadWrite(), ComponentType.ReadWrite(), ComponentType.ReadWrite()); - m_EvacuationRequestArchetype = EntityManager.CreateArchetype( - ComponentType.ReadWrite(), ComponentType.ReadWrite(), - ComponentType.ReadWrite()); + m_EvacuationRequestArchetype = EntityManager.CreateArchetype(ComponentType.ReadWrite(), + ComponentType.ReadWrite(), ComponentType.ReadWrite()); m_PrisonerTransportRequestArchetype = EntityManager.CreateArchetype( ComponentType.ReadWrite(), ComponentType.ReadWrite(), ComponentType.ReadWrite()); @@ -142,8 +136,7 @@ protected override void OnCreate() [Preserve] protected override void OnUpdate() { - var boardingData = - new TransportBoardingHelpers.BoardingData(Allocator.TempJob); + var boardingData = new TransportBoardingHelpers.BoardingData(Allocator.TempJob); m_BoardingLookupData.Update(this); __TypeHandle.__Game_Vehicles_LoadingResources_RW_BufferLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Pathfind_PathElement_RW_BufferLookup.Update(ref CheckedStateRef); @@ -169,19 +162,15 @@ protected override void OnUpdate() __TypeHandle.__Game_Routes_BoardingVehicle_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Routes_Connected_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Routes_Waypoint_RO_ComponentLookup.Update(ref CheckedStateRef); - __TypeHandle.__Game_Simulation_PrisonerTransportRequest_RO_ComponentLookup.Update( - ref CheckedStateRef); + __TypeHandle.__Game_Simulation_PrisonerTransportRequest_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Simulation_EvacuationRequest_RO_ComponentLookup.Update(ref CheckedStateRef); - __TypeHandle.__Game_Simulation_TransportVehicleRequest_RO_ComponentLookup.Update( - ref CheckedStateRef); + __TypeHandle.__Game_Simulation_TransportVehicleRequest_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Simulation_ServiceRequest_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Prefabs_SpawnLocationData_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Prefabs_ObjectGeometryData_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Prefabs_ParkingLaneData_RO_ComponentLookup.Update(ref CheckedStateRef); - __TypeHandle.__Game_Prefabs_CargoTransportVehicleData_RO_ComponentLookup.Update( - ref CheckedStateRef); - __TypeHandle.__Game_Prefabs_PublicTransportVehicleData_RO_ComponentLookup.Update( - ref CheckedStateRef); + __TypeHandle.__Game_Prefabs_CargoTransportVehicleData_RO_ComponentLookup.Update(ref CheckedStateRef); + __TypeHandle.__Game_Prefabs_PublicTransportVehicleData_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Prefabs_PrefabRef_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Prefabs_CarData_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Pathfind_PathInformation_RO_ComponentLookup.Update(ref CheckedStateRef); @@ -236,8 +225,7 @@ protected override void OnUpdate() m_PrefabRefData = __TypeHandle.__Game_Prefabs_PrefabRef_RO_ComponentLookup, m_PublicTransportVehicleData = __TypeHandle.__Game_Prefabs_PublicTransportVehicleData_RO_ComponentLookup, - m_CargoTransportVehicleData = - __TypeHandle.__Game_Prefabs_CargoTransportVehicleData_RO_ComponentLookup, + m_CargoTransportVehicleData = __TypeHandle.__Game_Prefabs_CargoTransportVehicleData_RO_ComponentLookup, m_PrefabParkingLaneData = __TypeHandle.__Game_Prefabs_ParkingLaneData_RO_ComponentLookup, m_PrefabObjectGeometryData = __TypeHandle.__Game_Prefabs_ObjectGeometryData_RO_ComponentLookup, m_PrefabSpawnLocationData = __TypeHandle.__Game_Prefabs_SpawnLocationData_RO_ComponentLookup, @@ -283,8 +271,8 @@ protected override void OnUpdate() m_PathfindQueue = m_PathfindSetupSystem.GetQueue(this, 64).AsParallelWriter(), m_BoardingData = boardingData.ToConcurrent() }.ScheduleParallel(m_VehicleQuery, Dependency); - var inputDeps = boardingData.ScheduleBoarding(this, m_CityStatisticsSystem, - m_BoardingLookupData, m_SimulationSystem.frameIndex, jobHandle); + var inputDeps = boardingData.ScheduleBoarding(this, m_CityStatisticsSystem, m_BoardingLookupData, + m_SimulationSystem.frameIndex, jobHandle); boardingData.Dispose(inputDeps); m_PathfindSetupSystem.AddQueueWriter(jobHandle); m_EndFrameBarrier.AddJobHandleForProducer(jobHandle); @@ -384,27 +372,19 @@ public void Execute( { var nativeArray1 = chunk.GetNativeArray(m_EntityType); var nativeArray2 = chunk.GetNativeArray(ref m_OwnerType); - var nativeArray3 = - chunk.GetNativeArray(ref m_PathInformationType); + var nativeArray3 = chunk.GetNativeArray(ref m_PathInformationType); var nativeArray4 = chunk.GetNativeArray(ref m_PrefabRefType); - var nativeArray5 = - chunk.GetNativeArray(ref m_CurrentRouteType); - var nativeArray6 = - chunk.GetNativeArray(ref m_CurrentLaneType); - var nativeArray7 = - chunk.GetNativeArray(ref m_CargoTransportType); - var nativeArray8 = - chunk.GetNativeArray(ref m_PublicTransportType); + var nativeArray5 = chunk.GetNativeArray(ref m_CurrentRouteType); + var nativeArray6 = chunk.GetNativeArray(ref m_CurrentLaneType); + var nativeArray7 = chunk.GetNativeArray(ref m_CargoTransportType); + var nativeArray8 = chunk.GetNativeArray(ref m_PublicTransportType); var nativeArray9 = chunk.GetNativeArray(ref m_CarType); var nativeArray10 = chunk.GetNativeArray(ref m_TargetType); var nativeArray11 = chunk.GetNativeArray(ref m_PathOwnerType); var nativeArray12 = chunk.GetNativeArray(ref m_OdometerType); - var bufferAccessor1 = - chunk.GetBufferAccessor(ref m_CarNavigationLaneType); - var bufferAccessor2 = - chunk.GetBufferAccessor(ref m_PassengerType); - var bufferAccessor3 = - chunk.GetBufferAccessor(ref m_ServiceDispatchType); + var bufferAccessor1 = chunk.GetBufferAccessor(ref m_CarNavigationLaneType); + var bufferAccessor2 = chunk.GetBufferAccessor(ref m_PassengerType); + var bufferAccessor3 = chunk.GetBufferAccessor(ref m_ServiceDispatchType); var isUnspawned = chunk.Has(ref m_UnspawnedType); var random = m_RandomSeed.GetRandom(unfilteredChunkIndex); for (var index = 0; index < nativeArray1.Length; ++index) @@ -436,9 +416,9 @@ public void Execute( VehicleUtils.CheckUnspawned(unfilteredChunkIndex, entity, currentLane, isUnspawned, m_CommandBuffer); - Tick(unfilteredChunkIndex, entity, owner, pathInformation, prefabRef, currentRoute, - navigationLanes, passengers, serviceDispatches, ref random, ref cargoTransport, - ref publicTransport, ref car, ref currentLane, ref pathOwner, ref target, ref odometer); + Tick(unfilteredChunkIndex, entity, owner, pathInformation, prefabRef, currentRoute, navigationLanes, + passengers, serviceDispatches, ref random, ref cargoTransport, ref publicTransport, ref car, + ref currentLane, ref pathOwner, ref target, ref odometer); nativeArray9[index] = car; nativeArray6[index] = currentLane; nativeArray11[index] = pathOwner; @@ -471,11 +451,9 @@ private void Tick( ref Odometer odometer) { PublicTransportVehicleData componentData1; - var component1 = - m_PublicTransportVehicleData.TryGetComponent(prefabRef.m_Prefab, out componentData1); + var component1 = m_PublicTransportVehicleData.TryGetComponent(prefabRef.m_Prefab, out componentData1); CargoTransportVehicleData componentData2; - var component2 = - m_CargoTransportVehicleData.TryGetComponent(prefabRef.m_Prefab, out componentData2); + var component2 = m_CargoTransportVehicleData.TryGetComponent(prefabRef.m_Prefab, out componentData2); if (VehicleUtils.ResetUpdatedPath(ref pathOwner)) { ResetPath(jobIndex, vehicleEntity, pathInformation, serviceDispatches, ref random, @@ -493,8 +471,7 @@ private void Tick( if (component1) { if ((publicTransport.m_State & - (PublicTransportFlags.Evacuating | PublicTransportFlags.PrisonerTransport)) != - 0) + (PublicTransportFlags.Evacuating | PublicTransportFlags.PrisonerTransport)) != 0) { if (!passengers.IsCreated || passengers.Length >= componentData1.m_PassengerCapacity) { @@ -526,11 +503,10 @@ private void Tick( if (serviceDispatches.Length <= math.select(0, 1, flag2) && (cargoTransport.m_State & (CargoTransportFlags.RequiresMaintenance | CargoTransportFlags.DummyTraffic | CargoTransportFlags.Disabled)) == - 0 && - (publicTransport.m_State & (PublicTransportFlags.RequiresMaintenance | - PublicTransportFlags.DummyTraffic | - PublicTransportFlags.Disabled)) == 0) - RequestTargetIfNeeded(jobIndex, vehicleEntity, ref publicTransport, ref cargoTransport); + 0 && (publicTransport.m_State & (PublicTransportFlags.RequiresMaintenance | + PublicTransportFlags.DummyTraffic | + PublicTransportFlags.Disabled)) == + 0) RequestTargetIfNeeded(jobIndex, vehicleEntity, ref publicTransport, ref cargoTransport); } else { @@ -546,32 +522,28 @@ private void Tick( (publicTransport.m_State & PublicTransportFlags.Boarding) != 0) { flag3 = true; - StopBoarding(vehicleEntity, currentRoute, passengers, ref cargoTransport, - ref publicTransport, ref target, ref odometer, true); + StopBoarding(vehicleEntity, currentRoute, passengers, ref cargoTransport, ref publicTransport, + ref target, ref odometer, true); } if (VehicleUtils.IsStuck(pathOwner) || (cargoTransport.m_State & (CargoTransportFlags.Returning | CargoTransportFlags.DummyTraffic)) != - 0 || - (publicTransport.m_State & - (PublicTransportFlags.Returning | PublicTransportFlags.DummyTraffic)) != - 0) + 0 || (publicTransport.m_State & + (PublicTransportFlags.Returning | PublicTransportFlags.DummyTraffic)) != 0) { m_CommandBuffer.AddComponent(jobIndex, vehicleEntity, new Deleted()); return; } - ReturnToDepot(jobIndex, vehicleEntity, currentRoute, owner, serviceDispatches, - ref cargoTransport, ref publicTransport, ref car, ref pathOwner, ref target); + ReturnToDepot(jobIndex, vehicleEntity, currentRoute, owner, serviceDispatches, ref cargoTransport, + ref publicTransport, ref car, ref pathOwner, ref target); } else if (VehicleUtils.PathEndReached(currentLane) || VehicleUtils.ParkingSpaceReached(currentLane, pathOwner)) { if ((cargoTransport.m_State & (CargoTransportFlags.Returning | CargoTransportFlags.DummyTraffic)) != - 0 || - (publicTransport.m_State & - (PublicTransportFlags.Returning | PublicTransportFlags.DummyTraffic)) != - 0) + 0 || (publicTransport.m_State & + (PublicTransportFlags.Returning | PublicTransportFlags.DummyTraffic)) != 0) { if ((cargoTransport.m_State & CargoTransportFlags.Boarding) != 0 || (publicTransport.m_State & PublicTransportFlags.Boarding) != 0) @@ -586,8 +558,8 @@ private void Tick( { if (VehicleUtils.ParkingSpaceReached(currentLane, pathOwner)) { - ParkCar(jobIndex, vehicleEntity, owner, ref cargoTransport, - ref publicTransport, ref car, ref currentLane); + ParkCar(jobIndex, vehicleEntity, owner, ref cargoTransport, ref publicTransport, + ref car, ref currentLane); return; } @@ -607,8 +579,8 @@ private void Tick( { if (VehicleUtils.ParkingSpaceReached(currentLane, pathOwner)) { - ParkCar(jobIndex, vehicleEntity, owner, ref cargoTransport, - ref publicTransport, ref car, ref currentLane); + ParkCar(jobIndex, vehicleEntity, owner, ref cargoTransport, ref publicTransport, + ref car, ref currentLane); return; } @@ -625,8 +597,7 @@ private void Tick( { flag3 = true; if ((publicTransport.m_State & - (PublicTransportFlags.Evacuating | PublicTransportFlags.PrisonerTransport)) != - 0) + (PublicTransportFlags.Evacuating | PublicTransportFlags.PrisonerTransport)) != 0) { if (!SelectNextDispatch(jobIndex, vehicleEntity, currentRoute, navigationLanes, serviceDispatches, ref cargoTransport, ref publicTransport, ref car, @@ -635,8 +606,7 @@ private void Tick( ref cargoTransport, ref publicTransport, ref car, ref pathOwner, ref target); } else if ((cargoTransport.m_State & CargoTransportFlags.EnRoute) == 0 && - (publicTransport.m_State & PublicTransportFlags.EnRoute) == - 0) + (publicTransport.m_State & PublicTransportFlags.EnRoute) == 0) { ReturnToDepot(jobIndex, vehicleEntity, currentRoute, owner, serviceDispatches, ref cargoTransport, ref publicTransport, ref car, ref pathOwner, ref target); @@ -650,33 +620,30 @@ private void Tick( else { if ((publicTransport.m_State & - (PublicTransportFlags.Evacuating | PublicTransportFlags.PrisonerTransport)) == - 0 && (!m_RouteWaypoints.HasBuffer(currentRoute.m_Route) || - !m_WaypointData.HasComponent(target.m_Target))) + (PublicTransportFlags.Evacuating | PublicTransportFlags.PrisonerTransport)) == 0 && + (!m_RouteWaypoints.HasBuffer(currentRoute.m_Route) || + !m_WaypointData.HasComponent(target.m_Target))) { ReturnToDepot(jobIndex, vehicleEntity, currentRoute, owner, serviceDispatches, ref cargoTransport, ref publicTransport, ref car, ref pathOwner, ref target); } else { - if (!StartBoarding(jobIndex, vehicleEntity, currentRoute, prefabRef, - ref cargoTransport, ref publicTransport, ref target, component2)) + if (!StartBoarding(jobIndex, vehicleEntity, currentRoute, prefabRef, ref cargoTransport, + ref publicTransport, ref target, component2)) { if ((publicTransport.m_State & (PublicTransportFlags.Evacuating | - PublicTransportFlags.PrisonerTransport)) != - 0) + PublicTransportFlags.PrisonerTransport)) != 0) { if (!SelectNextDispatch(jobIndex, vehicleEntity, currentRoute, navigationLanes, serviceDispatches, ref cargoTransport, ref publicTransport, ref car, ref currentLane, ref pathOwner, ref target, component1)) - ReturnToDepot(jobIndex, vehicleEntity, currentRoute, owner, - serviceDispatches, ref cargoTransport, ref publicTransport, ref car, - ref pathOwner, ref target); + ReturnToDepot(jobIndex, vehicleEntity, currentRoute, owner, serviceDispatches, + ref cargoTransport, ref publicTransport, ref car, ref pathOwner, + ref target); } - else if ((cargoTransport.m_State & CargoTransportFlags.EnRoute) == - 0 && - (publicTransport.m_State & PublicTransportFlags.EnRoute) == - 0) + else if ((cargoTransport.m_State & CargoTransportFlags.EnRoute) == 0 && + (publicTransport.m_State & PublicTransportFlags.EnRoute) == 0) { ReturnToDepot(jobIndex, vehicleEntity, currentRoute, owner, serviceDispatches, ref cargoTransport, ref publicTransport, ref car, ref pathOwner, ref target); @@ -708,9 +675,9 @@ private void Tick( (publicTransport.m_State & PublicTransportFlags.Returning) != 0) { if (!passengers.IsCreated || passengers.Length == 0) - SelectNextDispatch(jobIndex, vehicleEntity, currentRoute, navigationLanes, - serviceDispatches, ref cargoTransport, ref publicTransport, ref car, ref currentLane, - ref pathOwner, ref target, component1); + SelectNextDispatch(jobIndex, vehicleEntity, currentRoute, navigationLanes, serviceDispatches, + ref cargoTransport, ref publicTransport, ref car, ref currentLane, ref pathOwner, + ref target, component1); } else if ((cargoTransport.m_State & CargoTransportFlags.Arriving) != 0 || (publicTransport.m_State & PublicTransportFlags.Arriving) != 0) @@ -725,11 +692,8 @@ private void Tick( cargoTransport.m_State &= ~CargoTransportFlags.Testing; publicTransport.m_State &= ~PublicTransportFlags.Testing; - if ((((cargoTransport.m_State & CargoTransportFlags.Boarding) != 0 - ? 0 - : (publicTransport.m_State & PublicTransportFlags.Boarding) == 0 - ? 1 - : 0) | (flag3 ? 1 : 0)) == 0) + if ((((cargoTransport.m_State & CargoTransportFlags.Boarding) != 0 ? 0 : + (publicTransport.m_State & PublicTransportFlags.Boarding) == 0 ? 1 : 0) | (flag3 ? 1 : 0)) == 0) return; if (VehicleUtils.RequireNewPath(pathOwner)) { @@ -782,8 +746,7 @@ private void UpdateStop( float3 = MathUtils.Tangent(componentData3.m_Bezier, float2.y); var xz2 = float3.xz; var y = componentData2.m_Position.xz - xz1; - if (math.dot(MathUtils.Left(math.select(xz2, -xz2, float2.y < (double)float2.x)), y) > - 0.0) + if (math.dot(MathUtils.Left(math.select(xz2, -xz2, float2.y < (double)float2.x)), y) > 0.0) { publicTransport.m_State |= PublicTransportFlags.StopLeft; currentLane.m_LaneFlags |= CarLaneFlags.TurnLeft; @@ -805,11 +768,10 @@ private void CheckParkingSpace( var pathElement = m_PathElements[entity]; var blockerData = new ComponentLookup(); VehicleUtils.ValidateParkingSpace(entity, ref random, ref currentLane, ref pathOwner, navigationLanes, - pathElement, ref m_ParkedCarData, ref blockerData, ref m_CurveData, - ref m_UnspawnedData, ref m_ParkingLaneData, ref m_GarageLaneData, - ref m_ConnectionLaneData, ref m_PrefabRefData, ref m_PrefabParkingLaneData, - ref m_PrefabObjectGeometryData, ref m_LaneObjects, ref m_LaneOverlaps, false, false, - false); + pathElement, ref m_ParkedCarData, ref blockerData, ref m_CurveData, ref m_UnspawnedData, + ref m_ParkingLaneData, ref m_GarageLaneData, ref m_ConnectionLaneData, ref m_PrefabRefData, + ref m_PrefabParkingLaneData, ref m_PrefabObjectGeometryData, ref m_LaneObjects, ref m_LaneOverlaps, + false, false, false); } private void ParkCar( @@ -899,8 +861,8 @@ private void FindNewPath( m_MaxSpeed = carData.m_MaxSpeed, m_WalkSpeed = 5.555556f, m_Methods = PathMethod.Road | PathMethod.SpecialParking, - m_ParkingTarget = VehicleUtils.GetParkingSource(vehicleEntity, currentLane, - ref m_ParkingLaneData, ref m_ConnectionLaneData), + m_ParkingTarget = VehicleUtils.GetParkingSource(vehicleEntity, currentLane, ref m_ParkingLaneData, + ref m_ConnectionLaneData), m_ParkingDelta = currentLane.m_CurvePosition.z, m_ParkingSize = VehicleUtils.GetParkingSize(vehicleEntity, ref m_PrefabRefData, ref m_PrefabObjectGeometryData), @@ -984,30 +946,25 @@ private void CheckNavigationLanes( if (navigationLanes.Length != 0) { carNavigationLane = navigationLanes[navigationLanes.Length - 1]; - if ((carNavigationLane.m_Flags & CarLaneFlags.EndOfPath) == - 0) + if ((carNavigationLane.m_Flags & CarLaneFlags.EndOfPath) == 0) return; } - else if ((currentLane.m_LaneFlags & CarLaneFlags.EndOfPath) == - 0) + else if ((currentLane.m_LaneFlags & CarLaneFlags.EndOfPath) == 0) { return; } - if (m_WaypointData.HasComponent(target.m_Target) && - m_RouteWaypoints.HasBuffer(currentRoute.m_Route) && + if (m_WaypointData.HasComponent(target.m_Target) && m_RouteWaypoints.HasBuffer(currentRoute.m_Route) && (!m_ConnectedData.HasComponent(target.m_Target) || !m_BoardingVehicleData.HasComponent(m_ConnectedData[target.m_Target].m_Connected))) { - if ((pathOwner.m_State & (PathFlags.Pending | PathFlags.Failed | PathFlags.Obsolete)) != - 0) + if ((pathOwner.m_State & (PathFlags.Pending | PathFlags.Failed | PathFlags.Obsolete)) != 0) return; skipWaypoint = target.m_Target; SetNextWaypointTarget(currentRoute, ref pathOwner, ref target); if (navigationLanes.Length != 0) { - if ((carNavigationLane.m_Flags & CarLaneFlags.GroupTarget) != - 0) + if ((carNavigationLane.m_Flags & CarLaneFlags.GroupTarget) != 0) { navigationLanes.RemoveAt(navigationLanes.Length - 1); } @@ -1039,12 +996,10 @@ private void CheckNavigationLanes( { if (m_BoardingVehicleData[connected.m_Connected].m_Testing == vehicleEntity) { - m_BoardingData.EndTesting(vehicleEntity, currentRoute.m_Route, - connected.m_Connected, target.m_Target); - if ((cargoTransport.m_State & CargoTransportFlags.RequireStop) == - 0 && - (publicTransport.m_State & PublicTransportFlags.RequireStop) == - 0) + m_BoardingData.EndTesting(vehicleEntity, currentRoute.m_Route, connected.m_Connected, + target.m_Target); + if ((cargoTransport.m_State & CargoTransportFlags.RequireStop) == 0 && + (publicTransport.m_State & PublicTransportFlags.RequireStop) == 0) { if ((pathOwner.m_State & (PathFlags.Pending | PathFlags.Failed | PathFlags.Obsolete)) != 0) @@ -1053,8 +1008,7 @@ private void CheckNavigationLanes( SetNextWaypointTarget(currentRoute, ref pathOwner, ref target); if (navigationLanes.Length != 0) { - if ((carNavigationLane.m_Flags & CarLaneFlags.GroupTarget) != - 0) + if ((carNavigationLane.m_Flags & CarLaneFlags.GroupTarget) != 0) { navigationLanes.RemoveAt(navigationLanes.Length - 1); } @@ -1077,25 +1031,22 @@ private void CheckNavigationLanes( else { if (navigationLanes.Length != 0 && - (carNavigationLane.m_Flags & CarLaneFlags.Reserved) == - 0) + (carNavigationLane.m_Flags & CarLaneFlags.Reserved) == 0) { if (navigationLanes.Length < 2) return; var navigationLane = navigationLanes[navigationLanes.Length - 2]; Owner componentData1; Owner componentData2; - if ((navigationLane.m_Flags & CarLaneFlags.Reserved) == - 0 || - !m_OwnerData.TryGetComponent(carNavigationLane.m_Lane, - out componentData1) || + if ((navigationLane.m_Flags & CarLaneFlags.Reserved) == 0 || + !m_OwnerData.TryGetComponent(carNavigationLane.m_Lane, out componentData1) || !m_OwnerData.TryGetComponent(navigationLane.m_Lane, out componentData2) || componentData1.m_Owner != componentData2.m_Owner) return; } - m_BoardingData.BeginTesting(vehicleEntity, currentRoute.m_Route, - connected.m_Connected, target.m_Target); + m_BoardingData.BeginTesting(vehicleEntity, currentRoute.m_Route, connected.m_Connected, + target.m_Target); return; } } @@ -1120,8 +1071,7 @@ private void CheckNavigationLanes( elem.m_Lane = currentLane.m_Lane; } - if (NetUtils.FindNextLane(ref elem.m_Lane, ref m_OwnerData, ref m_LaneData, - ref m_SubLanes)) + if (NetUtils.FindNextLane(ref elem.m_Lane, ref m_OwnerData, ref m_LaneData, ref m_SubLanes)) { if (navigationLanes.Length != 0) { @@ -1174,23 +1124,20 @@ private void ResetPath( var pathElement = m_PathElements[vehicleEntity]; if ((pathOwner.m_State & PathFlags.Append) == 0) { - PathUtils.ResetPath(ref currentLane, pathElement, m_SlaveLaneData, m_OwnerData, - m_SubLanes); + PathUtils.ResetPath(ref currentLane, pathElement, m_SlaveLaneData, m_OwnerData, m_SubLanes); VehicleUtils.ResetParkingLaneStatus(vehicleEntity, ref currentLane, ref pathOwner, pathElement, - ref m_EntityLookup, ref m_CurveData, ref m_ParkingLaneData, - ref m_CarLaneData, ref m_ConnectionLaneData, ref m_SpawnLocationData, - ref m_PrefabRefData, ref m_PrefabSpawnLocationData); + ref m_EntityLookup, ref m_CurveData, ref m_ParkingLaneData, ref m_CarLaneData, + ref m_ConnectionLaneData, ref m_SpawnLocationData, ref m_PrefabRefData, + ref m_PrefabSpawnLocationData); } VehicleUtils.SetParkingCurvePos(vehicleEntity, ref random, currentLane, pathOwner, pathElement, - ref m_ParkedCarData, ref m_UnspawnedData, ref m_CurveData, - ref m_ParkingLaneData, ref m_ConnectionLaneData, ref m_PrefabRefData, - ref m_PrefabObjectGeometryData, ref m_PrefabParkingLaneData, ref m_LaneObjects, - ref m_LaneOverlaps, false); + ref m_ParkedCarData, ref m_UnspawnedData, ref m_CurveData, ref m_ParkingLaneData, + ref m_ConnectionLaneData, ref m_PrefabRefData, ref m_PrefabObjectGeometryData, + ref m_PrefabParkingLaneData, ref m_LaneObjects, ref m_LaneOverlaps, false); if ((cargoTransport.m_State & (CargoTransportFlags.Returning | CargoTransportFlags.DummyTraffic)) != - 0 || - (publicTransport.m_State & (PublicTransportFlags.Returning | PublicTransportFlags.DummyTraffic)) != - 0) + 0 || (publicTransport.m_State & + (PublicTransportFlags.Returning | PublicTransportFlags.DummyTraffic)) != 0) { car.m_Flags &= ~CarFlags.StayOnRoad; } @@ -1238,10 +1185,8 @@ private void CheckDummyResources( return; if (m_CargoTransportVehicleData.HasComponent(prefabRef.m_Prefab)) { - var transportVehicleData = - m_CargoTransportVehicleData[prefabRef.m_Prefab]; - var dynamicBuffer = - m_CommandBuffer.SetBuffer(jobIndex, vehicleEntity); + var transportVehicleData = m_CargoTransportVehicleData[prefabRef.m_Prefab]; + var dynamicBuffer = m_CommandBuffer.SetBuffer(jobIndex, vehicleEntity); for (var index = 0; index < loadingResources.Length && dynamicBuffer.Length < transportVehicleData.m_MaxResourceCount; @@ -1340,12 +1285,11 @@ private void CheckServiceDispatches( { var evacuationRequest = m_EvacuationRequestData[request2]; DynamicBuffer bufferData; - if (flag && m_PathElements.TryGetBuffer(request2, out bufferData) && - bufferData.Length != 0) + if (flag && m_PathElements.TryGetBuffer(request2, out bufferData) && bufferData.Length != 0) { var pathElement3 = bufferData[0]; - if (pathElement3.m_Target != pathElement1.m_Target || - pathElement3.m_TargetDelta.x != (double)pathElement1.m_TargetDelta.y) + if (pathElement3.m_Target != pathElement1.m_Target || pathElement3.m_TargetDelta.x != + (double)pathElement1.m_TargetDelta.y) continue; } @@ -1360,8 +1304,7 @@ private void CheckServiceDispatches( { if (m_PrisonerTransportRequestData.HasComponent(request2)) { - var transportRequest = - m_PrisonerTransportRequestData[request2]; + var transportRequest = m_PrisonerTransportRequestData[request2]; DynamicBuffer bufferData; if (flag && m_PathElements.TryGetBuffer(request2, out bufferData) && bufferData.Length != 0) @@ -1410,30 +1353,25 @@ private void RequestTargetIfNeeded( return; var entity1 = m_CommandBuffer.CreateEntity(jobIndex, m_EvacuationRequestArchetype); m_CommandBuffer.SetComponent(jobIndex, entity1, new ServiceRequest(true)); - m_CommandBuffer.SetComponent(jobIndex, entity1, - new EvacuationRequest(entity, 1f)); + m_CommandBuffer.SetComponent(jobIndex, entity1, new EvacuationRequest(entity, 1f)); m_CommandBuffer.SetComponent(jobIndex, entity1, new RequestGroup(4U)); } else if ((publicTransport.m_State & PublicTransportFlags.PrisonerTransport) != 0) { if (((int)m_SimulationFrameIndex & ((int)math.max(256U, 16U) - 1)) != 1) return; - var entity2 = - m_CommandBuffer.CreateEntity(jobIndex, m_PrisonerTransportRequestArchetype); + var entity2 = m_CommandBuffer.CreateEntity(jobIndex, m_PrisonerTransportRequestArchetype); m_CommandBuffer.SetComponent(jobIndex, entity2, new ServiceRequest(true)); - m_CommandBuffer.SetComponent(jobIndex, entity2, - new PrisonerTransportRequest(entity, 1)); + m_CommandBuffer.SetComponent(jobIndex, entity2, new PrisonerTransportRequest(entity, 1)); m_CommandBuffer.SetComponent(jobIndex, entity2, new RequestGroup(16U)); } else { if (((int)m_SimulationFrameIndex & ((int)math.max(256U, 16U) - 1)) != 1) return; - var entity3 = - m_CommandBuffer.CreateEntity(jobIndex, m_TransportVehicleRequestArchetype); + var entity3 = m_CommandBuffer.CreateEntity(jobIndex, m_TransportVehicleRequestArchetype); m_CommandBuffer.SetComponent(jobIndex, entity3, new ServiceRequest(true)); - m_CommandBuffer.SetComponent(jobIndex, entity3, - new TransportVehicleRequest(entity, 1f)); + m_CommandBuffer.SetComponent(jobIndex, entity3, new TransportVehicleRequest(entity, 1f)); m_CommandBuffer.SetComponent(jobIndex, entity3, new RequestGroup(8U)); } } @@ -1462,11 +1400,9 @@ private bool SelectNextDispatch( } if ((cargoTransport.m_State & - (CargoTransportFlags.RequiresMaintenance | CargoTransportFlags.Disabled)) != - 0 || + (CargoTransportFlags.RequiresMaintenance | CargoTransportFlags.Disabled)) != 0 || (publicTransport.m_State & - (PublicTransportFlags.RequiresMaintenance | PublicTransportFlags.Disabled)) != - 0) + (PublicTransportFlags.RequiresMaintenance | PublicTransportFlags.Disabled)) != 0) { cargoTransport.m_RequestCount = 0; publicTransport.m_RequestCount = 0; @@ -1489,7 +1425,6 @@ private bool SelectNextDispatch( route = m_TransportVehicleRequestData[request].m_Route; if (m_PathInformationData.HasComponent(request)) entity1 = m_PathInformationData[request].m_Destination; - carFlags = (carFlags & ~CarFlags.Emergency) | CarFlags.StayOnRoad; } else @@ -1525,15 +1460,12 @@ private bool SelectNextDispatch( { if (currentRoute.m_Route != route) { - m_CommandBuffer.AddComponent(jobIndex, vehicleEntity, - new CurrentRoute(route)); - m_CommandBuffer.AppendToBuffer(jobIndex, route, - new RouteVehicle(vehicleEntity)); + m_CommandBuffer.AddComponent(jobIndex, vehicleEntity, new CurrentRoute(route)); + m_CommandBuffer.AppendToBuffer(jobIndex, route, new RouteVehicle(vehicleEntity)); Color componentData; if (m_RouteColorData.TryGetComponent(route, out componentData)) { - m_CommandBuffer.AddComponent(jobIndex, vehicleEntity, - componentData); + m_CommandBuffer.AddComponent(jobIndex, vehicleEntity, componentData); m_CommandBuffer.AddComponent(jobIndex, vehicleEntity); } } @@ -1644,14 +1576,12 @@ private bool StartBoarding( bool isCargoVehicle) { if ((publicTransport.m_State & - (PublicTransportFlags.Evacuating | PublicTransportFlags.PrisonerTransport)) != - 0) + (PublicTransportFlags.Evacuating | PublicTransportFlags.PrisonerTransport)) != 0) { publicTransport.m_State |= PublicTransportFlags.Boarding; - publicTransport.m_DepartureFrame = - (publicTransport.m_State & PublicTransportFlags.Returning) == 0 - ? m_SimulationFrameIndex + 4096U - : m_SimulationFrameIndex + 64U; + publicTransport.m_DepartureFrame = (publicTransport.m_State & PublicTransportFlags.Returning) == 0 + ? m_SimulationFrameIndex + 4096U + : m_SimulationFrameIndex + 64U; publicTransport.m_MaxBoardingDistance = 0.0f; publicTransport.m_MinWaitingDistance = float.MaxValue; return true; @@ -1672,11 +1602,8 @@ private bool StartBoarding( carData.m_EnergyType) != 0; } - if ((!refuel && - ((cargoTransport.m_State & CargoTransportFlags.RequiresMaintenance) != - 0 || - (publicTransport.m_State & PublicTransportFlags.RequiresMaintenance) != - 0)) || + if ((!refuel && ((cargoTransport.m_State & CargoTransportFlags.RequiresMaintenance) != 0 || + (publicTransport.m_State & PublicTransportFlags.RequiresMaintenance) != 0)) || (cargoTransport.m_State & CargoTransportFlags.AbandonRoute) != 0 || (publicTransport.m_State & PublicTransportFlags.AbandonRoute) != 0) { @@ -1700,7 +1627,6 @@ private bool StartBoarding( publicTransport.m_State |= PublicTransportFlags.RouteSource; var storageCompanyFromStop = Entity.Null; if (isCargoVehicle) storageCompanyFromStop = GetStorageCompanyFromStop(connected.m_Connected); - m_BoardingData.BeginBoarding(vehicleEntity, currentRoute.m_Route, connected.m_Connected, target.m_Target, storageCompanyFromStop, nextStorageCompany, refuel); return true; @@ -1718,7 +1644,6 @@ private bool StartBoarding( publicTransport.m_State &= ~(PublicTransportFlags.EnRoute | PublicTransportFlags.AbandonRoute); if (currentRoute.m_Route != Entity.Null) m_CommandBuffer.RemoveComponent(jobIndex, vehicleEntity); - return false; } @@ -1746,12 +1671,10 @@ private bool StopBoarding( publicTransport.m_MinWaitingDistance == 0.0); publicTransport.m_MinWaitingDistance = float.MaxValue; if ((flag || (publicTransport.m_State & - (PublicTransportFlags.Evacuating | PublicTransportFlags.PrisonerTransport)) != - 0) && + (PublicTransportFlags.Evacuating | PublicTransportFlags.PrisonerTransport)) != 0) && (m_SimulationFrameIndex < cargoTransport.m_DepartureFrame || m_SimulationFrameIndex < publicTransport.m_DepartureFrame || - publicTransport.m_MaxBoardingDistance != - 3.4028234663852886E+38)) + publicTransport.m_MaxBoardingDistance != 3.4028234663852886E+38)) return false; if (passengers.IsCreated) { @@ -1760,9 +1683,7 @@ private bool StopBoarding( publicTransport, PublicTransportBoardingHelper.TransportFamily.Bus, m_SimulationFrameIndex); if (!boardingComplete) - { return false; - } } } @@ -1770,13 +1691,11 @@ private bool StopBoarding( (publicTransport.m_State & PublicTransportFlags.Refueling) != 0) odometer.m_Distance = 0.0f; if ((publicTransport.m_State & - (PublicTransportFlags.Evacuating | PublicTransportFlags.PrisonerTransport)) == - 0 && flag) + (PublicTransportFlags.Evacuating | PublicTransportFlags.PrisonerTransport)) == 0 && flag) { var storageCompanyFromStop = Entity.Null; var nextStorageCompany = Entity.Null; - if (!forcedStop && (cargoTransport.m_State & CargoTransportFlags.Boarding) != - 0) + if (!forcedStop && (cargoTransport.m_State & CargoTransportFlags.Boarding) != 0) { storageCompanyFromStop = GetStorageCompanyFromStop(componentData1.m_Connected); if ((cargoTransport.m_State & CargoTransportFlags.EnRoute) != 0) @@ -1798,7 +1717,6 @@ private Entity GetTransportStationFromStop(Entity stop) for (; !m_TransportStationData.HasComponent(stop); stop = m_OwnerData[stop].m_Owner) if (!m_OwnerData.HasComponent(stop)) return Entity.Null; - if (m_OwnerData.HasComponent(stop)) { var owner = m_OwnerData[stop].m_Owner; @@ -1814,7 +1732,6 @@ private Entity GetStorageCompanyFromStop(Entity stop) for (; !m_StorageCompanyData.HasComponent(stop); stop = m_OwnerData[stop].m_Owner) if (!m_OwnerData.HasComponent(stop)) return Entity.Null; - return stop; } @@ -1828,8 +1745,7 @@ private Entity GetNextStorageCompany(Entity route, Entity currentWaypoint) var waypoint = routeWaypoint[index2].m_Waypoint; if (m_ConnectedData.HasComponent(waypoint)) { - var storageCompanyFromStop = - GetStorageCompanyFromStop(m_ConnectedData[waypoint].m_Connected); + var storageCompanyFromStop = GetStorageCompanyFromStop(m_ConnectedData[waypoint].m_Connected); if (storageCompanyFromStop != Entity.Null) return storageCompanyFromStop; } @@ -1862,13 +1778,8 @@ private struct TypeHandle [ReadOnly] public ComponentTypeHandle __Game_Prefabs_PrefabRef_RO_ComponentTypeHandle; [ReadOnly] public ComponentTypeHandle __Game_Routes_CurrentRoute_RO_ComponentTypeHandle; [ReadOnly] public BufferTypeHandle __Game_Vehicles_Passenger_RO_BufferTypeHandle; - - public ComponentTypeHandle - __Game_Vehicles_CargoTransport_RW_ComponentTypeHandle; - - public ComponentTypeHandle - __Game_Vehicles_PublicTransport_RW_ComponentTypeHandle; - + public ComponentTypeHandle __Game_Vehicles_CargoTransport_RW_ComponentTypeHandle; + public ComponentTypeHandle __Game_Vehicles_PublicTransport_RW_ComponentTypeHandle; public ComponentTypeHandle __Game_Vehicles_Car_RW_ComponentTypeHandle; public ComponentTypeHandle __Game_Vehicles_CarCurrentLane_RW_ComponentTypeHandle; public ComponentTypeHandle __Game_Common_Target_RW_ComponentTypeHandle; @@ -1879,9 +1790,7 @@ public ComponentTypeHandle [ReadOnly] public EntityStorageInfoLookup __EntityStorageInfoLookup; [ReadOnly] public ComponentLookup __Game_Vehicles_ParkedCar_RO_ComponentLookup; [ReadOnly] public ComponentLookup __Game_Objects_Transform_RO_ComponentLookup; - [ReadOnly] public ComponentLookup __Game_Objects_SpawnLocation_RO_ComponentLookup; - [ReadOnly] public ComponentLookup __Game_Objects_Unspawned_RO_ComponentLookup; [ReadOnly] public ComponentLookup __Game_Common_Owner_RO_ComponentLookup; [ReadOnly] public ComponentLookup __Game_Pathfind_PathInformation_RO_ComponentLookup; @@ -1896,9 +1805,7 @@ [ReadOnly] public ComponentLookup [ReadOnly] public ComponentLookup __Game_Prefabs_ParkingLaneData_RO_ComponentLookup; [ReadOnly] public ComponentLookup __Game_Prefabs_ObjectGeometryData_RO_ComponentLookup; - [ReadOnly] public ComponentLookup __Game_Prefabs_SpawnLocationData_RO_ComponentLookup; - [ReadOnly] public ComponentLookup __Game_Simulation_ServiceRequest_RO_ComponentLookup; [ReadOnly] public ComponentLookup @@ -1914,19 +1821,11 @@ [ReadOnly] public ComponentLookup [ReadOnly] public ComponentLookup __Game_Routes_BoardingVehicle_RO_ComponentLookup; [ReadOnly] public ComponentLookup __Game_Routes_RouteLane_RO_ComponentLookup; [ReadOnly] public ComponentLookup __Game_Routes_Color_RO_ComponentLookup; - [ReadOnly] public ComponentLookup __Game_Companies_StorageCompany_RO_ComponentLookup; - - [ReadOnly] public ComponentLookup - __Game_Buildings_TransportStation_RO_ComponentLookup; - + [ReadOnly] public ComponentLookup __Game_Buildings_TransportStation_RO_ComponentLookup; [ReadOnly] public ComponentLookup __Game_Buildings_TransportDepot_RO_ComponentLookup; - [ReadOnly] public ComponentLookup __Game_Buildings_Prison_RO_ComponentLookup; - - [ReadOnly] public ComponentLookup - __Game_Buildings_EmergencyShelter_RO_ComponentLookup; - + [ReadOnly] public ComponentLookup __Game_Buildings_EmergencyShelter_RO_ComponentLookup; [ReadOnly] public ComponentLookup __Game_Net_Lane_RO_ComponentLookup; [ReadOnly] public ComponentLookup __Game_Net_CarLane_RO_ComponentLookup; [ReadOnly] public ComponentLookup __Game_Net_SlaveLane_RO_ComponentLookup; @@ -1951,46 +1850,36 @@ public void __AssignHandles(ref SystemState state) __Game_Pathfind_PathInformation_RO_ComponentTypeHandle = state.GetComponentTypeHandle(true); __Game_Prefabs_PrefabRef_RO_ComponentTypeHandle = state.GetComponentTypeHandle(true); - __Game_Routes_CurrentRoute_RO_ComponentTypeHandle = - state.GetComponentTypeHandle(true); + __Game_Routes_CurrentRoute_RO_ComponentTypeHandle = state.GetComponentTypeHandle(true); __Game_Vehicles_Passenger_RO_BufferTypeHandle = state.GetBufferTypeHandle(true); - __Game_Vehicles_CargoTransport_RW_ComponentTypeHandle = - state.GetComponentTypeHandle(); + __Game_Vehicles_CargoTransport_RW_ComponentTypeHandle = state.GetComponentTypeHandle(); __Game_Vehicles_PublicTransport_RW_ComponentTypeHandle = state.GetComponentTypeHandle(); __Game_Vehicles_Car_RW_ComponentTypeHandle = state.GetComponentTypeHandle(); - __Game_Vehicles_CarCurrentLane_RW_ComponentTypeHandle = - state.GetComponentTypeHandle(); + __Game_Vehicles_CarCurrentLane_RW_ComponentTypeHandle = state.GetComponentTypeHandle(); __Game_Common_Target_RW_ComponentTypeHandle = state.GetComponentTypeHandle(); __Game_Pathfind_PathOwner_RW_ComponentTypeHandle = state.GetComponentTypeHandle(); __Game_Vehicles_Odometer_RW_ComponentTypeHandle = state.GetComponentTypeHandle(); - __Game_Vehicles_CarNavigationLane_RW_BufferTypeHandle = - state.GetBufferTypeHandle(); - __Game_Simulation_ServiceDispatch_RW_BufferTypeHandle = - state.GetBufferTypeHandle(); + __Game_Vehicles_CarNavigationLane_RW_BufferTypeHandle = state.GetBufferTypeHandle(); + __Game_Simulation_ServiceDispatch_RW_BufferTypeHandle = state.GetBufferTypeHandle(); __EntityStorageInfoLookup = state.GetEntityStorageInfoLookup(); __Game_Vehicles_ParkedCar_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Objects_Transform_RO_ComponentLookup = state.GetComponentLookup(true); - __Game_Objects_SpawnLocation_RO_ComponentLookup = - state.GetComponentLookup(true); + __Game_Objects_SpawnLocation_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Objects_Unspawned_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Common_Owner_RO_ComponentLookup = state.GetComponentLookup(true); - __Game_Pathfind_PathInformation_RO_ComponentLookup = - state.GetComponentLookup(true); + __Game_Pathfind_PathInformation_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Prefabs_CarData_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Prefabs_PrefabRef_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Prefabs_PublicTransportVehicleData_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Prefabs_CargoTransportVehicleData_RO_ComponentLookup = state.GetComponentLookup(true); - __Game_Prefabs_ParkingLaneData_RO_ComponentLookup = - state.GetComponentLookup(true); + __Game_Prefabs_ParkingLaneData_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Prefabs_ObjectGeometryData_RO_ComponentLookup = state.GetComponentLookup(true); - __Game_Prefabs_SpawnLocationData_RO_ComponentLookup = - state.GetComponentLookup(true); - __Game_Simulation_ServiceRequest_RO_ComponentLookup = - state.GetComponentLookup(true); + __Game_Prefabs_SpawnLocationData_RO_ComponentLookup = state.GetComponentLookup(true); + __Game_Simulation_ServiceRequest_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Simulation_TransportVehicleRequest_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Simulation_EvacuationRequest_RO_ComponentLookup = @@ -2002,25 +1891,19 @@ public void __AssignHandles(ref SystemState state) __Game_Routes_BoardingVehicle_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Routes_RouteLane_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Routes_Color_RO_ComponentLookup = state.GetComponentLookup(true); - __Game_Companies_StorageCompany_RO_ComponentLookup = - state.GetComponentLookup(true); - __Game_Buildings_TransportStation_RO_ComponentLookup = - state.GetComponentLookup(true); - __Game_Buildings_TransportDepot_RO_ComponentLookup = - state.GetComponentLookup(true); + __Game_Companies_StorageCompany_RO_ComponentLookup = state.GetComponentLookup(true); + __Game_Buildings_TransportStation_RO_ComponentLookup = state.GetComponentLookup(true); + __Game_Buildings_TransportDepot_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Buildings_Prison_RO_ComponentLookup = state.GetComponentLookup(true); - __Game_Buildings_EmergencyShelter_RO_ComponentLookup = - state.GetComponentLookup(true); + __Game_Buildings_EmergencyShelter_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Net_Lane_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Net_CarLane_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Net_SlaveLane_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Net_ParkingLane_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Net_GarageLane_RO_ComponentLookup = state.GetComponentLookup(true); - __Game_Net_ConnectionLane_RO_ComponentLookup = - state.GetComponentLookup(true); + __Game_Net_ConnectionLane_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Net_Curve_RO_ComponentLookup = state.GetComponentLookup(true); - __Game_Creatures_CurrentVehicle_RO_ComponentLookup = - state.GetComponentLookup(true); + __Game_Creatures_CurrentVehicle_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Routes_RouteWaypoint_RO_BufferLookup = state.GetBufferLookup(true); __Game_Net_SubLane_RO_BufferLookup = state.GetBufferLookup(true); __Game_Net_LaneObject_RO_BufferLookup = state.GetBufferLookup(true); diff --git a/AllAboard/System/Patched/PatchedTransportTrainAISystem.cs b/AllAboard/System/Patched/PatchedTransportTrainAISystem.cs index b5297b5..9a320c1 100644 --- a/AllAboard/System/Patched/PatchedTransportTrainAISystem.cs +++ b/AllAboard/System/Patched/PatchedTransportTrainAISystem.cs @@ -1,7 +1,7 @@ // Decompiled with JetBrains decompiler // Type: Game.Simulation.TransportTrainAISystem // Assembly: Game, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null -// MVID: 407A0A0B-0B48-4732-BD57-8ACD1ADF3D7C +// MVID: 6E65E546-90EB-41EE-A5F5-E22CC56BB1AC using System.Runtime.CompilerServices; using AllAboard.System.Utility; @@ -40,6 +40,7 @@ using TransportStation = Game.Buildings.TransportStation; namespace AllAboard.System.Patched + { [CompilerGenerated] public partial class PatchedTransportTrainAISystem : GameSystemBase @@ -164,10 +165,8 @@ protected override void OnUpdate() __TypeHandle.__Game_Routes_BoardingVehicle_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Routes_Connected_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Routes_Waypoint_RO_ComponentLookup.Update(ref CheckedStateRef); - __TypeHandle.__Game_Prefabs_CargoTransportVehicleData_RO_ComponentLookup.Update( - ref CheckedStateRef); - __TypeHandle.__Game_Prefabs_PublicTransportVehicleData_RO_ComponentLookup.Update( - ref CheckedStateRef); + __TypeHandle.__Game_Prefabs_CargoTransportVehicleData_RO_ComponentLookup.Update(ref CheckedStateRef); + __TypeHandle.__Game_Prefabs_PublicTransportVehicleData_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Prefabs_PrefabRef_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Prefabs_TrainData_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Net_Edge_RO_ComponentLookup.Update(ref CheckedStateRef); @@ -176,8 +175,7 @@ protected override void OnUpdate() __TypeHandle.__Game_Net_Curve_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Vehicles_Controller_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Vehicles_ParkedTrain_RO_ComponentLookup.Update(ref CheckedStateRef); - __TypeHandle.__Game_Simulation_TransportVehicleRequest_RO_ComponentLookup.Update( - ref CheckedStateRef); + __TypeHandle.__Game_Simulation_TransportVehicleRequest_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Pathfind_PathInformation_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Common_Owner_RO_ComponentLookup.Update(ref CheckedStateRef); __TypeHandle.__Game_Objects_SpawnLocation_RO_ComponentLookup.Update(ref CheckedStateRef); @@ -229,8 +227,7 @@ protected override void OnUpdate() m_PrefabRefData = __TypeHandle.__Game_Prefabs_PrefabRef_RO_ComponentLookup, m_PublicTransportVehicleData = __TypeHandle.__Game_Prefabs_PublicTransportVehicleData_RO_ComponentLookup, - m_CargoTransportVehicleData = - __TypeHandle.__Game_Prefabs_CargoTransportVehicleData_RO_ComponentLookup, + m_CargoTransportVehicleData = __TypeHandle.__Game_Prefabs_CargoTransportVehicleData_RO_ComponentLookup, m_WaypointData = __TypeHandle.__Game_Routes_Waypoint_RO_ComponentLookup, m_ConnectedData = __TypeHandle.__Game_Routes_Connected_RO_ComponentLookup, m_BoardingVehicleData = __TypeHandle.__Game_Routes_BoardingVehicle_RO_ComponentLookup, @@ -261,8 +258,7 @@ protected override void OnUpdate() m_CommandBuffer = m_EndFrameBarrier.CreateCommandBuffer().AsParallelWriter(), m_PathfindQueue = m_PathfindSetupSystem.GetQueue(this, 64).AsParallelWriter(), m_BoardingData = boardingData.ToConcurrent() - }.ScheduleParallel(m_VehicleQuery, - JobHandle.CombineDependencies(Dependency, jobHandle1)); + }.ScheduleParallel(m_VehicleQuery, JobHandle.CombineDependencies(Dependency, jobHandle1)); var inputDeps = boardingData.ScheduleBoarding(this, m_CityStatisticsSystem, m_BoardingLookupData, m_SimulationSystem.frameIndex, jobHandle2); m_TransportTrainCarriageSelectData.PostUpdate(jobHandle2); @@ -359,19 +355,14 @@ public void Execute( var nativeArray1 = chunk.GetNativeArray(m_EntityType); var nativeArray2 = chunk.GetNativeArray(ref m_OwnerType); var nativeArray3 = chunk.GetNativeArray(ref m_PrefabRefType); - var nativeArray4 = - chunk.GetNativeArray(ref m_CurrentRouteType); - var nativeArray5 = - chunk.GetNativeArray(ref m_CargoTransportType); - var nativeArray6 = - chunk.GetNativeArray(ref m_PublicTransportType); + var nativeArray4 = chunk.GetNativeArray(ref m_CurrentRouteType); + var nativeArray5 = chunk.GetNativeArray(ref m_CargoTransportType); + var nativeArray6 = chunk.GetNativeArray(ref m_PublicTransportType); var nativeArray7 = chunk.GetNativeArray(ref m_TargetType); var nativeArray8 = chunk.GetNativeArray(ref m_PathOwnerType); var nativeArray9 = chunk.GetNativeArray(ref m_OdometerType); - var bufferAccessor1 = - chunk.GetBufferAccessor(ref m_LayoutElementType); - var bufferAccessor2 = - chunk.GetBufferAccessor(ref m_NavigationLaneType); + var bufferAccessor1 = chunk.GetBufferAccessor(ref m_LayoutElementType); + var bufferAccessor2 = chunk.GetBufferAccessor(ref m_NavigationLaneType); var bufferAccessor3 = chunk.GetBufferAccessor(ref m_ServiceDispatchType); var random = m_RandomSeed.GetRandom(unfilteredChunkIndex); @@ -434,7 +425,6 @@ private void Tick( m_LoadingResources.TryGetBuffer(vehicleEntity, out bufferData)) { if (bufferData.Length != 0) QuantityUpdated(jobIndex, vehicleEntity, layout); - if (CheckLoadingResources(jobIndex, ref random, vehicleEntity, true, layout, bufferData)) { pathOwner.m_State |= PathFlags.Updated; @@ -460,21 +450,19 @@ private void Tick( { if (VehicleUtils.IsReversedPath(pathElement, pathOwner, vehicleEntity, layout, m_CurveData, m_CurrentLaneData, m_TrainData, m_TransformData)) - VehicleUtils.ReverseTrain(vehicleEntity, layout, ref m_TrainData, - ref m_CurrentLaneData, ref m_NavigationData); + VehicleUtils.ReverseTrain(vehicleEntity, layout, ref m_TrainData, ref m_CurrentLaneData, + ref m_NavigationData); } PathUtils.ExtendReverseLocations(prevElement, pathElement, pathOwner, length, m_CurveData, - m_LaneData, m_EdgeLaneData, m_OwnerData, m_EdgeData, m_ConnectedEdges, - m_SubLanes); + m_LaneData, m_EdgeLaneData, m_OwnerData, m_EdgeData, m_ConnectedEdges, m_SubLanes); if (!m_WaypointData.HasComponent(target.m_Target) || (m_ConnectedData.HasComponent(target.m_Target) && m_BoardingVehicleData.HasComponent(m_ConnectedData[target.m_Target].m_Connected))) { var distance = length * 0.5f; - PathUtils.ExtendPath(pathElement, pathOwner, ref distance, ref m_CurveData, - ref m_LaneData, ref m_EdgeLaneData, ref m_OwnerData, ref m_EdgeData, - ref m_ConnectedEdges, ref m_SubLanes); + PathUtils.ExtendPath(pathElement, pathOwner, ref distance, ref m_CurveData, ref m_LaneData, + ref m_EdgeLaneData, ref m_OwnerData, ref m_EdgeData, ref m_ConnectedEdges, ref m_SubLanes); } UpdatePantograph(layout); @@ -486,15 +474,11 @@ private void Tick( var train = m_TrainData[entity1]; var currentLane = m_CurrentLaneData[entity1]; VehicleUtils.CheckUnspawned(jobIndex, vehicleEntity, currentLane, isUnspawned, m_CommandBuffer); - var num1 = (cargoTransport.m_State & CargoTransportFlags.EnRoute) != 0 - ? 0 - : (publicTransport.m_State & PublicTransportFlags.EnRoute) == 0 - ? 1 - : 0; + var num1 = (cargoTransport.m_State & CargoTransportFlags.EnRoute) != 0 ? 0 : + (publicTransport.m_State & PublicTransportFlags.EnRoute) == 0 ? 1 : 0; if (m_PublicTransportVehicleData.HasComponent(prefabRef.m_Prefab)) { - var transportVehicleData = - m_PublicTransportVehicleData[prefabRef.m_Prefab]; + var transportVehicleData = m_PublicTransportVehicleData[prefabRef.m_Prefab]; if (odometer.m_Distance >= (double)transportVehicleData.m_MaintenanceRange && transportVehicleData.m_MaintenanceRange > 0.10000000149011612 && (publicTransport.m_State & PublicTransportFlags.Refueling) == 0) @@ -504,8 +488,7 @@ private void Tick( var isCargoVehicle = false; if (m_CargoTransportVehicleData.HasComponent(prefabRef.m_Prefab)) { - var transportVehicleData = - m_CargoTransportVehicleData[prefabRef.m_Prefab]; + var transportVehicleData = m_CargoTransportVehicleData[prefabRef.m_Prefab]; if (odometer.m_Distance >= (double)transportVehicleData.m_MaintenanceRange && transportVehicleData.m_MaintenanceRange > 0.10000000149011612 && (cargoTransport.m_State & CargoTransportFlags.Refueling) == 0) @@ -515,16 +498,14 @@ private void Tick( if (num1 != 0) { - CheckServiceDispatches(vehicleEntity, serviceDispatches, ref cargoTransport, - ref publicTransport); + CheckServiceDispatches(vehicleEntity, serviceDispatches, ref cargoTransport, ref publicTransport); if (serviceDispatches.Length == 0 && (cargoTransport.m_State & (CargoTransportFlags.RequiresMaintenance | CargoTransportFlags.DummyTraffic | CargoTransportFlags.Disabled)) == - 0 && - (publicTransport.m_State & (PublicTransportFlags.RequiresMaintenance | - PublicTransportFlags.DummyTraffic | - PublicTransportFlags.Disabled)) == 0) - RequestTargetIfNeeded(jobIndex, vehicleEntity, ref publicTransport, ref cargoTransport); + 0 && (publicTransport.m_State & (PublicTransportFlags.RequiresMaintenance | + PublicTransportFlags.DummyTraffic | + PublicTransportFlags.Disabled)) == + 0) RequestTargetIfNeeded(jobIndex, vehicleEntity, ref publicTransport, ref cargoTransport); } else { @@ -568,10 +549,8 @@ private void Tick( if (VehicleUtils.IsStuck(pathOwner) || (cargoTransport.m_State & (CargoTransportFlags.Returning | CargoTransportFlags.DummyTraffic)) != - 0 || - (publicTransport.m_State & - (PublicTransportFlags.Returning | PublicTransportFlags.DummyTraffic)) != - 0) + 0 || (publicTransport.m_State & + (PublicTransportFlags.Returning | PublicTransportFlags.DummyTraffic)) != 0) { VehicleUtils.DeleteVehicle(m_CommandBuffer, jobIndex, vehicleEntity, layout); m_TrainData[entity1] = train; @@ -579,16 +558,14 @@ private void Tick( return; } - ReturnToDepot(jobIndex, vehicleEntity, currentRoute, owner, serviceDispatches, - ref cargoTransport, ref publicTransport, ref train, ref pathOwner, ref target); + ReturnToDepot(jobIndex, vehicleEntity, currentRoute, owner, serviceDispatches, ref cargoTransport, + ref publicTransport, ref train, ref pathOwner, ref target); } else if (VehicleUtils.PathEndReached(currentLane)) { if ((cargoTransport.m_State & (CargoTransportFlags.Returning | CargoTransportFlags.DummyTraffic)) != - 0 || - (publicTransport.m_State & - (PublicTransportFlags.Returning | PublicTransportFlags.DummyTraffic)) != - 0) + 0 || (publicTransport.m_State & + (PublicTransportFlags.Returning | PublicTransportFlags.DummyTraffic)) != 0) { if ((cargoTransport.m_State & CargoTransportFlags.Boarding) != 0 || (publicTransport.m_State & PublicTransportFlags.Boarding) != 0) @@ -598,15 +575,13 @@ private void Tick( false)) { flag = true; - if (!SelectNextDispatch(jobIndex, vehicleEntity, currentRoute, layout, - navigationLanes, serviceDispatches, ref cargoTransport, ref publicTransport, - ref train, ref currentLane, ref pathOwner, ref target)) + if (!SelectNextDispatch(jobIndex, vehicleEntity, currentRoute, layout, navigationLanes, + serviceDispatches, ref cargoTransport, ref publicTransport, ref train, + ref currentLane, ref pathOwner, ref target)) { if (!TryParkTrain(jobIndex, vehicleEntity, owner, layout, navigationLanes, ref train, ref cargoTransport, ref publicTransport, ref currentLane)) - VehicleUtils.DeleteVehicle(m_CommandBuffer, jobIndex, vehicleEntity, - layout); - + VehicleUtils.DeleteVehicle(m_CommandBuffer, jobIndex, vehicleEntity, layout); m_TrainData[entity1] = train; m_CurrentLaneData[entity1] = currentLane; return; @@ -615,16 +590,15 @@ private void Tick( } else { - if ((CountPassengers(vehicleEntity, layout) <= 0 || !StartBoarding(jobIndex, - vehicleEntity, currentRoute, prefabRef, ref cargoTransport, ref publicTransport, - ref target, isCargoVehicle)) && !SelectNextDispatch(jobIndex, vehicleEntity, - currentRoute, layout, navigationLanes, serviceDispatches, ref cargoTransport, - ref publicTransport, ref train, ref currentLane, ref pathOwner, ref target)) + if ((CountPassengers(vehicleEntity, layout) <= 0 || !StartBoarding(jobIndex, vehicleEntity, + currentRoute, prefabRef, ref cargoTransport, ref publicTransport, ref target, + isCargoVehicle)) && !SelectNextDispatch(jobIndex, vehicleEntity, currentRoute, + layout, navigationLanes, serviceDispatches, ref cargoTransport, ref publicTransport, + ref train, ref currentLane, ref pathOwner, ref target)) { - if (!TryParkTrain(jobIndex, vehicleEntity, owner, layout, navigationLanes, - ref train, ref cargoTransport, ref publicTransport, ref currentLane)) + if (!TryParkTrain(jobIndex, vehicleEntity, owner, layout, navigationLanes, ref train, + ref cargoTransport, ref publicTransport, ref currentLane)) VehicleUtils.DeleteVehicle(m_CommandBuffer, jobIndex, vehicleEntity, layout); - m_TrainData[entity1] = train; m_CurrentLaneData[entity1] = currentLane; return; @@ -634,9 +608,8 @@ private void Tick( else if ((cargoTransport.m_State & CargoTransportFlags.Boarding) != 0 || (publicTransport.m_State & PublicTransportFlags.Boarding) != 0) { - if (StopBoarding(jobIndex, ref random, vehicleEntity, currentRoute, layout, - ref cargoTransport, ref publicTransport, ref target, ref odometer, isCargoVehicle, - false)) + if (StopBoarding(jobIndex, ref random, vehicleEntity, currentRoute, layout, ref cargoTransport, + ref publicTransport, ref target, ref odometer, isCargoVehicle, false)) { flag = true; if ((cargoTransport.m_State & CargoTransportFlags.EnRoute) == 0 && @@ -657,8 +630,8 @@ private void Tick( } else { - if (!StartBoarding(jobIndex, vehicleEntity, currentRoute, prefabRef, - ref cargoTransport, ref publicTransport, ref target, isCargoVehicle)) + if (!StartBoarding(jobIndex, vehicleEntity, currentRoute, prefabRef, ref cargoTransport, + ref publicTransport, ref target, isCargoVehicle)) { if ((cargoTransport.m_State & CargoTransportFlags.EnRoute) == 0 && (publicTransport.m_State & PublicTransportFlags.EnRoute) == 0) @@ -723,17 +696,13 @@ private void Tick( ref currentLane, ref pathOwner, ref target, out skipWaypoint); } - if ((((cargoTransport.m_State & CargoTransportFlags.Boarding) != 0 - ? 0 - : (publicTransport.m_State & PublicTransportFlags.Boarding) == 0 - ? 1 - : 0) | (flag ? 1 : 0)) != 0) + if ((((cargoTransport.m_State & CargoTransportFlags.Boarding) != 0 ? 0 : + (publicTransport.m_State & PublicTransportFlags.Boarding) == 0 ? 1 : 0) | (flag ? 1 : 0)) != 0) { if (VehicleUtils.RequireNewPath(pathOwner)) FindNewPath(vehicleEntity, prefabRef, skipWaypoint, ref currentLane, ref cargoTransport, ref publicTransport, ref pathOwner, ref target); - else if ((pathOwner.m_State & (PathFlags.Pending | PathFlags.Failed | PathFlags.Stuck)) == - 0) + else if ((pathOwner.m_State & (PathFlags.Pending | PathFlags.Failed | PathFlags.Stuck)) == 0) CheckParkingSpace(navigationLanes, ref train, ref pathOwner); } @@ -782,8 +751,8 @@ private bool TryParkTrain( var navigationLane = navigationLanes[navigationLanes.Length - 1]; if ((navigationLane.m_Flags & TrainLaneFlags.ParkingSpace) == 0) return false; - train.m_Flags &= ~(TrainFlags.BoardingLeft | TrainFlags.BoardingRight | - TrainFlags.Pantograph | TrainFlags.IgnoreParkedVehicle); + train.m_Flags &= ~(TrainFlags.BoardingLeft | TrainFlags.BoardingRight | TrainFlags.Pantograph | + TrainFlags.IgnoreParkedVehicle); cargoTransport.m_State &= CargoTransportFlags.RequiresMaintenance; publicTransport.m_State &= PublicTransportFlags.RequiresMaintenance; TransportDepot componentData; @@ -815,9 +784,7 @@ private bool TryParkTrain( if (m_SpawnLocationData.HasComponent(navigationLane.m_Lane)) m_CommandBuffer.AddComponent(jobIndex, navigationLane.m_Lane); else - m_CommandBuffer.AddComponent(jobIndex, entity, - new FixParkingLocation(Entity.Null, entity)); - + m_CommandBuffer.AddComponent(jobIndex, entity, new FixParkingLocation(Entity.Null, entity)); return true; } @@ -829,8 +796,7 @@ private void UpdatePantograph(DynamicBuffer layout) var vehicle = layout[index].m_Vehicle; var train = m_TrainData[vehicle]; var trainData = m_PrefabTrainData[m_PrefabRefData[vehicle].m_Prefab]; - if (flag || (trainData.m_TrainFlags & Game.Prefabs.TrainFlags.Pantograph) == - 0) + if (flag || (trainData.m_TrainFlags & Game.Prefabs.TrainFlags.Pantograph) == 0) { train.m_Flags &= ~TrainFlags.Pantograph; } @@ -868,8 +834,7 @@ private void UpdateStop( train.m_Flags |= TrainFlags.BoardingRight; } - if (flag ^ (((controllerTrain.m_Flags ^ train.m_Flags) & TrainFlags.Reversed) > - 0)) + if (flag ^ (((controllerTrain.m_Flags ^ train.m_Flags) & TrainFlags.Reversed) > 0)) publicTransport.m_State |= PublicTransportFlags.StopLeft; else publicTransport.m_State |= PublicTransportFlags.StopRight; @@ -955,13 +920,11 @@ private void CheckNavigationLanes( var navigationLane = navigationLanes[navigationLanes.Length - 1]; if ((navigationLane.m_Flags & TrainLaneFlags.EndOfPath) == 0) return; - if (m_WaypointData.HasComponent(target.m_Target) && - m_RouteWaypoints.HasBuffer(currentRoute.m_Route) && + if (m_WaypointData.HasComponent(target.m_Target) && m_RouteWaypoints.HasBuffer(currentRoute.m_Route) && (!m_ConnectedData.HasComponent(target.m_Target) || !m_BoardingVehicleData.HasComponent(m_ConnectedData[target.m_Target].m_Connected))) { - if ((pathOwner.m_State & (PathFlags.Pending | PathFlags.Failed | PathFlags.Obsolete)) != - 0) + if ((pathOwner.m_State & (PathFlags.Pending | PathFlags.Failed | PathFlags.Obsolete)) != 0) return; skipWaypoint = target.m_Target; SetNextWaypointTarget(currentRoute, ref pathOwner, ref target); @@ -1010,7 +973,7 @@ private void CheckServiceDispatches( { var transportVehicleRequest = m_TransportVehicleRequestData[request2]; if (m_PrefabRefData.HasComponent(transportVehicleRequest.m_Route) && - transportVehicleRequest.m_Priority > (double)num) + (double)transportVehicleRequest.m_Priority > num) { num = transportVehicleRequest.m_Priority; request1 = request2; @@ -1071,11 +1034,9 @@ private bool SelectNextDispatch( } if ((cargoTransport.m_State & - (CargoTransportFlags.RequiresMaintenance | CargoTransportFlags.Disabled)) != - 0 || + (CargoTransportFlags.RequiresMaintenance | CargoTransportFlags.Disabled)) != 0 || (publicTransport.m_State & - (PublicTransportFlags.RequiresMaintenance | PublicTransportFlags.Disabled)) != - 0) + (PublicTransportFlags.RequiresMaintenance | PublicTransportFlags.Disabled)) != 0) { cargoTransport.m_RequestCount = 0; publicTransport.m_RequestCount = 0; @@ -1113,15 +1074,12 @@ private bool SelectNextDispatch( { if (currentRoute.m_Route != route) { - m_CommandBuffer.AddComponent(jobIndex, vehicleEntity, - new CurrentRoute(route)); - m_CommandBuffer.AppendToBuffer(jobIndex, route, - new RouteVehicle(vehicleEntity)); + m_CommandBuffer.AddComponent(jobIndex, vehicleEntity, new CurrentRoute(route)); + m_CommandBuffer.AppendToBuffer(jobIndex, route, new RouteVehicle(vehicleEntity)); Color componentData; if (m_RouteColorData.TryGetComponent(route, out componentData)) { - m_CommandBuffer.AddComponent(jobIndex, vehicleEntity, - componentData); + m_CommandBuffer.AddComponent(jobIndex, vehicleEntity, componentData); UpdateBatches(jobIndex, vehicleEntity, layout); } } @@ -1187,25 +1145,23 @@ private bool SelectNextDispatch( var prevElement = new PathElement(); if (navigationLanes.Length != 0) { - var navigationLane = - navigationLanes[navigationLanes.Length - 1]; + var navigationLane = navigationLanes[navigationLanes.Length - 1]; prevElement = new PathElement(navigationLane.m_Lane, navigationLane.m_CurvePosition); } PathUtils.ExtendReverseLocations(prevElement, pathElement2, pathOwner, length, - m_CurveData, m_LaneData, m_EdgeLaneData, m_OwnerData, - m_EdgeData, m_ConnectedEdges, m_SubLanes); + m_CurveData, m_LaneData, m_EdgeLaneData, m_OwnerData, m_EdgeData, + m_ConnectedEdges, m_SubLanes); if (!m_WaypointData.HasComponent(target.m_Target) || (m_ConnectedData.HasComponent(target.m_Target) && - m_BoardingVehicleData.HasComponent(m_ConnectedData[target.m_Target] - .m_Connected))) + m_BoardingVehicleData.HasComponent( + m_ConnectedData[target.m_Target].m_Connected))) { var distance = length * 0.5f; - PathUtils.ExtendPath(pathElement2, pathOwner, ref distance, - ref m_CurveData, ref m_LaneData, ref m_EdgeLaneData, - ref m_OwnerData, ref m_EdgeData, ref m_ConnectedEdges, - ref m_SubLanes); + PathUtils.ExtendPath(pathElement2, pathOwner, ref distance, ref m_CurveData, + ref m_LaneData, ref m_EdgeLaneData, ref m_OwnerData, ref m_EdgeData, + ref m_ConnectedEdges, ref m_SubLanes); } return true; @@ -1284,11 +1240,8 @@ private bool StartBoarding( trainData.m_EnergyType) != 0; } - if ((!refuel && - ((cargoTransport.m_State & CargoTransportFlags.RequiresMaintenance) != - 0 || - (publicTransport.m_State & PublicTransportFlags.RequiresMaintenance) != - 0)) || + if ((!refuel && ((cargoTransport.m_State & CargoTransportFlags.RequiresMaintenance) != 0 || + (publicTransport.m_State & PublicTransportFlags.RequiresMaintenance) != 0)) || (cargoTransport.m_State & CargoTransportFlags.AbandonRoute) != 0 || (publicTransport.m_State & PublicTransportFlags.AbandonRoute) != 0) { @@ -1312,7 +1265,6 @@ private bool StartBoarding( publicTransport.m_State |= PublicTransportFlags.RouteSource; var storageCompanyFromStop = Entity.Null; if (isCargoVehicle) storageCompanyFromStop = GetStorageCompanyFromStop(connected.m_Connected); - m_BoardingData.BeginBoarding(vehicleEntity, currentRoute.m_Route, connected.m_Connected, target.m_Target, storageCompanyFromStop, nextStorageCompany, refuel); return true; @@ -1330,7 +1282,6 @@ private bool StartBoarding( publicTransport.m_State &= ~(PublicTransportFlags.EnRoute | PublicTransportFlags.AbandonRoute); if (currentRoute.m_Route != Entity.Null) m_CommandBuffer.RemoveComponent(jobIndex, vehicleEntity); - return false; } @@ -1345,8 +1296,7 @@ private bool TryChangeCarriagePrefab( { var economyResource = m_EconomyResources[vehicleEntity]; var prefabRef = m_PrefabRefData[vehicleEntity]; - if (economyResource.Length == 0 && - m_CargoTransportVehicleData.HasComponent(prefabRef.m_Prefab)) + if (economyResource.Length == 0 && m_CargoTransportVehicleData.HasComponent(prefabRef.m_Prefab)) while (loadingResources.Length > 0) { var loadingResource = loadingResources[0]; @@ -1354,8 +1304,7 @@ private bool TryChangeCarriagePrefab( loadingResource.m_Resource, loadingResource.m_Amount); if (entity != Entity.Null) { - var transportVehicleData = - m_CargoTransportVehicleData[entity]; + var transportVehicleData = m_CargoTransportVehicleData[entity]; var num = math.min(loadingResource.m_Amount, transportVehicleData.m_CargoCapacity); loadingResource.m_Amount -= transportVehicleData.m_CargoCapacity; if (loadingResource.m_Amount <= 0) @@ -1363,15 +1312,12 @@ private bool TryChangeCarriagePrefab( else loadingResources[0] = loadingResource; if (dummyTraffic) - m_CommandBuffer.SetBuffer(jobIndex, vehicleEntity).Add( - new Resources - { - m_Resource = loadingResource.m_Resource, - m_Amount = num - }); - - m_CommandBuffer.SetComponent(jobIndex, vehicleEntity, - new PrefabRef(entity)); + m_CommandBuffer.SetBuffer(jobIndex, vehicleEntity).Add(new Resources + { + m_Resource = loadingResource.m_Resource, + m_Amount = num + }); + m_CommandBuffer.SetComponent(jobIndex, vehicleEntity, new PrefabRef(entity)); m_CommandBuffer.AddComponent(jobIndex, vehicleEntity, new Updated()); return true; } @@ -1396,12 +1342,11 @@ private bool CheckLoadingResources( { if (layout.Length != 0) for (var index = 0; index < layout.Length && loadingResources.Length != 0; ++index) - flag |= TryChangeCarriagePrefab(jobIndex, ref random, layout[index].m_Vehicle, - dummyTraffic, loadingResources); + flag |= TryChangeCarriagePrefab(jobIndex, ref random, layout[index].m_Vehicle, dummyTraffic, + loadingResources); else flag |= TryChangeCarriagePrefab(jobIndex, ref random, vehicleEntity, dummyTraffic, loadingResources); - loadingResources.Clear(); } @@ -1431,9 +1376,8 @@ private bool StopBoarding( } else { - var dummyTraffic = - (cargoTransport.m_State & CargoTransportFlags.DummyTraffic) != 0 || - (publicTransport.m_State & PublicTransportFlags.DummyTraffic) > 0; + var dummyTraffic = (cargoTransport.m_State & CargoTransportFlags.DummyTraffic) != 0 || + (publicTransport.m_State & PublicTransportFlags.DummyTraffic) > 0; flag1 |= CheckLoadingResources(jobIndex, ref random, vehicleEntity, dummyTraffic, layout, loadingResource); } @@ -1458,39 +1402,38 @@ private bool StopBoarding( m_SimulationFrameIndex < publicTransport.m_DepartureFrame || publicTransport.m_MaxBoardingDistance != 3.4028234663852886E+38)) //float.MaxValue?? return false; + var boardingComplete = true; if (layout.Length != 0) - { for (var index = 0; index < layout.Length; ++index) { var layoutIndexVehicle = layout[index].m_Vehicle; if (!m_Passengers.HasBuffer(layoutIndexVehicle)) continue; var layoutIndexVehiclePassengers = m_Passengers[layoutIndexVehicle]; - if (!PublicTransportBoardingHelper.ArePassengersReady(layoutIndexVehiclePassengers, + if (PublicTransportBoardingHelper.ArePassengersReady(layoutIndexVehiclePassengers, m_CurrentVehicleData, publicTransport, - PublicTransportBoardingHelper.TransportFamily.Train, m_SimulationFrameIndex)) - return false; + PublicTransportBoardingHelper.TransportFamily.Train, + m_SimulationFrameIndex)) continue; + boardingComplete = false; + break; } - } else - { - var boardingComplete = PublicTransportBoardingHelper.ArePassengersReady( + boardingComplete = PublicTransportBoardingHelper.ArePassengersReady( m_Passengers[vehicleEntity], m_CurrentVehicleData, publicTransport, PublicTransportBoardingHelper.TransportFamily.Train, m_SimulationFrameIndex); - if (!boardingComplete) - { - return false; - } - } + + //if boarding is complete, still want to run the rest of the code below, which will clear the boarding flag. + //if it's not complete, we can short circuit this, as per original impl. + if (!boardingComplete) + return false; } if ((cargoTransport.m_State & CargoTransportFlags.Refueling) != 0 || (publicTransport.m_State & PublicTransportFlags.Refueling) != 0) odometer.m_Distance = 0.0f; if (isCargoVehicle) QuantityUpdated(jobIndex, vehicleEntity, layout); - if (flag2) { var storageCompanyFromStop = Entity.Null; @@ -1552,8 +1495,7 @@ private bool ArePassengersReady(Entity vehicleEntity) { var passenger2 = passenger1[index].m_Passenger; if (m_CurrentVehicleData.HasComponent(passenger2) && - (m_CurrentVehicleData[passenger2].m_Flags & CreatureVehicleFlags.Ready) == - 0) + (m_CurrentVehicleData[passenger2].m_Flags & CreatureVehicleFlags.Ready) == 0) return false; } @@ -1565,7 +1507,6 @@ private Entity GetTransportStationFromStop(Entity stop) for (; !m_TransportStationData.HasComponent(stop); stop = m_OwnerData[stop].m_Owner) if (!m_OwnerData.HasComponent(stop)) return Entity.Null; - if (m_OwnerData.HasComponent(stop)) { var owner = m_OwnerData[stop].m_Owner; @@ -1581,7 +1522,6 @@ private Entity GetStorageCompanyFromStop(Entity stop) for (; !m_StorageCompanyData.HasComponent(stop); stop = m_OwnerData[stop].m_Owner) if (!m_OwnerData.HasComponent(stop)) return Entity.Null; - return stop; } @@ -1595,8 +1535,7 @@ private Entity GetNextStorageCompany(Entity route, Entity currentWaypoint) var waypoint = routeWaypoint[index2].m_Waypoint; if (m_ConnectedData.HasComponent(waypoint)) { - var storageCompanyFromStop = - GetStorageCompanyFromStop(m_ConnectedData[waypoint].m_Connected); + var storageCompanyFromStop = GetStorageCompanyFromStop(m_ConnectedData[waypoint].m_Connected); if (storageCompanyFromStop != Entity.Null) return storageCompanyFromStop; } @@ -1624,13 +1563,8 @@ private struct TypeHandle [ReadOnly] public ComponentTypeHandle __Game_Objects_Unspawned_RO_ComponentTypeHandle; [ReadOnly] public ComponentTypeHandle __Game_Prefabs_PrefabRef_RO_ComponentTypeHandle; [ReadOnly] public ComponentTypeHandle __Game_Routes_CurrentRoute_RO_ComponentTypeHandle; - - public ComponentTypeHandle - __Game_Vehicles_CargoTransport_RW_ComponentTypeHandle; - - public ComponentTypeHandle - __Game_Vehicles_PublicTransport_RW_ComponentTypeHandle; - + public ComponentTypeHandle __Game_Vehicles_CargoTransport_RW_ComponentTypeHandle; + public ComponentTypeHandle __Game_Vehicles_PublicTransport_RW_ComponentTypeHandle; public ComponentTypeHandle __Game_Common_Target_RW_ComponentTypeHandle; public ComponentTypeHandle __Game_Pathfind_PathOwner_RW_ComponentTypeHandle; public ComponentTypeHandle __Game_Vehicles_Odometer_RW_ComponentTypeHandle; @@ -1639,9 +1573,7 @@ public ComponentTypeHandle public BufferTypeHandle __Game_Simulation_ServiceDispatch_RW_BufferTypeHandle; [ReadOnly] public EntityStorageInfoLookup __EntityStorageInfoLookup; [ReadOnly] public ComponentLookup __Game_Objects_Transform_RO_ComponentLookup; - [ReadOnly] public ComponentLookup __Game_Objects_SpawnLocation_RO_ComponentLookup; - [ReadOnly] public ComponentLookup __Game_Common_Owner_RO_ComponentLookup; [ReadOnly] public ComponentLookup __Game_Pathfind_PathInformation_RO_ComponentLookup; @@ -1667,14 +1599,9 @@ [ReadOnly] public ComponentLookup [ReadOnly] public ComponentLookup __Game_Routes_Connected_RO_ComponentLookup; [ReadOnly] public ComponentLookup __Game_Routes_BoardingVehicle_RO_ComponentLookup; [ReadOnly] public ComponentLookup __Game_Routes_Color_RO_ComponentLookup; - [ReadOnly] public ComponentLookup __Game_Companies_StorageCompany_RO_ComponentLookup; - - [ReadOnly] public ComponentLookup - __Game_Buildings_TransportStation_RO_ComponentLookup; - + [ReadOnly] public ComponentLookup __Game_Buildings_TransportStation_RO_ComponentLookup; [ReadOnly] public ComponentLookup __Game_Buildings_TransportDepot_RO_ComponentLookup; - [ReadOnly] public ComponentLookup __Game_Creatures_CurrentVehicle_RO_ComponentLookup; [ReadOnly] public BufferLookup __Game_Vehicles_Passenger_RO_BufferLookup; [ReadOnly] public BufferLookup __Game_Economy_Resources_RO_BufferLookup; @@ -1696,10 +1623,8 @@ public void __AssignHandles(ref SystemState state) __Game_Common_Owner_RO_ComponentTypeHandle = state.GetComponentTypeHandle(true); __Game_Objects_Unspawned_RO_ComponentTypeHandle = state.GetComponentTypeHandle(true); __Game_Prefabs_PrefabRef_RO_ComponentTypeHandle = state.GetComponentTypeHandle(true); - __Game_Routes_CurrentRoute_RO_ComponentTypeHandle = - state.GetComponentTypeHandle(true); - __Game_Vehicles_CargoTransport_RW_ComponentTypeHandle = - state.GetComponentTypeHandle(); + __Game_Routes_CurrentRoute_RO_ComponentTypeHandle = state.GetComponentTypeHandle(true); + __Game_Vehicles_CargoTransport_RW_ComponentTypeHandle = state.GetComponentTypeHandle(); __Game_Vehicles_PublicTransport_RW_ComponentTypeHandle = state.GetComponentTypeHandle(); __Game_Common_Target_RW_ComponentTypeHandle = state.GetComponentTypeHandle(); @@ -1708,15 +1633,12 @@ public void __AssignHandles(ref SystemState state) __Game_Vehicles_LayoutElement_RW_BufferTypeHandle = state.GetBufferTypeHandle(); __Game_Vehicles_TrainNavigationLane_RW_BufferTypeHandle = state.GetBufferTypeHandle(); - __Game_Simulation_ServiceDispatch_RW_BufferTypeHandle = - state.GetBufferTypeHandle(); + __Game_Simulation_ServiceDispatch_RW_BufferTypeHandle = state.GetBufferTypeHandle(); __EntityStorageInfoLookup = state.GetEntityStorageInfoLookup(); __Game_Objects_Transform_RO_ComponentLookup = state.GetComponentLookup(true); - __Game_Objects_SpawnLocation_RO_ComponentLookup = - state.GetComponentLookup(true); + __Game_Objects_SpawnLocation_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Common_Owner_RO_ComponentLookup = state.GetComponentLookup(true); - __Game_Pathfind_PathInformation_RO_ComponentLookup = - state.GetComponentLookup(true); + __Game_Pathfind_PathInformation_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Simulation_TransportVehicleRequest_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Vehicles_ParkedTrain_RO_ComponentLookup = state.GetComponentLookup(true); @@ -1735,14 +1657,10 @@ public void __AssignHandles(ref SystemState state) __Game_Routes_Connected_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Routes_BoardingVehicle_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Routes_Color_RO_ComponentLookup = state.GetComponentLookup(true); - __Game_Companies_StorageCompany_RO_ComponentLookup = - state.GetComponentLookup(true); - __Game_Buildings_TransportStation_RO_ComponentLookup = - state.GetComponentLookup(true); - __Game_Buildings_TransportDepot_RO_ComponentLookup = - state.GetComponentLookup(true); - __Game_Creatures_CurrentVehicle_RO_ComponentLookup = - state.GetComponentLookup(true); + __Game_Companies_StorageCompany_RO_ComponentLookup = state.GetComponentLookup(true); + __Game_Buildings_TransportStation_RO_ComponentLookup = state.GetComponentLookup(true); + __Game_Buildings_TransportDepot_RO_ComponentLookup = state.GetComponentLookup(true); + __Game_Creatures_CurrentVehicle_RO_ComponentLookup = state.GetComponentLookup(true); __Game_Vehicles_Passenger_RO_BufferLookup = state.GetBufferLookup(true); __Game_Economy_Resources_RO_BufferLookup = state.GetBufferLookup(true); __Game_Routes_RouteWaypoint_RO_BufferLookup = state.GetBufferLookup(true); diff --git a/README.md b/README.md index a084570..389bd60 100644 --- a/README.md +++ b/README.md @@ -1,119 +1,124 @@ -## All Aboard! - -Have you ever encountered trains/subways/buses/trams that refuse to stop boarding? After a city grew beyond 250k -Cims, this was a huge issue for me. After trying to fix it in-game so many different ways, I decided to attempt -to fix it with a Mod instead! - -tl;dr: This mod adds a hard cap on the Dwell Time of public transport vehicles, simulating a conductor calling -"All Aboard!" when the train is scheduled to leave and closing the doors. - -### Changelog - -#### 0.1.4 - -- Fixes a minor namespacing issue. - -#### 0.1.3 - -- Updated for 1.2.0f. Keeps in all of the new CO code that fixes some ResidentAI behavior while keeping a hard cap on - dwell time. - -#### 0.1.2 - -- Remove some local DLLs from being explicitly included (thanks Quoshik!) - -#### 0.1.1 - -- Updated for 1.1.11f. Removed pathfinding cleanup functionality, at least until I have more time to experiment. - -#### 0.1.0 - -- Instead of trying to correlate simulationFrameIndex to real-world seconds, relate them to in-game minutes, which is - more consistent. -- Use SharedStatic to make the maximum dwell delay configurable in settings (thanks @Nullpinter!). Now users can set a - fixed maximum dwell delay (in in-game minutes) for each transit family (bus, train), after which boarding will be - forced to end. By default, this is set to a conservative **8** in-game minutes for buses/trains, but each is - configurable separately. - You might want to tune the value higher if you see cims being left behind too often, or lower, if you have a high - number of vehicles on a line. - -### Technical Details - -The default behavior has trains (and all other public transport): - -- Calculate a _departureFrame_ (based on factors like unbunching, vehicle size, etc.) -- Determine what cims on the platform or stop will be boarding in the cycle, and start boarding -- Wait until the departureFrame, then make the Cims start running instead of walking -- (the problematic part) Wait until every Cim that is predetermined to board each vehicle has entered that - vehicle. - -Imagine if your train never left the station until the conductor stamped every ticket sold for the train -- -even if people had bought tickets and left the station! - -This logic makes some sense if pathfinding is perfect, but some edge cases sometimes leave trains/buses stuck at -stops with high waiting counts: - -- If a cim is a leader of a group (with a child or pet in tow), the train waits until the entire group has - boarded the train when checking the leader. - this is problematic, as sometimes the child/pet is several blocks away, or is actually at home and still - mistakenly attached to the cim. -- When the platform is very crowded, pathfinding gets a lot slower, so Cims can get temporarily stuck waiting - for a path to be a path to be drawn. - -A transit vehicle's **Dwell Time** is the amount of time it spends embarking/disembarking passengers at each -stop. This mod sets an upper limit (**Maximum Dwell Delay**) on the amount of time beyond a transit vehicle's -scheduled `departureFrame` and when it will actually leave a station, measured in in-game minutes. Right now, this is -set -to 8 minutes for both trains and buses by default, but this is customizable. If the vehicle is still "stuck" -boarding, even after the maximum dwell delay, the vehicle will simply close its doors and depart. - -- If a group leader has boarded, and other group members have not, they will be 'teleported' to the vehicle (a No - Child Left Behind policy, if you will). -- If a random Cim on the platform did not board in time, they will be returned to the platform for the next - scheduled bus/train/tram/subway. - -**This means you might see passengers "board" the train, only to have the number waiting at the platform jump -back up. This is normal.** -Eventually, all Cims _will_ be picked up, they just might have to wait for the next train/bus, just like the -rest of us. This also helps trains/buses -stay unbunched! - -### Caveats: - -- This does not yet work with Taxis, as they use a separate AI system -- This will be an UNSTABLE mod! It overwrites core game systems, and WILL potentially break with game updates! - It is save-game safe, so it can be disabled at any time. Use at your own risk! - -### Incompatible With: - -- No (known) incompatibilities (I play with > 60 other code mods, and this was tested by a few users in - Discord), but will not be compatible with other mods that modify TransportCarAISystem and TransportTrainAISystem. - It is unlikely other mods will do so, since these classes are burst compiled. - -### Notes: - -- This mod has been tested on cities up to 2.1M Cims, and seems to scale well. -- It has very good synergy with **Transit Capacity Multiplier** mod, as the larger vehicles will no longer have - a higher - chance of getting stuck boarding a rogue pet or child. -- Hopefully CO will add a similar feature, since this was a pretty easy fix, it just happens to be in a very - inconvenient place for modders to get at safely. -- This is my first mod, so constructive criticism is appreciated, but hostility is not. I code for a living full - time, and this is a passion project for a game I love, and would like to keep loving. -- Please report any bugs or incompatible mods in the linked Discord channel. Provide Log Files if possible. - I can't fix what I don't have evidence for. (Invite Link: https://discord.gg/HTav7ARPs2) - -### Future Work: - -- Trying to find a way of accomplishing this without replacing two core game systems wholesale -- this approach will be - very fragile and likely break - with game updates. - -### Thanks/Credit: - -- Thanks to @darolas @domoniQC, @elGendo87, @DaRonk, @Liam and @CC-2A for testing! -- Thanks to @domoniQC for before/after screenshots for the mod description! -- Thanks to @RightToRepairAdvocate for the name suggestion! -- Thanks to @Nullpinter for a better understanding of frameIndex and introducing me to SharedStatic! -- Last but not least, thanks and credit to @Wayz for contributing the core logic that "forces" the transit +## All Aboard! + +Have you ever encountered trains/subways/buses/trams that refuse to stop boarding? After a city grew beyond 250k +Cims, this was a huge issue for me. After trying to fix it in-game so many different ways, I decided to attempt +to fix it with a Mod instead! + +tl;dr: This mod adds a hard cap on the Dwell Time of public transport vehicles, simulating a conductor calling +"All Aboard!" when the train is scheduled to leave and closing the doors. + +### Changelog + +#### 0.1.5 + +- Rename the root mod files from the generic defaults. Should also make settings actually persist between saves! (Thanks Quoshik!) +- Updated the decompiled versions of the Car/Train AI Systems to 1.2.3f1. + +#### 0.1.4 + +- Fixes a minor namespacing issue. + +#### 0.1.3 + +- Updated for 1.2.0f. Keeps in all of the new CO code that fixes some ResidentAI behavior while keeping a hard cap on + dwell time. + +#### 0.1.2 + +- Remove some local DLLs from being explicitly included (thanks Quoshik!) + +#### 0.1.1 + +- Updated for 1.1.11f. Removed pathfinding cleanup functionality, at least until I have more time to experiment. + +#### 0.1.0 + +- Instead of trying to correlate simulationFrameIndex to real-world seconds, relate them to in-game minutes, which is + more consistent. +- Use SharedStatic to make the maximum dwell delay configurable in settings (thanks @Nullpinter!). Now users can set a + fixed maximum dwell delay (in in-game minutes) for each transit family (bus, train), after which boarding will be + forced to end. By default, this is set to a conservative **8** in-game minutes for buses/trains, but each is + configurable separately. + You might want to tune the value higher if you see cims being left behind too often, or lower, if you have a high + number of vehicles on a line. + +### Technical Details + +The default behavior has trains (and all other public transport): + +- Calculate a _departureFrame_ (based on factors like unbunching, vehicle size, etc.) +- Determine what cims on the platform or stop will be boarding in the cycle, and start boarding +- Wait until the departureFrame, then make the Cims start running instead of walking +- (the problematic part) Wait until every Cim that is predetermined to board each vehicle has entered that + vehicle. + +Imagine if your train never left the station until the conductor stamped every ticket sold for the train -- +even if people had bought tickets and left the station! + +This logic makes some sense if pathfinding is perfect, but some edge cases sometimes leave trains/buses stuck at +stops with high waiting counts: + +- If a cim is a leader of a group (with a child or pet in tow), the train waits until the entire group has + boarded the train when checking the leader. + this is problematic, as sometimes the child/pet is several blocks away, or is actually at home and still + mistakenly attached to the cim. +- When the platform is very crowded, pathfinding gets a lot slower, so Cims can get temporarily stuck waiting + for a path to be a path to be drawn. + +A transit vehicle's **Dwell Time** is the amount of time it spends embarking/disembarking passengers at each +stop. This mod sets an upper limit (**Maximum Dwell Delay**) on the amount of time beyond a transit vehicle's +scheduled `departureFrame` and when it will actually leave a station, measured in in-game minutes. Right now, this is +set +to 8 minutes for both trains and buses by default, but this is customizable. If the vehicle is still "stuck" +boarding, even after the maximum dwell delay, the vehicle will simply close its doors and depart. + +- If a group leader has boarded, and other group members have not, they will be 'teleported' to the vehicle (a No + Child Left Behind policy, if you will). +- If a random Cim on the platform did not board in time, they will be returned to the platform for the next + scheduled bus/train/tram/subway. + +**This means you might see passengers "board" the train, only to have the number waiting at the platform jump +back up. This is normal.** +Eventually, all Cims _will_ be picked up, they just might have to wait for the next train/bus, just like the +rest of us. This also helps trains/buses +stay unbunched! + +### Caveats: + +- This does not yet work with Taxis, as they use a separate AI system +- This will be an UNSTABLE mod! It overwrites core game systems, and WILL potentially break with game updates! + It is save-game safe, so it can be disabled at any time. Use at your own risk! + +### Incompatible With: + +- No (known) incompatibilities (I play with > 60 other code mods, and this was tested by a few users in + Discord), but will not be compatible with other mods that modify TransportCarAISystem and TransportTrainAISystem. + It is unlikely other mods will do so, since these classes are burst compiled. + +### Notes: + +- This mod has been tested on cities up to 2.1M Cims, and seems to scale well. +- It has very good synergy with **Transit Capacity Multiplier** mod, as the larger vehicles will no longer have + a higher + chance of getting stuck boarding a rogue pet or child. +- Hopefully CO will add a similar feature, since this was a pretty easy fix, it just happens to be in a very + inconvenient place for modders to get at safely. +- This is my first mod, so constructive criticism is appreciated, but hostility is not. I code for a living full + time, and this is a passion project for a game I love, and would like to keep loving. +- Please report any bugs or incompatible mods in the linked Discord channel. Provide Log Files if possible. + I can't fix what I don't have evidence for. (Invite Link: https://discord.gg/HTav7ARPs2) + +### Future Work: + +- Trying to find a way of accomplishing this without replacing two core game systems wholesale -- this approach will be + very fragile and likely break + with game updates. + +### Thanks/Credit: + +- Thanks to @darolas @domoniQC, @elGendo87, @DaRonk, @Liam and @CC-2A for testing! +- Thanks to @domoniQC for before/after screenshots for the mod description! +- Thanks to @RightToRepairAdvocate for the name suggestion! +- Thanks to @Nullpinter for a better understanding of frameIndex and introducing me to SharedStatic! +- Last but not least, thanks and credit to @Wayz for contributing the core logic that "forces" the transit vehicle to reject the boarding cims! \ No newline at end of file