summaryrefslogtreecommitdiff
path: root/src/train.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/train.cpp')
-rw-r--r--src/train.cpp32
1 files changed, 28 insertions, 4 deletions
diff --git a/src/train.cpp b/src/train.cpp
index 98a493f..2604898 100644
--- a/src/train.cpp
+++ b/src/train.cpp
@@ -5,15 +5,29 @@
void Train::update(Level& level)
{
- auto tile = level.get(x, y);
- if (tile == 0)
- return;
+ if (m_next) {
+ m_speed = m_next->m_speed;
+ m_progress = m_next->m_progress;
+ } else {
+ auto tile = level.get(x, y);
+ if (tile == 0)
+ return;
+ }
if (m_progress < 1.f) {
m_progress += m_speed;
return;
}
+ if (m_next) {
+ x = m_nextX;
+ y = m_nextY;
+ m_nextX = m_next->x;
+ m_nextY = m_next->y;
+ m_progress = 0.f;
+ findDirection();
+ }
+
setPosition(m_nextX, m_nextY);
}
@@ -40,6 +54,16 @@ void Train::setPosition(int tx, int ty)
findNextTile();
}
+void Train::addVehicle(Train* newTrain)
+{
+ if (!m_prev) {
+ m_prev = newTrain;
+ newTrain->m_next = this;
+ } else {
+ m_prev->addVehicle(newTrain);
+ }
+}
+
void Train::findDirection()
{
auto tile = m_level.get(x, y);
@@ -81,4 +105,4 @@ void Train::findNextTile()
m_nextX = x - 1;
m_nextY = y;
}
-} \ No newline at end of file
+}