BGE bug [#4839] fixed: joystick keeps working after an overlay scene is removed

This commit is contained in:
Benoit Bolsee 2008-04-04 20:39:31 +00:00
parent b46ef6ecb3
commit 1bdc909555
3 changed files with 43 additions and 11 deletions

@ -55,6 +55,34 @@ SCA_Joystick::~SCA_Joystick()
delete m_private; delete m_private;
} }
SCA_Joystick *SCA_Joystick::m_instance = NULL;
int SCA_Joystick::m_refCount = 0;
SCA_Joystick *SCA_Joystick::GetInstance()
{
if (m_instance == 0)
{
m_instance = new SCA_Joystick();
m_instance->CreateJoystickDevice();
m_refCount = 1;
}
else
{
m_refCount++;
}
return m_instance;
}
void SCA_Joystick::ReleaseInstance()
{
if (--m_refCount == 0)
{
DestroyJoystickDevice();
delete m_instance;
m_instance = NULL;
}
}
bool SCA_Joystick::CreateJoystickDevice() bool SCA_Joystick::CreateJoystickDevice()
{ {

@ -71,12 +71,16 @@
/* /*
* Basic Joystick class * Basic Joystick class
* I will make this class a singleton because there should be only one joystick
* even if there are more than one scene using it and count how many scene are using it.
* The underlying joystick should only be removed when the last scene is removed
*/ */
class SCA_Joystick class SCA_Joystick
{ {
static SCA_Joystick *m_instance;
static int m_refCount;
class PrivateData; class PrivateData;
@ -258,20 +262,22 @@ class SCA_Joystick
int pGetHat(int direction); int pGetHat(int direction);
public:
SCA_Joystick(); SCA_Joystick();
~SCA_Joystick(); ~SCA_Joystick();
bool CreateJoystickDevice(void); bool CreateJoystickDevice(void);
void DestroyJoystickDevice(void); void DestroyJoystickDevice(void);
public:
static SCA_Joystick *GetInstance();
void ReleaseInstance();
void HandleEvents(); void HandleEvents();
/* /*

@ -43,15 +43,13 @@ SCA_JoystickManager::SCA_JoystickManager(class SCA_LogicManager* logicmgr)
: SCA_EventManager(JOY_EVENTMGR), : SCA_EventManager(JOY_EVENTMGR),
m_logicmgr(logicmgr) m_logicmgr(logicmgr)
{ {
m_joystick = new SCA_Joystick(); m_joystick = SCA_Joystick::GetInstance();
m_joystick->CreateJoystickDevice();
} }
SCA_JoystickManager::~SCA_JoystickManager() SCA_JoystickManager::~SCA_JoystickManager()
{ {
m_joystick->DestroyJoystickDevice(); m_joystick->ReleaseInstance();
delete m_joystick;
} }