diff options
Diffstat (limited to 'src/engine/vehicles/Utils.cpp')
| -rw-r--r-- | src/engine/vehicles/Utils.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/engine/vehicles/Utils.cpp b/src/engine/vehicles/Utils.cpp index d2a3ece57..6f51ea731 100644 --- a/src/engine/vehicles/Utils.cpp +++ b/src/engine/vehicles/Utils.cpp @@ -10,3 +10,33 @@ extern "C" { uint32_t CalculateWaypointDistribution(size_t i, uint32_t numVehicles, size_t numWaypoints, uint32_t centerWaypoint) { return (uint32_t)(((i * numWaypoints) / numVehicles) + centerWaypoint) % numWaypoints; } + +uint32_t GetVehiclePathPointDistributed(std::vector<uint32_t>& existingTrains, uint32_t numWaypoints) { + if (existingTrains.empty()) { + return 0; // first train at start + } + + // Sort trains along path + std::sort(existingTrains.begin(), existingTrains.end()); + + if (existingTrains.size() == 1) { + // Place train halfway around the path + return (existingTrains[0] + numWaypoints / 2) % numWaypoints; + } + + uint32_t bestGap = 0; + uint32_t bestPos = 0; + + for (size_t i = 0; i < existingTrains.size(); i++) { + uint32_t start = existingTrains[i]; + uint32_t end = existingTrains[(i + 1) % existingTrains.size()]; + uint32_t gap = (end + numWaypoints - start) % numWaypoints; + + if (gap > bestGap) { + bestGap = gap; + bestPos = (start + gap / 2) % numWaypoints; + } + } + + return bestPos; +} |
