Changeset - r632:7b88424d9971
[Not reviewed]
master
0 1 0
tron - 19 years ago 2004-12-13 18:33:47
tron@openttd.org
(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. (;
1 file changed with 25 insertions and 12 deletions:
viewport.c
25
12
0 comments (0 inline, 0 general)
viewport.c
Show inline comments
 
@@ -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);
 
	}
 
}
0 comments (0 inline, 0 general)