summaryrefslogtreecommitdiff
path: root/game/vehicles/train.cpp
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2021-03-16 18:29:37 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2021-03-16 18:29:37 +0000
commitea35e8ede4c3a522375d4539c872e8a6d6c9830a (patch)
treeb0569f5ffe9b92b407bde67f501a0a79a2cf78e5 /game/vehicles/train.cpp
parentAllow activities to be changed when doing them (diff)
downloadilt-ea35e8ede4c3a522375d4539c872e8a6d6c9830a.tar.bz2
ilt-ea35e8ede4c3a522375d4539c872e8a6d6c9830a.tar.xz
ilt-ea35e8ede4c3a522375d4539c872e8a6d6c9830a.zip
Implement goto so node
Encompasses determining a route and a distance to travel
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());
+ }
}
}