| [12213] | 1 | #include "mouseapi.h" |
|---|
| 2 | |
|---|
| [12247] | 3 | namespace orxonox{ |
|---|
| 4 | |
|---|
| [12217] | 5 | MouseAPI::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] | 15 | MouseAPI::~MouseAPI(){ |
|---|
| [12247] | 16 | InputManager::getInstance().leaveState("MouseAPI"); |
|---|
| 17 | state->setMouseHandler(nullptr); |
|---|
| 18 | InputManager::getInstance().destroyState("MouseAPI"); |
|---|
| [12217] | 19 | } |
|---|
| [12213] | 20 | |
|---|
| [12247] | 21 | void 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] | 34 | void MouseAPI::mouseMoved(IntVector2 abs, IntVector2 rel, IntVector2 clippingSize) |
|---|
| [12213] | 35 | { |
|---|
| [12217] | 36 | mousePos = abs; |
|---|
| [12213] | 37 | } |
|---|
| [12217] | 38 | |
|---|
| [12247] | 39 | void 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] | 49 | void 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 | } |
|---|
| 53 | void 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] | 57 | void MouseAPI::addScrollElement(void (*onScrolledFunction)(int abs,int rel,const IntVector2& mousePos)) |
|---|
| [12213] | 58 | { |
|---|
| [12247] | 59 | scrollEvents.insert(scrollEvents.begin(),{onScrolledFunction}); |
|---|
| [12213] | 60 | } |
|---|
| [12217] | 61 | |
|---|
| 62 | void MouseAPI::changeCamera(Camera& camera) |
|---|
| 63 | { |
|---|
| 64 | cam = camera.getOgreCamera(); |
|---|
| 65 | } |
|---|
| [12247] | 66 | |
|---|
| 67 | } |
|---|