
#ifndef __WFX_RENDERER_FIRSTPERSONCAMERA_H__
#define __WFX_RENDERER_FIRSTPERSONCAMERA_H__

#include <WFX/WFXIncludes.h>

#include <WFX/renderer/Camera.h>
#include <WFX/renderer/RenderWindow.h>
#include <WFX/input/MouseListener.h>
#include <WFX/input/KeyboardListener.h>


namespace WFX {

    namespace renderer {

        /**
         * First person camera
         * implements a FPS-like camera, basically for
         * testing purposes.
         * Just add to the InputHandler as Mouse/KeyboardListener and
         * you are ready to go
         * this class contains many hardcoded values, make sure to
         * implement your own camera for any serious project
         */
        class FirstPersonCamera : public WFX::renderer::Camera,
                                  public WFX::input::MouseListener,
                                  public WFX::input::KeyboardListener {
            public:
                /**
                 * Ctor/Dtor
                 */
                FirstPersonCamera(WFX::renderer::RenderWindow* r);
                virtual ~FirstPersonCamera();

                /** implement MouseListener */
                void mouseMoved(WFX::input::MouseMotionEvent e);
                void mouseButtonPressed(WFX::input::MouseButtonEvent e);
                void mouseButtonReleased(WFX::input::MouseButtonEvent e);

                /** implement KeyboardListener */
                void keyPressed(WFX::input::KeyEvent k);
                void keyReleased(WFX::input::KeyEvent k);

                void update();
                
            protected:
                /** renderwindow pointer */
                WFX::renderer::RenderWindow* RenderWindow;
                /** moving */
                bool MovingForward;
                bool MovingBack;
                bool MovingLeft;
                bool MovingRight;
                
        };

    }

}


#endif //include guard


