return;
}
+ const Tile *tile(map->TileAt(nowLock));
+
if (nextDirection >= 0) {
if (afterLock) {
bool blocked(CheckBlocking());
OnMove(!blocked);
- controlled->SetOrientation(Entity::Orientation(nextDirection));
+ controlled->SetDirection(Entity::Orientation(nextDirection));
if (!blocked) {
afterLock = false;
controlled->SetSpeed(walkingSpeed);
moveTimer.Clear();
if (pushed) {
- pushed->SetOrientation(Entity::Orientation(nextDirection));
+ pushed->SetDirection(Entity::Orientation(nextDirection));
pushed->SetSpeed(walkingSpeed);
controlled->SetPushing();
} else {
controlled->SetSpeed(0);
StopFollowers(*controlled);
if (!moveTimer.Running()) {
- int tileSize((controlled->GetOrientation() % 2) ? map->Tileset()->Width() : map->Tileset()->Height());
- moveTimer = PhysicsTimers().StartInterval(tileSize/walkingSpeed.Int());
+ int tileSize((controlled->GetDirection() % 2) ? map->Tileset()->Width() : map->Tileset()->Height());
+ Fixed<8> walkingInterval(tileSize);
+ walkingInterval /= walkingSpeed;
+ moveTimer = PhysicsTimers().StartInterval(walkingInterval.Int());
}
pushed = 0;
}
}
}
+ if (controlled->GetDirection() == Entity::ORIENTATION_SOUTH
+ && tile && tile->IsLadder()) {
+ controlled->SetOrientation(Entity::ORIENTATION_NORTH);
+ }
+
lastLock = nowLock;
}
Vector<int> direction(coords - fCoords);
if (direction.Y() < 0) {
- f.SetOrientation(Entity::ORIENTATION_NORTH);
+ f.SetDirection(Entity::ORIENTATION_NORTH);
f.SetSpeed(walkingSpeed);
f.StartAnimation(*this);
} else if (direction.X() > 0) {
- f.SetOrientation(Entity::ORIENTATION_EAST);
+ f.SetDirection(Entity::ORIENTATION_EAST);
f.SetSpeed(walkingSpeed);
f.StartAnimation(*this);
} else if (direction.Y() > 0) {
- f.SetOrientation(Entity::ORIENTATION_SOUTH);
+ f.SetDirection(Entity::ORIENTATION_SOUTH);
f.SetSpeed(walkingSpeed);
f.StartAnimation(*this);
} else if (direction.X() < 0) {
- f.SetOrientation(Entity::ORIENTATION_WEST);
+ f.SetDirection(Entity::ORIENTATION_WEST);
f.SetSpeed(walkingSpeed);
f.StartAnimation(*this);
} else {
Vector<int> position(coordinates * map->Tileset()->Size());
for (Entity *e(controlled); e; e = e->Follower()) {
e->Position() = position;
- e->SetOrientation(controlled->GetOrientation());
+ e->SetDirection(controlled->GetDirection());
}
LoadMap(newMap);
skipLock = true;