allow for animated moves

This commit is contained in:
Justin R. Miller
2014-02-06 16:08:44 -05:00
parent 26433e3288
commit e48207a4ef
4 changed files with 12 additions and 7 deletions

View File

@@ -32,7 +32,7 @@ public:
void tileFailed(std::shared_ptr<Tile> tile);
/* position */
void moveBy(double dx, double dy);
void moveBy(double dx, double dy, double duration = 0);
// void setLonLat(double lon, double lat);
void resetPosition();

View File

@@ -21,7 +21,7 @@ public:
void updateAnimations();
// Relative changes
void moveBy(double dx, double dy);
void moveBy(double dx, double dy, double duration = 0);
void scaleBy(double ds, double cx = -1, double cy = -1, double duration = 0);
void rotateBy(double cx, double cy, double sx, double sy, double ex, double ey);

View File

@@ -57,8 +57,8 @@ void Map::resize(uint32_t width, uint32_t height, uint32_t fb_width, uint32_t fb
update();
}
void Map::moveBy(double dx, double dy) {
transform.moveBy(dx, dy);
void Map::moveBy(double dx, double dy, double duration) {
transform.moveBy(dx, dy, duration);
update();
transform.getLonLat(settings.longitude, settings.latitude);

View File

@@ -28,9 +28,14 @@ void Transform::updateAnimations() {
});
}
void Transform::moveBy(double dx, double dy) {
x += cos(angle) * dx + sin(angle) * dy;
y += cos(angle) * dy + sin(-angle) * dx;
void Transform::moveBy(double dx, double dy, double duration) {
if (duration == 0) {
x += cos(angle) * dx + sin(angle) * dy;
y += cos(angle) * dy + sin(-angle) * dx;
} else {
animations.emplace_front(x, x + cos(angle) * dx + sin(angle) * dy, x, duration);
animations.emplace_front(y, y + cos(angle) * dy + sin(-angle) * dx, y, duration);
}
}
void Transform::scaleBy(double ds, double cx, double cy, double duration) {