/** \file move_listener.h * * * $Id: move_listener.h,v 1.2 2000/12/04 17:58:09 coutelas Exp $ */ /* Copyright, 2000 Nevrax Ltd. * * This file is part of NEVRAX NEL. * NEVRAX NEL is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * NEVRAX NEL 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 * General Public License for more details. * You should have received a copy of the GNU General Public License * along with NEVRAX NEL; see the file COPYING. If not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, * MA 02111-1307, USA. */ #ifndef NL_MOVE_LISTENER_H #define NL_MOVE_LISTENER_H #include "nel/misc/types_nl.h" #include "nel/misc/event_listener.h" #include "nel/misc/matrix.h" #include "nel/3d/viewport.h" #include "nel/3d/scene.h" #include "nel/3d/camera.h" namespace NL3D { /** * CMoveListener is a listener that handle a 3d matrix with mouse events. * \author Stephane Coutelas * \author Nevrax France * \date 2000 */ class CMoveListener : public NLMISC::IEventListener { public: /** * TMoveMode. * moving modes */ enum TMoveMode { WALK, FREE }; /** * Constructor. * You should call init then. */ CMoveListener(); /** * Constructor. * You should call init then. * \param scene the scene * \param w screen width in pixels * \param h screen height in pixels * \param camera the camera */ void init(CScene * scene, uint w, uint h, const class CCamera& camera) { _Scene = scene; _Width = w; _Height = h; _Viewport = scene->getViewport(); float dummy; _ViewMatrix = camera.getMatrix (); camera.getFrustum (_Left, _Right, _Bottom, _Top, _Depth, dummy); } /** * Set the moving mode * \param m the moving mode */ void setMode(TMoveMode m) { _Mode = m; } /** * Register the listener to the server. */ void addToServer (NLMISC::CEventServer& server); /** * Unregister the listener to the server. */ void removeFromServer (NLMISC::CEventServer& server); private: /// Internal use virtual void operator()(const NLMISC::CEvent& event); /// moving mode TMoveMode _Mode; /// view matrix NLMISC::CMatrix _ViewMatrix; /// viewport NL3D::CViewport _Viewport; /// true if previous mouse move event was re-centering cursor bool _CursorReset; CScene * _Scene; /// screen width uint _Width; /// screen height uint _Height; ///frustum parameters float _Top; float _Bottom; float _Left; float _Right; float _Depth; /// current position CVector _Pos; ///current rotation z angle float _RotZ; ///current rotation x angle float _RotX; /// step for translation static const float _StepTrans; /// step for rotation static const float _StepRot; }; // NL3D } #endif // NL_MOVE_LISTENER_H /* End of move_listener.h */