/** * Zooms the camera to a point on the screen. The zoom amount is given on camera initialization. */ public void zoomToPoint(Vec2 screenPosition, ZoomType zoomType) { Mat22 zoom; switch (zoomType) { case ZOOM_IN: zoom = upScale; break; case ZOOM_OUT: zoom = downScale; break; default: Preconditions.checkArgument(false, "Zoom type invalid"); return; } transform.getScreenToWorld(screenPosition, oldCenter); transform.mulByTransform(zoom); transform.getScreenToWorld(screenPosition, newCenter); Vec2 transformedMove = oldCenter.subLocal(newCenter); // set, just in case bad impl by someone if (!transform.isYFlip()) { transformedMove.y = -transformedMove.y; } transform.setCenter(transform.getCenter().addLocal(transformedMove)); }