[BACK] Return to move_listener.h CVS log [TXT][DIR] Up to Nevrax / code / client

File: Nevrax / code / client / Attic / move_listener.h (download)
Revision 1.2, Mon Dec 4 17:58:09 2000 UTC (19 months, 3 weeks ago) by coutelas
Branch: MAIN
Changes since 1.1: +75 -65 lines
no message

/** \file move_listener.h
 * <File description>
 *
 * $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 */