[Orxonox-commit 7785] r12377 - in code/branches/MouseAPI_FS19: data/gui/layouts data/gui/scripts data/levels data/overlays src/modules/MouseAPI src/modules/MouseAPIExample

tkuonen at orxonox.net tkuonen at orxonox.net
Thu May 16 14:27:40 CEST 2019


Author: tkuonen
Date: 2019-05-16 14:27:40 +0200 (Thu, 16 May 2019)
New Revision: 12377

Removed:
   code/branches/MouseAPI_FS19/data/gui/layouts/MouseAPICursor.layout
   code/branches/MouseAPI_FS19/data/gui/scripts/MouseAPICursor.lua
Modified:
   code/branches/MouseAPI_FS19/data/levels/MouseAPIExample.oxw
   code/branches/MouseAPI_FS19/data/overlays/MouseCursor.oxo
   code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc
   code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h
   code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapicursor.cc
   code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapicursor.h
   code/branches/MouseAPI_FS19/src/modules/MouseAPI/mousegametype.cc
   code/branches/MouseAPI_FS19/src/modules/MouseAPI/mousegametype.h
   code/branches/MouseAPI_FS19/src/modules/MouseAPIExample/mouseapiexample.h
Log:
Improve MouseAPI
Add Comments
Cleanup


Deleted: code/branches/MouseAPI_FS19/data/gui/layouts/MouseAPICursor.layout
===================================================================
--- code/branches/MouseAPI_FS19/data/gui/layouts/MouseAPICursor.layout	2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/data/gui/layouts/MouseAPICursor.layout	2019-05-16 12:27:40 UTC (rev 12377)
@@ -1,5 +0,0 @@
-<?xml version='1.0' encoding='utf-8'?>
-<GUILayout version="4">
-    <Window name="MouseAPICursor" type="DefaultWindow">
-    </Window>
-</GUILayout>

Deleted: code/branches/MouseAPI_FS19/data/gui/scripts/MouseAPICursor.lua
===================================================================
--- code/branches/MouseAPI_FS19/data/gui/scripts/MouseAPICursor.lua	2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/data/gui/scripts/MouseAPICursor.lua	2019-05-16 12:27:40 UTC (rev 12377)
@@ -1,7 +0,0 @@
--- MouseAPICursor.lua
--- Display a Mouse Cursor by displaying a empty Menu
-
-local P = createMenuSheet("MouseAPICursor")
-
-return P
-

Modified: code/branches/MouseAPI_FS19/data/levels/MouseAPIExample.oxw
===================================================================
--- code/branches/MouseAPI_FS19/data/levels/MouseAPIExample.oxw	2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/data/levels/MouseAPIExample.oxw	2019-05-16 12:27:40 UTC (rev 12377)
@@ -9,19 +9,15 @@
   include("stats.oxo")
   include("HUDTemplates3.oxo")
   include("MouseCursor.oxo")
-  include("tetrisHUD.oxo")
   include("templates/lodInformation.oxt")
 ?>
 
-<?lua
-  include("templates/spaceshipEscort.oxt")
-?>
-
 <Level gametype=MouseGametype>
  
   <templates>
     <Template link=lodtemplate_default />
   </templates>
+  <!--<?lua include("includes/notifications.oxi") ?>-->
 
   <Scene
     ambientlight = "0.8, 0.8, 0.8"
@@ -50,8 +46,6 @@
     </attached> 
 </MouseAPIExample>
 
-<!--<MouseAPICursor></MouseAPICursor>
-<MouseCursor></MouseCursor>-->
   </Scene>
 </Level>
 

Modified: code/branches/MouseAPI_FS19/data/overlays/MouseCursor.oxo
===================================================================
--- code/branches/MouseAPI_FS19/data/overlays/MouseCursor.oxo	2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/data/overlays/MouseCursor.oxo	2019-05-16 12:27:40 UTC (rev 12377)
@@ -1,5 +1,5 @@
 <Template name="MouseCursor">
 <OverlayGroup name = "MouseCursorGroup" scale = "1, 1">
-    <MouseAPICursor name="cursor" position = "0, 0" size="0.03, 0.03" cursorShape="cursor.png"></MouseAPICursor>
+    <MouseAPICursor name="cursor" position = "0, 0" size="0.03, 0.03" cursorShape="cursor.png" cursorColor="1,0,1"></MouseAPICursor>
 </OverlayGroup>
 </Template>

Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc	2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc	2019-05-16 12:27:40 UTC (rev 12377)
@@ -1,15 +1,5 @@
 #include "mouseapi.h"
 
-#if OGRE_VERSION >= 0x010900
-#   include <Overlay/OgreOverlayManager.h>
-#   include <Overlay/OgrePanelOverlayElement.h>
-#else
-#   include <OgreOverlayManager.h>
-#   include <OgrePanelOverlayElement.h>
-#endif
-
-#include "util/StringUtils.h"
-
 namespace orxonox{
 
 ManageScopedSingleton(MouseAPI, ScopeID::GRAPHICS, false);
@@ -26,26 +16,15 @@
         active = true;
         if(InputManager::exists())
         {
-            //cam = CameraManager::getInstance().getActiveCamera()->getOgreCamera();
             state = InputManager::getInstance().createInputState("MouseAPI",true,true,99);
             state->setMouseExclusive(false);//does this work
             state->setMouseHandler(this);
+            gameInputActivated = false;
             state->setKeyHandler(KeyBinderManager::getInstance().getDefaultAsHandler());
             InputManager::getInstance().enterState("guiMouseOnly");
             InputManager::getInstance().enterState("MouseAPI");
             InputManager::getInstance().setMouseExclusive("game",false);
-            //InputManager::getInstance().setMouseExclusive("guiMouseOnly",false);
-            //InputManager::getInstance().getState("game")->
         }
-        //GUIManager::getInstance().showGUI("MouseAPICursor", true);//Display a mouse cursor by displaying a empty menu
-        /*cursor = static_cast<Ogre::PanelOverlayElement*>(Ogre::OverlayManager::getSingleton()
-                                                               .createOverlayElement("Panel", "MouseAPI_cursor_" + getUniqueNumberString()));
-        cursor->setMaterialName("Orxonox/RadarMarker");//todo: better material
-        cursor->setPosition(0,0);
-        cursor->setDimensions(0.1,0.1);
-        Ogre::Overlay* overlay = Ogre::OverlayManager::getSingleton().create( "MouseAPI_cursor_" + getUniqueNumberString() );
-        overlay->show();*/
-        //this->overlay_->add2D(this->cursor);
     }
 
 }
@@ -54,7 +33,6 @@
 {
     if(active)
     {
-        GUIManager::getInstance().showGUI("MouseAPICursor", true);
         active = false;
         if(InputManager::exists())
         {
@@ -65,6 +43,7 @@
         }
         clickEvents.clear();
         scrollEvents.clear();
+        gameInputActivated=false;
     }
 }
 
@@ -75,7 +54,7 @@
 
 void MouseAPI::buttonPressed(MouseButtonCode::ByEnum button)
 {
-    cam = CameraManager::getInstance().getActiveCamera()->getOgreCamera();//todo: trycatch
+    cam = CameraManager::getInstance().getActiveCamera()->getOgreCamera();
     Ogre::Viewport *vp = GraphicsManager::getInstance().getViewport();
     int mouseposX = InputManager::getInstance().getMousePosition().first;
     int mouseposY = InputManager::getInstance().getMousePosition().second;
@@ -93,15 +72,13 @@
 
 void MouseAPI::mouseMoved(IntVector2 abs, IntVector2 rel, IntVector2 clippingSize)
 {
-    //mousePos = abs;
 }
 
 void MouseAPI::tick(float dt)
 {
-    if(active)
+    if(active && !gameInputActivated)
     {
-        InputManager::getInstance().leaveState("game");//hack: todo: crate 2nd input state with prioritz 98 for cegui(cursor)
-        //GUIManager::getInstance().showGUI("MouseAPICursor", false);//hack todo: only if gui not shown & evt better if not in mouse mooved
+        InputManager::getInstance().leaveState("game");
     }
 
 }
@@ -238,7 +215,6 @@
      return 0;
 }
 
-//returns relative Position of the Mouse
 Vector2 MouseAPI::getMousePosition()
 {
     Ogre::Viewport *vp = GraphicsManager::getInstance().getViewport();
@@ -245,4 +221,16 @@
     return Vector2(InputManager::getInstance().getMousePosition().first/((float)vp->getActualWidth()),InputManager::getInstance().getMousePosition().second/((float)vp->getActualHeight()));
 }
 
+void MouseAPI::activateGameInput()
+{
+    gameInputActivated = true;
+    state->setKeyHandler(nullptr);
 }
+
+void MouseAPI::deactivateGameInput()
+{
+    gameInputActivated = false;
+    state->setKeyHandler(KeyBinderManager::getInstance().getDefaultAsHandler());
+}
+
+}

Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h	2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h	2019-05-16 12:27:40 UTC (rev 12377)
@@ -1,9 +1,9 @@
 #ifndef MOUSEAPI_H
 #define MOUSEAPI_H
 
-#include "OrxonoxPrereqs.h"
-#include "util/OgreForwardRefs.h"
-#include "graphics/Camera.h"
+#include <OrxonoxPrereqs.h>
+#include <util/OgreForwardRefs.h>
+#include <graphics/Camera.h>
 #include <util/Math.h>
 #include <list>
 #include <core/input/InputHandler.h>
@@ -12,12 +12,12 @@
 #include <core/input/InputState.h>
 #include <OgreCamera.h>
 #include <OgreViewport.h>
-#include "CameraManager.h"
+#include <CameraManager.h>
 #include <functional>
-#include "core/GUIManager.h"
-#include "core/input/KeyBinderManager.h"
-#include "tools/interfaces/Tickable.h"
-#include "core/singleton/ScopedSingletonIncludes.h"
+#include <core/GUIManager.h>
+#include <core/input/KeyBinderManager.h>
+#include <tools/interfaces/Tickable.h>
+#include <core/singleton/ScopedSingletonIncludes.h>
 
 /* this class implements a basic mouse-api
  * supported are mouse-clicks (left, right, mousewheel, ...) and scrolling
@@ -34,6 +34,11 @@
  *
  * to make it work, one has to add mouseapi in LINK_LIBRARIES in the file CMakeLists.txt of the level
  * see CMakeLists.txt in MouseAPIExample
+ *
+ * MouseAPI: C++ API to access Mouse
+ * MouseGametype: Enable Mouse Cursor & Prevent that each click kills Player if no spaceship is used
+ * MouseAPICursor: Internal API which implements cursor. Usable from custom Gametype (not necessary if MouseGametype is used):
+ *                 add "this->setHUDTemplate("MouseCursor");" in constructor of Gametype. (Or by inheritance)
  */
 
 namespace orxonox
@@ -95,8 +100,10 @@
     // true => MouseAPI has been activated, false => MouseAPI has not been activated
     bool active = false;
 
-    Ogre::PanelOverlayElement* cursor;
+    //true => allow ship-controller to get mouse input; Default: false; Gets reset after each transition from deactivated to activated
+    bool gameInputActivated = false;
 
+
 public:
 
     MouseAPI();
@@ -239,6 +246,17 @@
      * the function does nothing if MouseAPI is not active
      */
     void deactivate();
+
+    /*
+     * allow ship-controller to get mouse input
+     */
+    void activateGameInput();
+
+    /*
+     * do not allow ship-controller to get mouse input
+     * This is the default. This gets set after each transition from deactivated to activated
+     */
+    void deactivateGameInput();
 };
 }
 #endif // MOUSEAPI_H

Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapicursor.cc
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapicursor.cc	2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapicursor.cc	2019-05-16 12:27:40 UTC (rev 12377)
@@ -9,9 +9,7 @@
     RegisterObject(MouseAPICursor);
     cursor = static_cast<Ogre::PanelOverlayElement*>(Ogre::OverlayManager::getSingleton()
                                                           .createOverlayElement("Panel", "MouseAPI_cursor_" + getUniqueNumberString()));
-    cursor->setMaterialName(TextureGenerator::getMaterialName(
-                                      cursorname, Ogre::ColourValue::White));
-
+    updateCursor();
     overlay_->add2D(this->cursor);
     scale(Vector2(0.03,0.03));
     setVisible(true);
@@ -21,6 +19,8 @@
 {
     if(running)
         MouseAPI::getInstance().deactivate();
+    if(this->isInitialized())
+        Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->cursor);
 }
 
 void MouseAPICursor::XMLPort(ticpp::Element &xmlelement, XMLPort::Mode mode)
@@ -29,7 +29,7 @@
     running = true;
     SUPER(MouseAPICursor, XMLPort, xmlelement, mode);
     XMLPortParam(MouseAPICursor, "cursorShape", setCursorName, getCursorName,xmlelement, mode);
-    //XMLPortParam(MouseAPICursor, "cursorColor", setCursorColor, getCursorColor,xmlelement, mode);//TODO: ColoValue::setAsARGB()
+    XMLPortParam(MouseAPICursor, "cursorColor", setCursorColor, getCursorColor,xmlelement, mode);
 }
 
 void MouseAPICursor::tick(float dt)

Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapicursor.h
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapicursor.h	2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapicursor.h	2019-05-16 12:27:40 UTC (rev 12377)
@@ -1,13 +1,11 @@
 #ifndef MOUSEAPICURSOR_H
 #define MOUSEAPICURSOR_H
 #include <overlays/OrxonoxOverlay.h>
-#include "core/CoreIncludes.h"
-#include "tools/interfaces/Tickable.h"
-#include "overlays/OverlayGroup.h"
+#include <core/CoreIncludes.h>
+#include <tools/interfaces/Tickable.h>
 #include "mouseapi.h"
-#include "core/XMLPort.h"
+#include <core/XMLPort.h>
 
-
 #if OGRE_VERSION >= 0x010900
 #   include <Overlay/OgreOverlayManager.h>
 #   include <Overlay/OgrePanelOverlayElement.h>
@@ -16,8 +14,8 @@
 #   include <OgrePanelOverlayElement.h>
 #endif
 
-#include "tools/TextureGenerator.h"
-#include "util/StringUtils.h"
+#include <tools/TextureGenerator.h>
+#include <util/StringUtils.h>
 
 namespace orxonox{
 
@@ -24,24 +22,44 @@
 class MouseAPICursor: public OrxonoxOverlay, public Tickable
 {
 private:
+    //Pointer to the cursor overlay
     Ogre::PanelOverlayElement* cursor;
+    //Is Cursor activated?
     bool running = false;
+    //Name of the image-file used as the cursor shape
     std::string cursorname = "cursor.png";
+    //Color of the cursor
+    Vector3 color = {1,1,1};
 public:
     MouseAPICursor(Context* context);
     ~MouseAPICursor();
+    //Update cursor position
     virtual void tick(float dt) override;
+    //XMLPort: ability to set cursor shape & color
     virtual void XMLPort(ticpp::Element &xmlelement, XMLPort::Mode mode) override;
+    //Update cursol look (shape & color)
+    inline void updateCursor(){
+        cursor->setMaterialName(TextureGenerator::getMaterialName(
+                                                      cursorname, Ogre::ColourValue(color[0],color[1],color[2],1)));
+    }
     inline void setCursorName(const std::string& name)
     {
         cursorname = name;
-        cursor->setMaterialName(TextureGenerator::getMaterialName(
-                                                      cursorname, Ogre::ColourValue::White));
+        updateCursor();
     }
     inline std::string getCursorName(void) const
     {
         return cursorname;
     }
+    inline void setCursorColor(const Vector3& cl)
+    {
+        color = cl;
+        updateCursor();
+    }
+    inline Vector3 getCursorColor(void) const
+    {
+        return color;
+    }
 
 };
 

Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mousegametype.cc
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/mousegametype.cc	2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/mousegametype.cc	2019-05-16 12:27:40 UTC (rev 12377)
@@ -7,6 +7,7 @@
     RegisterObject(MouseGametype);
     player_ =nullptr;
 
+    //Activate the Mouse Cursor
     this->setHUDTemplate("MouseCursor");
 
 }
@@ -13,15 +14,7 @@
 
 void MouseGametype::start()
 {
-    bool temp = this->bForceSpawn_;
-    this->bForceSpawn_ = true;
-
-    // Call start for the parent class.
     Gametype::start();
-
-    // Reset the variable.
-    this->bForceSpawn_ = temp;
-
 }
 
 void MouseGametype::spawnPlayersIfRequested()
@@ -36,7 +29,7 @@
 void MouseGametype::spawnPlayer(PlayerInfo* player)
 {
     assert(player);
-
+    //Only Spawn once
     if(this->player_ == nullptr)
     {
         this->player_ = player;

Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mousegametype.h
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/mousegametype.h	2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/mousegametype.h	2019-05-16 12:27:40 UTC (rev 12377)
@@ -1,10 +1,10 @@
 #ifndef MOUSEGAMETYPE_H
 #define MOUSEGAMETYPE_H
-#include "gametypes/Gametype.h"
-#include "core/CoreIncludes.h"
-#include "infos/PlayerInfo.h"
+#include <gametypes/Gametype.h>
+#include <core/CoreIncludes.h>
+#include <infos/PlayerInfo.h>
 #include <core/input/InputState.h>
-#include "core/GUIManager.h"
+#include <core/GUIManager.h>
 
 namespace orxonox
 {

Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPIExample/mouseapiexample.h
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPIExample/mouseapiexample.h	2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPIExample/mouseapiexample.h	2019-05-16 12:27:40 UTC (rev 12377)
@@ -1,10 +1,10 @@
 #ifndef MOUSEAPIEXAMPLE_H
 #define MOUSEAPIEXAMPLE_H
 
-#include "core/XMLPort.h"
-#include "MouseAPI/mouseapi.h"
-#include "core/CoreIncludes.h"
-#include "worldentities/ControllableEntity.h"
+#include <core/XMLPort.h>
+#include <MouseAPI/mouseapi.h>
+#include <core/CoreIncludes.h>
+#include <worldentities/ControllableEntity.h>
 #include <list>
 
 namespace orxonox



More information about the Orxonox-commit mailing list