Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h @ 12271

Last change on this file since 12271 was 12271, checked in by tkuonen, 5 years ago

Begin extending MouseAPI

File size: 3.7 KB
Line 
1#ifndef MOUSEAPI_H
2#define MOUSEAPI_H
3
4
5#include "OrxonoxPrereqs.h"
6#include "util/OgreForwardRefs.h"
7#include "graphics/Camera.h"
8#include <util/Math.h>
9#include <list>
10#include <core/input/InputHandler.h>
11#include <graphics/Camera.h>
12#include <core/GraphicsManager.h>
13#include <core/input/InputState.h>
14#include <OgreCamera.h>
15#include <OgreViewport.h>
16#include "CameraManager.h"
17#include <functional>
18
19namespace orxonox
20{
21
22typedef uint ClickableObjectID;
23typedef uint ScrollableElementID;
24
25class MouseAPI : public InputHandler, public Singleton<MouseAPI>
26{
27friend class Singleton<MouseAPI>;
28private:
29
30    struct clickableElement
31    {
32        //static ClickableObjectID lastClID;
33        ClickableObjectID id;
34        Vector3 position;
35        float radius;
36        std::list<MouseButtonCode::ByEnum> buttons;
37        std::function<void(MouseButtonCode::ByEnum button)> onClickedFunction;
38        clickableElement(ClickableObjectID id,const Vector3& position,float radius,const std::list<MouseButtonCode::ByEnum>& buttons,std::function<void(MouseButtonCode::ByEnum button)> onClickedFunction):position(position),
39            radius(radius), buttons(buttons), onClickedFunction(onClickedFunction),id(id){}
40    };
41
42    struct scrollElement
43    {
44        static ScrollableElementID lastScID;
45        ScrollableElementID id;
46        bool considerPosition;
47        Vector3 position;
48        float radius;
49        std::function<void(int abs,int rel,const IntVector2& mousePos)> onScrolledFunction;
50        scrollElement(ScrollableElementID id,std::function<void(int abs,int rel,const IntVector2& mousePos)> onScrolledFunction):considerPosition(false),
51            onScrolledFunction(onScrolledFunction),id(id){}
52        scrollElement(ScrollableElementID id,const Vector3& position, float radius, std::function<void(int abs,int rel,const IntVector2& mousePos)> onScrolledFunction):considerPosition(true),
53            position(position), radius(radius), onScrolledFunction(onScrolledFunction),id(id){}
54    };
55
56    static MouseAPI* singletonPtr_s;
57    std::list<clickableElement> clickEvents;
58    std::list<scrollElement> scrollEvents;
59    Ogre::Camera *cam ;
60    IntVector2 mousePos;
61    InputState* state;
62    bool active = false;
63
64
65
66public:
67
68    MouseAPI();
69    ~MouseAPI();
70    virtual void buttonPressed (MouseButtonCode::ByEnum button) override;
71    virtual void buttonReleased(MouseButtonCode::ByEnum button)  override{}
72    virtual void buttonHeld    (MouseButtonCode::ByEnum button) override{}
73    virtual void mouseMoved    (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize) override;
74    virtual void mouseScrolled (int abs, int rel) override;
75
76    ClickableObjectID addClickableObject(const Vector3& position,float radius,const std::list<MouseButtonCode::ByEnum>& buttons,std::function<void(MouseButtonCode::ByEnum button)>  onClickedFunction);
77    ScrollableElementID addScrollElement(const Vector3& position,float radius,std::function<void(int abs,int rel,const IntVector2& mousePos)> onScrolledFunction);
78    ScrollableElementID addScrollElement(std::function<void(int abs,int rel,const IntVector2& mousePos)> onScrolledFunction);
79
80    void changePositionOfClickableObject(ClickableObjectID id,const Vector3& position);
81    void changePositionOfScrollableElement(ScrollableElementID id,const Vector3& position);
82    void changeRadiusOfClickableObject(ClickableObjectID id,float radius);
83    void changeRadiusOfScrollableElement(ScrollableElementID id,float radius);
84    void deleteClickableObject(ClickableObjectID);
85    void deleteScrollableElement(ScrollableElementID);
86
87    void activate();
88    static bool isActive(){return singletonPtr_s != nullptr && getInstance().active;}
89    void deactivate();
90};
91}
92#endif // MOUSEAPI_H
Note: See TracBrowser for help on using the repository browser.