#ifndef MOUSEAPI_H #define MOUSEAPI_H #include "OrxonoxPrereqs.h" #include "util/OgreForwardRefs.h" #include "graphics/Camera.h" #include #include #include #include #include #include #include #include #include "CameraManager.h" #include namespace orxonox { typedef uint ClickableObjectID; typedef uint ScrollableElementID; class MouseAPI : public InputHandler, public Singleton { friend class Singleton; private: struct clickableElement { ClickableObjectID id; Vector3 position; float radius; std::list buttons; std::function onClickedFunction; clickableElement(ClickableObjectID id,const Vector3& position,float radius,const std::list& buttons,std::function onClickedFunction):id(id),position(position), radius(radius), buttons(buttons), onClickedFunction(onClickedFunction){} }; struct scrollElement { ScrollableElementID id; bool considerPosition; Vector3 position; float radius; std::function onScrolledFunction; scrollElement(ScrollableElementID id,std::function onScrolledFunction):id(id),considerPosition(false), onScrolledFunction(onScrolledFunction){} scrollElement(ScrollableElementID id,const Vector3& position, float radius, std::function onScrolledFunction):id(id),considerPosition(true), position(position), radius(radius), onScrolledFunction(onScrolledFunction){} }; static MouseAPI* singletonPtr_s; std::list clickEvents; std::list scrollEvents; Ogre::Camera *cam ; IntVector2 mousePos; InputState* state; bool active = false; public: MouseAPI(); ~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; ClickableObjectID addClickableObject(const Vector3& position,float radius,const std::list& buttons,std::function onClickedFunction); ScrollableElementID addScrollElement(const Vector3& position,float radius,std::function onScrolledFunction); ScrollableElementID addScrollElement(std::function onScrolledFunction); //true: success; false: element not found bool changePositionOfClickableObject(ClickableObjectID id,const Vector3& position); bool changePositionOfScrollableElement(ScrollableElementID id,const Vector3& position); bool changeRadiusOfClickableObject(ClickableObjectID id,float radius); bool changeRadiusOfScrollableElement(ScrollableElementID id,float radius); bool deleteClickableObject(ClickableObjectID id); bool deleteScrollableElement(ScrollableElementID id); void activate(); static bool isActive(){return singletonPtr_s != nullptr && getInstance().active;} void deactivate(); }; } #endif // MOUSEAPI_H