summaryrefslogtreecommitdiff
path: root/game/vehicles/train.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/vehicles/train.cpp')
-rw-r--r--game/vehicles/train.cpp20
1 files changed, 17 insertions, 3 deletions
diff --git a/game/vehicles/train.cpp b/game/vehicles/train.cpp
index 874db46..14753c0 100644
--- a/game/vehicles/train.cpp
+++ b/game/vehicles/train.cpp
@@ -6,6 +6,7 @@
#include "location.hpp"
#include <algorithm>
#include <functional>
+#include <optional>
#include <utility>
void
@@ -33,11 +34,24 @@ Train::tick(TickDuration dur)
}
void
-Train::doActivity(Go *, TickDuration dur)
+Train::doActivity(Go * go, TickDuration dur)
{
const auto maxSpeed = objects.front()->rvClass->maxSpeed;
- if (speed != maxSpeed) {
- speed += ((maxSpeed - speed) * dur.count());
+ if (go->dist) {
+ *go->dist -= speed * dur.count();
+ if (*go->dist < (speed * speed) / 60.F) {
+ speed -= std::min(speed, 30.F * dur.count());
+ }
+ else {
+ if (speed != maxSpeed) {
+ speed += ((maxSpeed - speed) * dur.count());
+ }
+ }
+ }
+ else {
+ if (speed != maxSpeed) {
+ speed += ((maxSpeed - speed) * dur.count());
+ }
}
}