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