summaryrefslogtreecommitdiff
path: root/src/train.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/train.cpp')
-rw-r--r--src/train.cpp62
1 files changed, 31 insertions, 31 deletions
diff --git a/src/train.cpp b/src/train.cpp
index d401572..06c43b2 100644
--- a/src/train.cpp
+++ b/src/train.cpp
@@ -14,52 +14,52 @@ void Train::update(Level& level)
return;
}
- m_progress = 0.f;
-
- auto n = level.get(x, y - 1);
- auto e = level.get(x + 1, y);
- auto s = level.get(x, y + 1);
- auto w = level.get(x - 1, y);
-
- if (m_dir == North) {
- if (n == SouthEast) m_dir = East;
- if (n == SouthWest) m_dir = West;
- y--;
- } else if (m_dir == East) {
- if (e == NorthWest) m_dir = North;
- if (e == SouthWest) m_dir = South;
- x++;
- } else if (m_dir == South) {
- if (s == NorthEast) m_dir = East;
- if (s == NorthWest) m_dir = West;
- y++;
- } else if (m_dir == West) {
- if (w == NorthEast) m_dir = North;
- if (w == SouthEast) m_dir = South;
- x--;
- }
-
- nextTile();
+ setPosition(m_nextX, m_nextY);
}
void Train::draw(Bitmap& bitmap, int xo, int yo)
{
- float xi = ((float)x + (float)(m_nextX - x) * m_progress) * 24;
- float yi = ((float)y + (float)(m_nextY - y) * m_progress) * 24;
+ float xi = ((float)x + (float)(m_nextX - x) * m_progress) * TileSize;
+ float yi = ((float)y + (float)(m_nextY - y) * m_progress) * TileSize;
int xx = (int)((xi - yi) / 2.f - (float)xo);
int yy = (int)((xi + yi) / 4.f - (float)yo);
- bitmap.blit(m_sprite, xx, yy, 0, 0, 24, 24);
+ bitmap.blit(m_sprite, xx, yy, 0, 0, TileSize, TileSize);
}
void Train::setPosition(int tx, int ty)
{
x = tx;
y = ty;
+
m_progress = 0.f;
- nextTile();
+ findDirection();
+ findNextTile();
+}
+
+void Train::findDirection()
+{
+ auto tile = m_level.get(x, y);
+
+ if (m_dir == North) {
+ if (tile == SouthEast) m_dir = East;
+ if (tile == SouthWest) m_dir = West;
+ if (tile == EastWest) m_dir = East;
+ } else if (m_dir == East) {
+ if (tile == NorthWest) m_dir = North;
+ if (tile == SouthWest) m_dir = South;
+ if (tile == NorthSouth) m_dir = South;
+ } else if (m_dir == South) {
+ if (tile == NorthEast) m_dir = East;
+ if (tile == NorthWest) m_dir = West;
+ if (tile == EastWest) m_dir = West;
+ } else if (m_dir == West) {
+ if (tile == NorthEast) m_dir = North;
+ if (tile == SouthEast) m_dir = South;
+ if (tile == NorthSouth) m_dir = North;
+ }
}
-void Train::nextTile()
+void Train::findNextTile()
{
if (m_dir == North) {
m_nextX = x;