[Orxonox-commit 940] r5663 - code/branches/resource2/src/core/input

rgrieder at orxonox.net rgrieder at orxonox.net
Wed Aug 19 21:30:05 CEST 2009


Author: rgrieder
Date: 2009-08-19 21:30:05 +0200 (Wed, 19 Aug 2009)
New Revision: 5663

Modified:
   code/branches/resource2/src/core/input/Button.cc
   code/branches/resource2/src/core/input/KeyBinder.cc
   code/branches/resource2/src/core/input/KeyBinder.h
   code/branches/resource2/src/core/input/KeyDetector.cc
Log:
Fixed a known bug that occurred when reloading the inputmanager with a new joy stick plugged in.

Modified: code/branches/resource2/src/core/input/Button.cc
===================================================================
--- code/branches/resource2/src/core/input/Button.cc	2009-08-19 10:27:59 UTC (rev 5662)
+++ code/branches/resource2/src/core/input/Button.cc	2009-08-19 19:30:05 UTC (rev 5663)
@@ -58,7 +58,6 @@
         nCommands_[0]=0;
         nCommands_[1]=0;
         nCommands_[2]=0;
-        this->configContainer_ = 0;
     }
 
     Button::~Button()

Modified: code/branches/resource2/src/core/input/KeyBinder.cc
===================================================================
--- code/branches/resource2/src/core/input/KeyBinder.cc	2009-08-19 10:27:59 UTC (rev 5662)
+++ code/branches/resource2/src/core/input/KeyBinder.cc	2009-08-19 19:30:05 UTC (rev 5663)
@@ -55,9 +55,6 @@
         mousePosition_[0] = 0;
         mousePosition_[1] = 0;
 
-        joyStickButtons_.reserve(1000);
-        joyStickAxes_.reserve(1000);
-
         RegisterRootObject(KeyBinder);
 
         // intialise all buttons and half axes to avoid creating everything with 'new'
@@ -166,9 +163,9 @@
             for (unsigned int iDev = oldValue; iDev < joySticks_.size(); ++iDev)
             {
                 for (unsigned int i = 0; i < JoyStickButtonCode::numberOfButtons; ++i)
-                    joyStickButtons_[iDev][i].readConfigValue(this->configFile_);
+                    (*joyStickButtons_[iDev])[i].readConfigValue(this->configFile_);
                 for (unsigned int i = 0; i < JoyStickAxisCode::numberOfAxes * 2; ++i)
-                    joyStickAxes_[iDev][i].readConfigValue(this->configFile_);
+                    (*joyStickAxes_[iDev])[i].readConfigValue(this->configFile_);
             }
         }
 
@@ -178,6 +175,11 @@
 
     void KeyBinder::initialiseJoyStickBindings()
     {
+        while (joyStickAxes_.size() < joySticks_.size())
+            joyStickAxes_.push_back(shared_ptr<JoyStickAxisVector>(new JoyStickAxisVector()));
+        while (joyStickButtons_.size() < joySticks_.size())
+            joyStickButtons_.push_back(shared_ptr<JoyStickButtonVector>(new JoyStickButtonVector()));
+        // For the case the new size is smaller
         this->joyStickAxes_.resize(joySticks_.size());
         this->joyStickButtons_.resize(joySticks_.size());
 
@@ -188,20 +190,20 @@
             // joy stick buttons
             for (unsigned int i = 0; i < JoyStickButtonCode::numberOfButtons; i++)
             {
-                joyStickButtons_[iDev][i].name_ = JoyStickButtonCode::ByString[i];
-                joyStickButtons_[iDev][i].paramCommandBuffer_ = &paramCommandBuffer_;
-                joyStickButtons_[iDev][i].groupName_ = "JoyStickButtons_" + deviceName;
+                (*joyStickButtons_[iDev])[i].name_ = JoyStickButtonCode::ByString[i];
+                (*joyStickButtons_[iDev])[i].paramCommandBuffer_ = &paramCommandBuffer_;
+                (*joyStickButtons_[iDev])[i].groupName_ = "JoyStickButtons_" + deviceName;
             }
             // joy stick axes
             for (unsigned int i = 0; i < JoyStickAxisCode::numberOfAxes * 2; i++)
             {
-                joyStickAxes_[iDev][i].name_ = JoyStickAxisCode::ByString[i / 2];
+                (*joyStickAxes_[iDev])[i].name_ = JoyStickAxisCode::ByString[i / 2];
                 if (i & 1)
-                    joyStickAxes_[iDev][i].name_ += "Pos";
+                    (*joyStickAxes_[iDev])[i].name_ += "Pos";
                 else
-                    joyStickAxes_[iDev][i].name_ += "Neg";
-                joyStickAxes_[iDev][i].paramCommandBuffer_ = &paramCommandBuffer_;
-                joyStickAxes_[iDev][i].groupName_ = "JoyStickAxes_" + deviceName;
+                    (*joyStickAxes_[iDev])[i].name_ += "Neg";
+                (*joyStickAxes_[iDev])[i].paramCommandBuffer_ = &paramCommandBuffer_;
+                (*joyStickAxes_[iDev])[i].groupName_ = "JoyStickAxes_" + deviceName;
             }
         }
     }
@@ -225,11 +227,11 @@
         for (unsigned int iDev = 0; iDev < joySticks_.size(); iDev++)
         {
             for (unsigned int i = 0; i < JoyStickButtonCode::numberOfButtons; i++)
-                allButtons_[joyStickButtons_[iDev][i].groupName_ + "." + joyStickButtons_[iDev][i].name_] = &(joyStickButtons_[iDev][i]);
+                allButtons_[(*joyStickButtons_[iDev])[i].groupName_ + "." + (*joyStickButtons_[iDev])[i].name_] = &((*joyStickButtons_[iDev])[i]);
             for (unsigned int i = 0; i < JoyStickAxisCode::numberOfAxes * 2; i++)
             {
-                allButtons_[joyStickAxes_[iDev][i].groupName_ + "." + joyStickAxes_[iDev][i].name_] = &(joyStickAxes_[iDev][i]);
-                allHalfAxes_.push_back(&(joyStickAxes_[iDev][i]));
+                allButtons_[(*joyStickAxes_[iDev])[i].groupName_ + "." + (*joyStickAxes_[iDev])[i].name_] = &((*joyStickAxes_[iDev])[i]);
+                allHalfAxes_.push_back(&((*joyStickAxes_[iDev])[i]));
             }
         }
     }
@@ -302,8 +304,8 @@
         {
             for (unsigned int i = 0; i < JoyStickAxisCode::numberOfAxes * 2; i++)
             {
-                joyStickAxes_[iDev][i].absVal_ = 0.0f;
-                joyStickAxes_[iDev][i].relVal_ = 0.0f;
+                (*joyStickAxes_[iDev])[i].absVal_ = 0.0f;
+                (*joyStickAxes_[iDev])[i].relVal_ = 0.0f;
             }
         }
     }
@@ -365,7 +367,7 @@
     {
         for (unsigned int i = 0; i < JoyStickAxisCode::numberOfAxes * 2; i++)
         {
-            tickHalfAxis(joyStickAxes_[joyStick][i]);
+            tickHalfAxis((*joyStickAxes_[joyStick])[i]);
         }
     }
 
@@ -480,7 +482,7 @@
     void KeyBinder::axisMoved(unsigned int device, unsigned int axisID, float value)
     {
         int i = axisID * 2;
-        JoyStickAxisVector& axis = joyStickAxes_[device];
+        JoyStickAxisVector& axis = *joyStickAxes_[device];
         if (value < 0)
         {
             axis[i].absVal_ = -value;

Modified: code/branches/resource2/src/core/input/KeyBinder.h
===================================================================
--- code/branches/resource2/src/core/input/KeyBinder.h	2009-08-19 10:27:59 UTC (rev 5662)
+++ code/branches/resource2/src/core/input/KeyBinder.h	2009-08-19 19:30:05 UTC (rev 5663)
@@ -40,6 +40,7 @@
 #include <cassert>
 #include <string>
 #include <vector>
+#include <boost/shared_ptr.hpp>
 
 #include "InputHandler.h"
 #include "Button.h"
@@ -114,7 +115,7 @@
             Button buttons[JoyStickButtonCode::numberOfButtons];
         };
         //! Actual key bindings for joy stick buttons
-        std::vector<JoyStickButtonVector> joyStickButtons_;
+        std::vector<shared_ptr<JoyStickButtonVector> > joyStickButtons_;
         //! Helper class to use something like std:vector<HalfAxis[48]>
         struct JoyStickAxisVector
         {
@@ -122,7 +123,7 @@
             HalfAxis halfAxes[JoyStickAxisCode::numberOfAxes * 2];
         };
         //! Actual key bindings for joy stick axes (and sliders)
-        std::vector<JoyStickAxisVector> joyStickAxes_;
+        std::vector<shared_ptr<JoyStickAxisVector> > joyStickAxes_;
 
         //! Pointer map with all Buttons, including half axes
         std::map<std::string, Button*> allButtons_;
@@ -190,13 +191,13 @@
 
 
     inline void KeyBinder::buttonPressed (unsigned int device, JoyStickButtonCode::ByEnum button)
-    { joyStickButtons_[device][button].execute(KeybindMode::OnPress); }
+    { (*joyStickButtons_[device])[button].execute(KeybindMode::OnPress); }
 
     inline void KeyBinder::buttonReleased(unsigned int device, JoyStickButtonCode::ByEnum button)
-    { joyStickButtons_[device][button].execute(KeybindMode::OnRelease); }
+    { (*joyStickButtons_[device])[button].execute(KeybindMode::OnRelease); }
 
     inline void KeyBinder::buttonHeld    (unsigned int device, JoyStickButtonCode::ByEnum button)
-    { joyStickButtons_[device][button].execute(KeybindMode::OnHold); }
+    { (*joyStickButtons_[device])[button].execute(KeybindMode::OnHold); }
 
     inline void KeyBinder::allDevicesUpdated(float dt)
     {

Modified: code/branches/resource2/src/core/input/KeyDetector.cc
===================================================================
--- code/branches/resource2/src/core/input/KeyDetector.cc	2009-08-19 10:27:59 UTC (rev 5662)
+++ code/branches/resource2/src/core/input/KeyDetector.cc	2009-08-19 19:30:05 UTC (rev 5663)
@@ -69,6 +69,7 @@
     void KeyDetector::JoyStickQuantityChanged(const std::vector<JoyStick*>& joyStickList)
     {
         KeyBinder::JoyStickQuantityChanged(joyStickList);
-        setCallbackCommand(callbackCommand_);
+        if (!callbackCommand_.empty())
+            setCallbackCommand(callbackCommand_);
     }
 }




More information about the Orxonox-commit mailing list