mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 14:27:16 +00:00
(svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
Hopefully this new code is also a bit more comprehensible than the old. (;
This commit is contained in:
parent
d6e4999f1f
commit
d1d33372ff
37
viewport.c
37
viewport.c
@ -1276,28 +1276,39 @@ void UpdateViewportPosition(Window *w)
|
||||
pt = MapXYZToViewport(vp, veh->x_pos, veh->y_pos, veh->z_pos);
|
||||
SetViewportPosition(w, pt.x, pt.y);
|
||||
} else {
|
||||
#if !defined(NEW_ROTATION)
|
||||
int x;
|
||||
int y;
|
||||
int vx;
|
||||
int vy;
|
||||
|
||||
// Center of the viewport is hot spot
|
||||
x = WP(w,vp_d).scrollpos_x + vp->virtual_width / 2;
|
||||
y = WP(w,vp_d).scrollpos_y + vp->virtual_height / 2;
|
||||
// Convert viewport coordinates to map coordinates
|
||||
// Calculation is scaled by 4 to avoid rounding errors
|
||||
vx = -x + y * 2;
|
||||
vy = x + y * 2;
|
||||
// clamp to size of map
|
||||
vx = clamp(vx, 0 * 4, TILE_X_MAX * 16 * 4);
|
||||
vy = clamp(vy, 0 * 4, TILE_Y_MAX * 16 * 4);
|
||||
// Convert map coordinates to viewport coordinates
|
||||
x = (-vx + vy) / 2;
|
||||
y = ( vx + vy) / 4;
|
||||
// Set position
|
||||
WP(w,vp_d).scrollpos_x = x - vp->virtual_width / 2;
|
||||
WP(w,vp_d).scrollpos_y = y - vp->virtual_height / 2;
|
||||
#else
|
||||
int x,y,t;
|
||||
int err;
|
||||
|
||||
x = WP(w,vp_d).scrollpos_x >> 2;
|
||||
y = WP(w,vp_d).scrollpos_y >> 1;
|
||||
|
||||
#if !defined(NEW_ROTATION)
|
||||
t = x;
|
||||
x = y - t;
|
||||
y = y + t;
|
||||
|
||||
// check if inside bounds?
|
||||
t = (-130) << vp->zoom;
|
||||
err = 0;
|
||||
if (y < t || y > (t += TILE_Y_MAX*16-1)) { y = t; err++; }
|
||||
if (x < (t=0) || x > (t=TILE_X_MAX*16-1) ) { x = t; err++; }
|
||||
#else
|
||||
t = x;
|
||||
x = x + y;
|
||||
y = x - y;
|
||||
err= 0;
|
||||
#endif
|
||||
|
||||
if (err != 0) {
|
||||
/* coordinate remap */
|
||||
@ -1306,6 +1317,8 @@ void UpdateViewportPosition(Window *w)
|
||||
WP(w,vp_d).scrollpos_x = pt.x & t;
|
||||
WP(w,vp_d).scrollpos_y = pt.y & t;
|
||||
}
|
||||
#endif
|
||||
|
||||
SetViewportPosition(w, WP(w,vp_d).scrollpos_x, WP(w,vp_d).scrollpos_y);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user