[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_ = ¶mCommandBuffer_;
- joyStickButtons_[iDev][i].groupName_ = "JoyStickButtons_" + deviceName;
+ (*joyStickButtons_[iDev])[i].name_ = JoyStickButtonCode::ByString[i];
+ (*joyStickButtons_[iDev])[i].paramCommandBuffer_ = ¶mCommandBuffer_;
+ (*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_ = ¶mCommandBuffer_;
- joyStickAxes_[iDev][i].groupName_ = "JoyStickAxes_" + deviceName;
+ (*joyStickAxes_[iDev])[i].name_ += "Neg";
+ (*joyStickAxes_[iDev])[i].paramCommandBuffer_ = ¶mCommandBuffer_;
+ (*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