[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