Skip to content

Commit

Permalink
improve load/unload task behavior
Browse files Browse the repository at this point in the history
  • Loading branch information
katycat5e committed Oct 3, 2023
1 parent 093e8eb commit 53a7681
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 23 deletions.
8 changes: 1 addition & 7 deletions PassengerJobs/BookletUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,11 @@
using DV.Localization;
using DV.Logic.Job;
using DV.RenderTextureSystem.BookletRender;
using DV.ThingTypes;
using HarmonyLib;
using PassengerJobs.Generation;
using PassengerJobs.Injectors;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Unity.Jobs;
using Unity.Jobs.LowLevel.Unsafe;
using UnityEngine;

namespace PassengerJobs
Expand All @@ -27,8 +21,8 @@ public static PassengerJobData ExtractPassengerJobData(Job_data job)
throw new Exception($"Wrong format of Passenger Job. Job id: {job.ID}");
}

var startTask = sequence.nestedTasks.First();
var transportTasks = sequence.nestedTasks.Where(t => t.instanceTaskType == TaskType.Transport);
var startTask = transportTasks.First();
var destTracks = transportTasks.Select(t => t.destinationTrackID).ToArray();
return new PassengerJobData(job, startTask.startTrackID, destTracks, startTask.cars);
}
Expand Down
17 changes: 13 additions & 4 deletions PassengerJobs/Generation/ExpressJobDefinition.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ public override void GenerateJob(Station jobOriginStation, float timeLimit = 0,
}

var taskList = new List<Task>();

// initial boarding
var initialLoad = CreateBoardingTask(StartingTrack, totalCapacity, WarehouseTaskType.Loading, false);
taskList.Add(initialLoad);

// actual move between stations
var sourceTrack = StartingTrack;
Expand All @@ -82,8 +86,14 @@ public override void GenerateJob(Station jobOriginStation, float timeLimit = 0,
var leg = CreateTransportLeg(sourceTrack, DestinationTracks[i]);
taskList.Add(leg);

var loadTask = CreateBoardingTask(DestinationTracks[i], totalCapacity, isLast);
taskList.Add(loadTask);
var unloadTask = CreateBoardingTask(DestinationTracks[i], totalCapacity, WarehouseTaskType.Unloading, isLast);
taskList.Add(unloadTask);

if (!isLast)
{
var loadTask = CreateBoardingTask(DestinationTracks[i], totalCapacity, WarehouseTaskType.Loading, false);
taskList.Add(loadTask);
}

sourceTrack = DestinationTracks[i];
}
Expand All @@ -107,10 +117,9 @@ private Task CreateTransportLeg(Track sourceTrack, Track destinationTrack)
return JobsGenerator.CreateTransportTask(TrainCarsToTransport, destinationTrack, sourceTrack, _cargoList);
}

private Task CreateBoardingTask(Track platform, float totalCapacity, bool isFinal)
private Task CreateBoardingTask(Track platform, float totalCapacity, WarehouseTaskType taskType, bool isFinal)
{
var warehouse = PlatformController.GetControllerForTrack(platform).Warehouse;
var taskType = isFinal ? WarehouseTaskType.Unloading : WarehouseTaskType.Loading;

return new WarehouseTask(TrainCarsToTransport, taskType, warehouse, CargoInjector.PassengerCargo.v1, totalCapacity, isLastTask: isFinal);
}
Expand Down
34 changes: 22 additions & 12 deletions PassengerJobs/Platforms/PlatformController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -173,48 +173,48 @@ private void Update()
inIdleState = true;
}

// Check for loading train, is highest priority on sign
if (IsAnyTrainAtPlatform(true))
// check for unloading train, we need to unload before trying to re-load train
if (IsAnyTrainAtPlatform(false))
{
if (_loadCountdown == 0)
if (_unloadCountdown == 0)
{
if (_loadUnloadRoutine == null)
{
inIdleState = false;
_loadUnloadRoutine = StartCoroutine(DelayedLoadUnload(true));
_loadUnloadRoutine = StartCoroutine(DelayedLoadUnload(false));
}
return;
}
else
{
_loadCountdown -= 1;
_unloadCountdown -= 1;
}
}
else
{
_loadCountdown = START_XFER_DELAY;
_unloadCountdown = START_XFER_DELAY;
}

// check for unloading train
if (IsAnyTrainAtPlatform(false))
// Check for loading train
if (IsAnyTrainAtPlatform(true))
{
if (_unloadCountdown == 0)
if (_loadCountdown == 0)
{
if (_loadUnloadRoutine == null)
{
inIdleState = false;
_loadUnloadRoutine = StartCoroutine(DelayedLoadUnload(false));
_loadUnloadRoutine = StartCoroutine(DelayedLoadUnload(true));
}
return;
}
else
{
_unloadCountdown -= 1;
_loadCountdown -= 1;
}
}
else
{
_unloadCountdown = START_XFER_DELAY;
_loadCountdown = START_XFER_DELAY;
}

if (_displayDataDirty)
Expand Down Expand Up @@ -309,6 +309,16 @@ private IEnumerator DelayedLoadUnload(bool isLoading)
}
// all jobs processed

if (completedTransfer && !isLoading && IsAnyTrainAtPlatform(true))
{
var loadRoutine = DelayedLoadUnload(true);
while (loadRoutine.MoveNext())
{
yield return loadRoutine.Current;
}
yield break;
}

if (completedTransfer && _loadCompletedSound)
{
if (_loadCompletedSound)
Expand Down

0 comments on commit 53a7681

Please sign in to comment.