[Orxonox-commit 7654] r12247 - code/branches/MouseAPI_FS19/src/modules/MouseAPI

tkuonen at orxonox.net tkuonen at orxonox.net
Thu Mar 28 13:33:50 CET 2019


Author: tkuonen
Date: 2019-03-28 13:33:50 +0100 (Thu, 28 Mar 2019)
New Revision: 12247

Modified:
   code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc
   code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h
Log:
Comlete initial version of MouseAPI
remove compile errors


Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc	2019-03-28 12:28:15 UTC (rev 12246)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc	2019-03-28 12:33:50 UTC (rev 12247)
@@ -1,5 +1,7 @@
 #include "mouseapi.h"
 
+namespace orxonox{
+
 MouseAPI::MouseAPI(Camera& camera)
 {
     cam = camera.getOgreCamera();
@@ -11,48 +13,50 @@
 }
 
 MouseAPI::~MouseAPI(){
-    //todo look at gslevel destructor and implement this one
+    InputManager::getInstance().leaveState("MouseAPI");
+    state->setMouseHandler(nullptr);
+    InputManager::getInstance().destroyState("MouseAPI");
 }
 
-virtual void MouseAPI::buttonPressed (MouseButtonCode::ByEnum button)
+void MouseAPI::buttonPressed(MouseButtonCode::ByEnum button)
 {
-    Ogre::Viewport vp = GraphicsManager::getInstance().getViewport();
-    Ogre::Ray ray = getCameraToViewPortRay(mousePos.x/((float)vp.getActualWidth()),mousePos.y/((float)vp.getActualHeight()));
+    Ogre::Viewport *vp = GraphicsManager::getInstance().getViewport();
+    Ogre::Ray ray = cam->getCameraToViewportRay(mousePos.x/((float)vp->getActualWidth()),mousePos.y/((float)vp->getActualHeight()));
     for(auto event: clickEvents)
     {
-        for(auto wantedButton:buttons){
-            if(wantedButton == button && ray.intersects(Ogre::Sphere(event.position,radius)))
-                (&(event.onClickedFunction))(button);
+        for(auto wantedButton:event.buttons){
+            if(wantedButton == button && ray.intersects(Ogre::Sphere(event.position,event.radius)).first)
+                (*(event.onClickedFunction))(button);
         }
     }
 }
 
-virtual void MouseAPI::mouseMoved    (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize)
+void MouseAPI::mouseMoved(IntVector2 abs, IntVector2 rel, IntVector2 clippingSize)
 {
     mousePos = abs;
 }
 
-virtual void MouseAPI::mouseScrolled (int abs, int rel)
+void MouseAPI::mouseScrolled(int abs, int rel)
 {
-    Ogre::Viewport vp = GraphicsManager::getInstance().getViewport();
-    Ogre::Ray ray = getCameraToViewPortRay(mousePos.x/((float)vp.getActualWidth()),mousePos.y/((float)vp.getActualHeight()));
+    Ogre::Viewport *vp = GraphicsManager::getInstance().getViewport();
+    Ogre::Ray ray = cam->getCameraToViewportRay(mousePos.x/((float)vp->getActualWidth()),mousePos.y/((float)vp->getActualHeight()));
     for(auto event:scrollEvents){
-        if(!event.considerPosition || ray.intersects(Ogre::Sphere(event.position,radius)))
+        if(!event.considerPosition || ray.intersects(Ogre::Sphere(event.position,event.radius)).first)
             (*(event.onScrolledFunction))(abs,rel,mousePos);
     }
 }
 
-void MouseAPI::addClickableObject(const Vector3& position,float radius,const list<MouseButtonCode::ByEnum>& buttons,void (*onClickedFunction)(MouseButtonCode::ByEnum button))
+void MouseAPI::addClickableObject(const Vector3& position,float radius,const std::list<MouseButtonCode::ByEnum>& buttons,void (*onClickedFunction)(MouseButtonCode::ByEnum button))
 {
-    clickEvents.insert({position,radius,buttons,onClickedFunction});
+    clickEvents.insert(clickEvents.begin(),{position,radius,buttons,onClickedFunction});
 }
 void MouseAPI::addScrollElement(const Vector3& position,float radius,void (*onScrolledFunction)(int abs,int rel,const IntVector2&  mousePos))
 {
-    scrollEvents.insert(position,radius,onScrolledFunction);
+    scrollEvents.insert(scrollEvents.begin(),{position,radius,onScrolledFunction});
 }
 void MouseAPI::addScrollElement(void (*onScrolledFunction)(int abs,int rel,const IntVector2&  mousePos))
 {
-    scrollEvents.insert(onScrolledFunction);
+    scrollEvents.insert(scrollEvents.begin(),{onScrolledFunction});
 }
 
 void MouseAPI::changeCamera(Camera& camera)
@@ -59,3 +63,5 @@
 {
     cam = camera.getOgreCamera();
 }
+
+}

Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h	2019-03-28 12:28:15 UTC (rev 12246)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h	2019-03-28 12:33:50 UTC (rev 12247)
@@ -1,6 +1,10 @@
 #ifndef MOUSEAPI_H
 #define MOUSEAPI_H
 
+
+#include "OrxonoxPrereqs.h"
+#include "util/OgreForwardRefs.h"
+#include "graphics/Camera.h"
 #include <util/Math.h>
 #include <list>
 #include <core/input/InputHandler.h>
@@ -7,6 +11,8 @@
 #include <graphics/Camera.h>
 #include <core/GraphicsManager.h>
 #include <core/input/InputState.h>
+#include <OgreCamera.h>
+#include <OgreViewport.h>
 
 namespace orxonox
 {
@@ -20,9 +26,9 @@
     {
         Vector3 position;
         float radius;
-        list<MouseButtonCode::ByEnum> buttons;
+        std::list<MouseButtonCode::ByEnum> buttons;
         void (*onClickedFunction)(MouseButtonCode::ByEnum button);
-        clickableElement(const Vector3& position,float radius,const list<MouseButtonCode::ByEnum>& buttons,void (*onClickedFunction)()):position(position),
+        clickableElement(const Vector3& position,float radius,const std::list<MouseButtonCode::ByEnum>& buttons,void (*onClickedFunction)(MouseButtonCode::ByEnum button)):position(position),
             radius(radius), buttons(buttons), onClickedFunction(onClickedFunction){}
     };
 
@@ -32,9 +38,9 @@
         Vector3 position;
         float radius;
         void (*onScrolledFunction)(int abs,int rel,const IntVector2& mousePos);
-        scrollEvents(void (*onScrolledFunction)(int abs,int rel,const IntVector2& mousePos)):considerPosition(false),
+        scrollElement(void (*onScrolledFunction)(int abs,int rel,const IntVector2& mousePos)):considerPosition(false),
             onScrolledFunction(onScrolledFunction){}
-        scrollEvents(Vector3& position, float radius, void (*onScrolledFunction)(int abs,int rel,const IntVector2& mousePos)):considerPosition(true),
+        scrollElement(const Vector3& position, float radius, void (*onScrolledFunction)(int abs,int rel,const IntVector2& mousePos)):considerPosition(true),
             position(position), radius(radius), onScrolledFunction(onScrolledFunction){}
     };
 
@@ -41,7 +47,7 @@
 
     std::list<clickableElement> clickEvents;
     std::list<scrollElement> scrollEvents;
-    Ogre::Camera cam;
+    Ogre::Camera *cam ;
     IntVector2 mousePos;
     InputState* state;
 
@@ -56,7 +62,7 @@
     virtual void mouseMoved    (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize) override;
     virtual void mouseScrolled (int abs, int rel) override;
 
-    void addClickableObject(const Vector3& position,float radius,const list<MouseButtonCode::ByEnum>& buttons,void (*onClickedFunction)(MouseButtonCode::ByEnum button));
+    void addClickableObject(const Vector3& position,float radius,const std::list<MouseButtonCode::ByEnum>& buttons,void (*onClickedFunction)(MouseButtonCode::ByEnum button));
     void addScrollElement(const Vector3& position,float radius,void (*onScrolledFunction)(int abs,int rel,const IntVector2&  mousePos));
     void addScrollElement(void (*onScrolledFunction)(int abs,int rel,const IntVector2&  mousePos));
 



More information about the Orxonox-commit mailing list