/** * Moves the camera by the given distance in screen coordinates. */ public void moveWorld(Vec2 screenDiff) { transform.getScreenVectorToWorld(screenDiff, worldDiff); if (!transform.isYFlip()) { worldDiff.y = -worldDiff.y; } transform.setCenter(transform.getCenter().addLocal(worldDiff)); }
public void transformViewport(GL2 gl, Vec2 center) { Vec2 e = viewportTransform.getExtents(); Vec2 vc = viewportTransform.getCenter(); Mat22 vt = viewportTransform.getMat22Representation(); int f = viewportTransform.isYFlip() ? -1 : 1; mat[0] = vt.ex.x; mat[4] = vt.ey.x; // mat[8] = 0; mat[12] = e.x; mat[1] = f * vt.ex.y; mat[5] = f * vt.ey.y; // mat[9] = 0; mat[13] = e.y; // mat[2] = 0; // mat[6] = 0; // mat[10] = 1; // mat[14] = 0; // mat[3] = 0; // mat[7] = 0; // mat[11] = 0; // mat[15] = 1; gl.glMultMatrixf(mat, 0); gl.glTranslatef(center.x - vc.x, center.y - vc.y, 0); }
/** * 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)); }
continue; boolean oldFlip = transform.isYFlip(); if (mouseBehavior == MouseBehavior.FORCE_Y_FLIP) { transform.setYFlip(true);
public void mouseDragged(MouseEvent e) { pos.set(e.getX(), e.getY()); if (e.getButton() == MouseEvent.BUTTON3) { posDif.set(model.getMouse()); model.setMouse(pos); posDif.subLocal(pos); if(!model.getDebugDraw().getViewportTranform().isYFlip()){ posDif.y *= -1; } model.getDebugDraw().getViewportTranform().getScreenVectorToWorld(posDif, posDif); model.getDebugDraw().getViewportTranform().getCenter().addLocal(posDif); if (model.getCurrTest() != null) { model.getCurrTest().setCachedCameraPos( model.getDebugDraw().getViewportTranform().getCenter()); } } if (model.getCurrTest() != null) { model.setMouse(pos); model.getDebugDraw().getScreenToWorldToOut(pos, pos); model.getCurrTest().queueMouseMove(pos); } }