/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2007-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.renderer3d.navigationgestures; import com.jme.renderer.Camera; import java.awt.event.MouseWheelEvent; /** * A gesture for moving forward or back. * <p/> * Move camera with W,S,A,D or arrow keys or scroll wheel (forward and back and strafes to the sides, * acceleration is enabled (and a bit of inertia too for effect)). * With scroll wheel, a few scrolls gives a small thrust, many scrolls leaves the thrust on. * Scroll back to turn the thrust off again (and to thrust backwards). * <p/> * Also scale move amount by altitude. * * @author Hans H�ggstr�m */ public final class MoveGesture extends AbstractNavigationGesture { //====================================================================== // Private Constants private static final float DEFAULT_MOVE_SENSITIVITY = 10.0f; //====================================================================== // Public Methods //---------------------------------------------------------------------- // Constructors public MoveGesture() { super( DEFAULT_MOVE_SENSITIVITY ); } //---------------------------------------------------------------------- // MouseWheelListener Implementation public void mouseWheelMoved( final MouseWheelEvent e ) { final Camera camera = getCamera(); final float movementAmount = -e.getWheelRotation() * getSensitivity() * getAltitudeFactor(); // TODO: Implement inertia, acceleration, locked movement, and keyboard input camera.getLocation().scaleAdd( movementAmount, camera.getDirection(), camera.getLocation() ); camera.onFrameChange(); } }