#ifndef MOUSEAPI_H #define MOUSEAPI_H #include #include #include #include #include #include namespace orxonox { class MouseAPI : public InputHandler { private: struct clickableElement { Vector3 position; float radius; list buttons; void (*onClickedFunction)(MouseButtonCode::ByEnum button); clickableElement(const Vector3& position,float radius,const list& buttons,void (*onClickedFunction)()):position(position), radius(radius), buttons(buttons), onClickedFunction(onClickedFunction){} }; struct scrollElement { bool considerPosition; Vector3 position; float radius; void (*onScrolledFunction)(int abs,int rel,const IntVector2& mousePos); scrollEvents(void (*onScrolledFunction)(int abs,int rel,const IntVector2& mousePos)):considerPosition(false), onScrolledFunction(onScrolledFunction){} scrollEvents(Vector3& position, float radius, void (*onScrolledFunction)(int abs,int rel,const IntVector2& mousePos)):considerPosition(true), position(position), radius(radius), onScrolledFunction(onScrolledFunction){} }; std::list clickEvents; std::list scrollEvents; Ogre::Camera cam; IntVector2 mousePos; InputState* state; public: MouseAPI(Camera& cam); ~MouseAPI(); virtual void buttonPressed (MouseButtonCode::ByEnum button) override; virtual void buttonReleased(MouseButtonCode::ByEnum button) override{} virtual void buttonHeld (MouseButtonCode::ByEnum button) override{} virtual void mouseMoved (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize) override; virtual void mouseScrolled (int abs, int rel) override; void addClickableObject(const Vector3& position,float radius,const list& buttons,void (*onClickedFunction)(MouseButtonCode::ByEnum button)); void addScrollElement(const Vector3& position,float radius,void (*onScrolledFunction)(int abs,int rel,const IntVector2& mousePos)); void addScrollElement(void (*onScrolledFunction)(int abs,int rel,const IntVector2& mousePos)); void changeCamera(Camera& camera); }; } #endif // MOUSEAPI_H