Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc @ 12251

Last change on this file since 12251 was 12247, checked in by tkuonen, 7 years ago

Comlete initial version of MouseAPI
remove compile errors

File size: 2.3 KB
Line 
1#include "mouseapi.h"
2
3namespace orxonox{
4
5MouseAPI::MouseAPI(Camera& camera)
6{
7    cam = camera.getOgreCamera();
8    state = InputManager::getInstance().createInputState("MouseAPI");
9    state->setMouseExclusive(false);//does this work
10    state->setMouseHandler(this);
11    InputManager::getInstance().enterState("MouseAPI");
12
13}
14
15MouseAPI::~MouseAPI(){
16    InputManager::getInstance().leaveState("MouseAPI");
17    state->setMouseHandler(nullptr);
18    InputManager::getInstance().destroyState("MouseAPI");
19}
20
21void MouseAPI::buttonPressed(MouseButtonCode::ByEnum button)
22{
23    Ogre::Viewport *vp = GraphicsManager::getInstance().getViewport();
24    Ogre::Ray ray = cam->getCameraToViewportRay(mousePos.x/((float)vp->getActualWidth()),mousePos.y/((float)vp->getActualHeight()));
25    for(auto event: clickEvents)
26    {
27        for(auto wantedButton:event.buttons){
28            if(wantedButton == button && ray.intersects(Ogre::Sphere(event.position,event.radius)).first)
29                (*(event.onClickedFunction))(button);
30        }
31    }
32}
33
34void MouseAPI::mouseMoved(IntVector2 abs, IntVector2 rel, IntVector2 clippingSize)
35{
36    mousePos = abs;
37}
38
39void MouseAPI::mouseScrolled(int abs, int rel)
40{
41    Ogre::Viewport *vp = GraphicsManager::getInstance().getViewport();
42    Ogre::Ray ray = cam->getCameraToViewportRay(mousePos.x/((float)vp->getActualWidth()),mousePos.y/((float)vp->getActualHeight()));
43    for(auto event:scrollEvents){
44        if(!event.considerPosition || ray.intersects(Ogre::Sphere(event.position,event.radius)).first)
45            (*(event.onScrolledFunction))(abs,rel,mousePos);
46    }
47}
48
49void MouseAPI::addClickableObject(const Vector3& position,float radius,const std::list<MouseButtonCode::ByEnum>& buttons,void (*onClickedFunction)(MouseButtonCode::ByEnum button))
50{
51    clickEvents.insert(clickEvents.begin(),{position,radius,buttons,onClickedFunction});
52}
53void MouseAPI::addScrollElement(const Vector3& position,float radius,void (*onScrolledFunction)(int abs,int rel,const IntVector2&  mousePos))
54{
55    scrollEvents.insert(scrollEvents.begin(),{position,radius,onScrolledFunction});
56}
57void MouseAPI::addScrollElement(void (*onScrolledFunction)(int abs,int rel,const IntVector2&  mousePos))
58{
59    scrollEvents.insert(scrollEvents.begin(),{onScrolledFunction});
60}
61
62void MouseAPI::changeCamera(Camera& camera)
63{
64    cam = camera.getOgreCamera();
65}
66
67}
Note: See TracBrowser for help on using the repository browser.