[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16319] trunk/blender/source: BGE patch approved: BGE Multiple Joysticks
Benoit Bolsee
benoit.bolsee at online.be
Sun Aug 31 20:42:58 CEST 2008
Revision: 16319
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16319
Author: ben2610
Date: 2008-08-31 20:42:58 +0200 (Sun, 31 Aug 2008)
Log Message:
-----------
BGE patch approved: BGE Multiple Joysticks
Modified Paths:
--------------
trunk/blender/source/blender/makesdna/DNA_sensor_types.h
trunk/blender/source/blender/src/buttons_logic.c
trunk/blender/source/gameengine/Converter/KX_ConvertSensors.cpp
trunk/blender/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp
trunk/blender/source/gameengine/GameLogic/Joystick/SCA_Joystick.h
trunk/blender/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h
trunk/blender/source/gameengine/GameLogic/SCA_JoystickManager.cpp
trunk/blender/source/gameengine/GameLogic/SCA_JoystickManager.h
trunk/blender/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
trunk/blender/source/gameengine/GameLogic/SCA_JoystickSensor.h
Modified: trunk/blender/source/blender/makesdna/DNA_sensor_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_sensor_types.h 2008-08-31 16:23:31 UTC (rev 16318)
+++ trunk/blender/source/blender/makesdna/DNA_sensor_types.h 2008-08-31 18:42:58 UTC (rev 16319)
@@ -164,7 +164,7 @@
typedef struct bJoystickSensor {
char name[32];
short type;
- short pad;
+ short joyindex;
int axis;
int axisf;
int button;
@@ -266,6 +266,7 @@
#define SENS_JOY_HAT_DIR 0
#define SENS_DELAY_REPEAT 1
-
+// should match JOYINDEX_MAX in SCA_JoystickDefines.h */
+#define SENS_JOY_MAXINDEX 8
#endif
Modified: trunk/blender/source/blender/src/buttons_logic.c
===================================================================
--- trunk/blender/source/blender/src/buttons_logic.c 2008-08-31 16:23:31 UTC (rev 16318)
+++ trunk/blender/source/blender/src/buttons_logic.c 2008-08-31 18:42:58 UTC (rev 16319)
@@ -1444,10 +1444,13 @@
draw_default_sensor_header(sens, block, xco, yco, width);
joy= sens->data;
-
+ uiDefButS(block, NUM, 1, "Index:", xco+10, yco-44, 0.6 * (width-120), 19,
+ &joy->joyindex, 0, SENS_JOY_MAXINDEX-1, 100, 0,
+ "Spesify which joystick to use");
+
str= "Type %t|Button %x0|Axis %x1|Hat%x2";
- uiDefButS(block, MENU, B_REDR, str, xco+10, yco-44, 0.6 * (width-20), 19,
+ uiDefButS(block, MENU, B_REDR, str, xco+87, yco-44, 0.6 * (width-150), 19,
&joy->type, 0, 31, 0, 0,
"The type of event this joystick sensor is triggered on.");
Modified: trunk/blender/source/gameengine/Converter/KX_ConvertSensors.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/KX_ConvertSensors.cpp 2008-08-31 16:23:31 UTC (rev 16318)
+++ trunk/blender/source/gameengine/Converter/KX_ConvertSensors.cpp 2008-08-31 18:42:58 UTC (rev 16319)
@@ -713,6 +713,7 @@
gamesensor = new SCA_JoystickSensor(
eventmgr,
gameobj,
+ bjoy->joyindex,
joysticktype,
axis,axisf,
prec,
Modified: trunk/blender/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp 2008-08-31 16:23:31 UTC (rev 16318)
+++ trunk/blender/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp 2008-08-31 18:42:58 UTC (rev 16319)
@@ -29,9 +29,9 @@
#include "SCA_Joystick.h"
#include "SCA_JoystickPrivate.h"
-
-SCA_Joystick::SCA_Joystick()
+SCA_Joystick::SCA_Joystick(short int index)
:
+ m_joyindex(index),
m_axis10(0),
m_axis11(0),
m_axis20(0),
@@ -52,50 +52,53 @@
delete m_private;
}
-SCA_Joystick *SCA_Joystick::m_instance = NULL;
+SCA_Joystick *SCA_Joystick::m_instance[JOYINDEX_MAX];
int SCA_Joystick::m_refCount = 0;
-SCA_Joystick *SCA_Joystick::GetInstance()
+SCA_Joystick *SCA_Joystick::GetInstance( short int joyindex )
{
- if (m_instance == 0)
+ if (joyindex < 0 || joyindex >= JOYINDEX_MAX) {
+ echo("Error-invalid joystick index: " << joyindex);
+ return NULL;
+ }
+
+ if (m_refCount == 0)
{
- m_instance = new SCA_Joystick();
- m_instance->CreateJoystickDevice();
+ int i;
+ // do this once only
+ if(SDL_InitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO ) == -1 ){
+ echo("Error-Initializing-SDL: " << SDL_GetError());
+ return NULL;
+ }
+ for (i=0; i<JOYINDEX_MAX; i++) {
+ m_instance[i] = new SCA_Joystick(i);
+ m_instance[i]->CreateJoystickDevice();
+ }
m_refCount = 1;
}
else
{
m_refCount++;
}
- return m_instance;
+ return m_instance[joyindex];
}
void SCA_Joystick::ReleaseInstance()
{
if (--m_refCount == 0)
{
- DestroyJoystickDevice();
- delete m_instance;
- m_instance = NULL;
+ int i;
+ for (i=0; i<JOYINDEX_MAX; i++) {
+ if (m_instance[i]) {
+ m_instance[i]->DestroyJoystickDevice();
+ delete m_instance[i];
+ }
+ m_instance[i]= NULL;
+ }
+ SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO );
}
}
-
-bool SCA_Joystick::CreateJoystickDevice()
-{
- bool init = false;
- init = pCreateJoystickDevice();
- return init;
-}
-
-
-void SCA_Joystick::DestroyJoystickDevice()
-{
- if(m_isinit)
- pDestroyJoystickDevice();
-}
-
-
void SCA_Joystick::HandleEvents()
{
if(m_isinit)
@@ -334,40 +337,34 @@
return -1;
}
-bool SCA_Joystick::pCreateJoystickDevice()
+bool SCA_Joystick::CreateJoystickDevice(void)
{
if(m_isinit == false){
- if(SDL_InitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO ) == -1 ){
- echo("Error-Initializing-SDL: " << SDL_GetError());
+ if (m_joyindex>=SDL_NumJoysticks()) {
+ // don't print a message, because this is done anyway
+ //echo("Joystick-Error: " << SDL_NumJoysticks() << " avaiable joystick(s)");
return false;
}
- if(SDL_NumJoysticks() > 0){
- for(int i=0; i<SDL_NumJoysticks();i++){
- m_private->m_joystick = SDL_JoystickOpen(i);
- SDL_JoystickEventState(SDL_ENABLE);
- m_numjoys = i;
- }
- echo("Joystick-initialized");
- m_isinit = true;
- return true;
- }else{
- echo("Joystick-Error: " << SDL_NumJoysticks() << " avaiable joystick(s)");
- return false;
- }
+
+ m_private->m_joystick = SDL_JoystickOpen(m_joyindex);
+ SDL_JoystickEventState(SDL_ENABLE);
+
+ echo("Joystick " << m_joyindex << " initialized");
+ m_isinit = true;
}
- return false;
+ return true;
}
-void SCA_Joystick::pDestroyJoystickDevice()
+void SCA_Joystick::DestroyJoystickDevice(void)
{
- echo("Closing-");
- for(int i=0; i<SDL_NumJoysticks(); i++){
- if(SDL_JoystickOpened(i)){
+ if (m_isinit){
+ if(SDL_JoystickOpened(m_joyindex)){
+ echo("Closing-joystick " << m_joyindex);
SDL_JoystickClose(m_private->m_joystick);
}
+ m_isinit = false;
}
- SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO );
}
Modified: trunk/blender/source/gameengine/GameLogic/Joystick/SCA_Joystick.h
===================================================================
--- trunk/blender/source/gameengine/GameLogic/Joystick/SCA_Joystick.h 2008-08-31 16:23:31 UTC (rev 16318)
+++ trunk/blender/source/gameengine/GameLogic/Joystick/SCA_Joystick.h 2008-08-31 18:42:58 UTC (rev 16319)
@@ -76,7 +76,7 @@
class SCA_Joystick
{
- static SCA_Joystick *m_instance;
+ static SCA_Joystick *m_instance[JOYINDEX_MAX];
static int m_refCount;
class PrivateData;
@@ -85,14 +85,6 @@
int m_joyindex;
- /*!
-
- * the number of avail joysticks
-
- */
-
- int m_numjoys;
-
/*
*support for 2 axes
@@ -185,7 +177,7 @@
*/
- bool pCreateJoystickDevice(void);
+ bool CreateJoystickDevice(void);
/*
@@ -193,7 +185,7 @@
*/
- void pDestroyJoystickDevice(void);
+ void DestroyJoystickDevice(void);
@@ -259,18 +251,13 @@
int pGetHat(int direction);
- SCA_Joystick();
+ SCA_Joystick(short int index);
~SCA_Joystick();
- bool CreateJoystickDevice(void);
-
- void DestroyJoystickDevice(void);
-
-
public:
- static SCA_Joystick *GetInstance();
+ static SCA_Joystick *GetInstance( short int joyindex );
void ReleaseInstance();
Modified: trunk/blender/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h
===================================================================
--- trunk/blender/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h 2008-08-31 16:23:31 UTC (rev 16318)
+++ trunk/blender/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h 2008-08-31 18:42:58 UTC (rev 16319)
@@ -38,6 +38,8 @@
#define echo(x) std::cout << x << std::endl;
#endif
+#define JOYINDEX_MAX 8
+
/* function callbacks */
#define HANDLE_AXISMOTION(fn) ((fn)(), 0L)
#define HANDLE_HATMOTION(fn) ((fn)(), 0L)
Modified: trunk/blender/source/gameengine/GameLogic/SCA_JoystickManager.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_JoystickManager.cpp 2008-08-31 16:23:31 UTC (rev 16318)
+++ trunk/blender/source/gameengine/GameLogic/SCA_JoystickManager.cpp 2008-08-31 18:42:58 UTC (rev 16319)
@@ -40,13 +40,20 @@
: SCA_EventManager(JOY_EVENTMGR),
m_logicmgr(logicmgr)
{
- m_joystick = SCA_Joystick::GetInstance();
+ int i;
+ for (i=0; i<JOYINDEX_MAX; i++) {
+ m_joystick[i] = SCA_Joystick::GetInstance( i );
+ }
+ //m_joystick = NULL;
}
SCA_JoystickManager::~SCA_JoystickManager()
{
- m_joystick->ReleaseInstance();
+ int i;
+ for (i=0; i<JOYINDEX_MAX; i++) {
+ m_joystick[i]->ReleaseInstance();
+ }
}
@@ -58,17 +65,17 @@
SCA_JoystickSensor* joysensor = (SCA_JoystickSensor*)(*it);
if(!joysensor->IsSuspended())
{
- m_joystick->HandleEvents();
+ m_joystick[joysensor->GetJoyIndex()]->HandleEvents();
joysensor->Activate(m_logicmgr, NULL);
}
}
}
-SCA_Joystick *SCA_JoystickManager::GetJoystickDevice()
+SCA_Joystick *SCA_JoystickManager::GetJoystickDevice( short int joyindex)
{
/*
*Return the instance of SCA_Joystick for use
*/
- return m_joystick;
+ return m_joystick[joyindex];
}
Modified: trunk/blender/source/gameengine/GameLogic/SCA_JoystickManager.h
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_JoystickManager.h 2008-08-31 16:23:31 UTC (rev 16318)
+++ trunk/blender/source/gameengine/GameLogic/SCA_JoystickManager.h 2008-08-31 18:42:58 UTC (rev 16319)
@@ -40,12 +40,12 @@
/**
* SDL Joystick Class Instance
*/
- SCA_Joystick *m_joystick;
+ SCA_Joystick *m_joystick[JOYINDEX_MAX];
public:
SCA_JoystickManager(class SCA_LogicManager* logicmgr);
virtual ~SCA_JoystickManager();
virtual void NextFrame(double curtime,double deltatime);
- SCA_Joystick* GetJoystickDevice(void);
+ SCA_Joystick* GetJoystickDevice(short int joyindex);
};
Modified: trunk/blender/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_JoystickSensor.cpp 2008-08-31 16:23:31 UTC (rev 16318)
+++ trunk/blender/source/gameengine/GameLogic/SCA_JoystickSensor.cpp 2008-08-31 18:42:58 UTC (rev 16319)
@@ -39,6 +39,7 @@
SCA_JoystickSensor::SCA_JoystickSensor(class SCA_JoystickManager* eventmgr,
SCA_IObject* gameobj,
+ short int joyindex,
short int joymode,
int axis, int axisf,int prec,
int button, int buttonf,
@@ -53,7 +54,8 @@
m_hat(hat),
m_hatf(hatf),
m_precision(prec),
- m_joymode(joymode)
+ m_joymode(joymode),
+ m_joyindex(joyindex)
{
/*
std::cout << " axis " << m_axis << std::endl;
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list