[Orxonox-commit 7660] r12253 - code/branches/MouseAPI_FS19/src/modules/MouseAPI

mkarpf at orxonox.net mkarpf at orxonox.net
Thu Mar 28 15:32:09 CET 2019


Author: mkarpf
Date: 2019-03-28 15:32:09 +0100 (Thu, 28 Mar 2019)
New Revision: 12253

Modified:
   code/branches/MouseAPI_FS19/src/modules/MouseAPI/CMakeLists.txt
   code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc
   code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h
Log:
Test Level created
ATTENTION: Level is buggy and freezes Screen!


Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/CMakeLists.txt
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/CMakeLists.txt	2019-03-28 14:09:12 UTC (rev 12252)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/CMakeLists.txt	2019-03-28 14:32:09 UTC (rev 12253)
@@ -1,5 +1,6 @@
 SET_SOURCE_FILES(MOUSEAPI_SRC_FILES
   mouseapi.cc
+  mouseapiexample.cc
 )
 
 

Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc	2019-03-28 14:09:12 UTC (rev 12252)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc	2019-03-28 14:32:09 UTC (rev 12253)
@@ -2,22 +2,39 @@
 
 namespace orxonox{
 
-MouseAPI::MouseAPI(Camera& camera)
+MouseAPI::MouseAPI()
 {
-    cam = camera.getOgreCamera();
-    state = InputManager::getInstance().createInputState("MouseAPI");
-    state->setMouseExclusive(false);//does this work
-    state->setMouseHandler(this);
-    InputManager::getInstance().enterState("MouseAPI");
 
 }
 
-MouseAPI::~MouseAPI(){
-    InputManager::getInstance().leaveState("MouseAPI");
-    state->setMouseHandler(nullptr);
-    InputManager::getInstance().destroyState("MouseAPI");
+void MouseAPI::activate()
+{
+     if(InputManager::exists())
+     {
+        cam = CameraManager::getInstance().getActiveCamera()->getOgreCamera();
+        state = InputManager::getInstance().createInputState("MouseAPI");
+        state->setMouseExclusive(false);//does this work
+        state->setMouseHandler(this);
+        InputManager::getInstance().enterState("MouseAPI");
+    }
+
 }
 
+void MouseAPI::deactivate()
+{
+    if(InputManager::exists())
+    {
+        InputManager::getInstance().leaveState("MouseAPI");
+        state->setMouseHandler(nullptr);
+        InputManager::getInstance().destroyState("MouseAPI");
+    }
+}
+
+MouseAPI::~MouseAPI()
+{
+
+}
+
 void MouseAPI::buttonPressed(MouseButtonCode::ByEnum button)
 {
     Ogre::Viewport *vp = GraphicsManager::getInstance().getViewport();
@@ -26,7 +43,7 @@
     {
         for(auto wantedButton:event.buttons){
             if(wantedButton == button && ray.intersects(Ogre::Sphere(event.position,event.radius)).first)
-                (*(event.onClickedFunction))(button);
+                event.onClickedFunction(button);
         }
     }
 }
@@ -46,7 +63,7 @@
     }
 }
 
-void MouseAPI::addClickableObject(const Vector3& position,float radius,const std::list<MouseButtonCode::ByEnum>& buttons,void (*onClickedFunction)(MouseButtonCode::ByEnum button))
+void MouseAPI::addClickableObject(const Vector3& position, float radius, const std::list<MouseButtonCode::ByEnum>& buttons, std::function<void(MouseButtonCode::ByEnum)> onClickedFunction)
 {
     clickEvents.insert(clickEvents.begin(),{position,radius,buttons,onClickedFunction});
 }

Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h	2019-03-28 14:09:12 UTC (rev 12252)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h	2019-03-28 14:32:09 UTC (rev 12253)
@@ -13,6 +13,8 @@
 #include <core/input/InputState.h>
 #include <OgreCamera.h>
 #include <OgreViewport.h>
+#include "CameraManager.h"
+#include <functional>
 
 namespace orxonox
 {
@@ -27,8 +29,8 @@
         Vector3 position;
         float radius;
         std::list<MouseButtonCode::ByEnum> buttons;
-        void (*onClickedFunction)(MouseButtonCode::ByEnum button);
-        clickableElement(const Vector3& position,float radius,const std::list<MouseButtonCode::ByEnum>& buttons,void (*onClickedFunction)(MouseButtonCode::ByEnum button)):position(position),
+        std::function<void(MouseButtonCode::ByEnum button)> onClickedFunction;
+        clickableElement(const Vector3& position,float radius,const std::list<MouseButtonCode::ByEnum>& buttons,std::function<void(MouseButtonCode::ByEnum button)> onClickedFunction):position(position),
             radius(radius), buttons(buttons), onClickedFunction(onClickedFunction){}
     };
 
@@ -54,7 +56,7 @@
 
 public:
 
-    MouseAPI(Camera& cam);
+    MouseAPI();
     ~MouseAPI();
     virtual void buttonPressed (MouseButtonCode::ByEnum button) override;
     virtual void buttonReleased(MouseButtonCode::ByEnum button)  override{}
@@ -62,11 +64,14 @@
     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 std::list<MouseButtonCode::ByEnum>& buttons,void (*onClickedFunction)(MouseButtonCode::ByEnum button));
+    void addClickableObject(const Vector3& position,float radius,const std::list<MouseButtonCode::ByEnum>& buttons,std::function<void(MouseButtonCode::ByEnum button)>  onClickedFunction);
     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));
 
     void changeCamera(Camera& camera);
+
+    void activate();
+    void deactivate();
 };
 }
 #endif // MOUSEAPI_H



More information about the Orxonox-commit mailing list