From 1bdc909555f3065a7a79b9c75e2fd828e2fc1e8c Mon Sep 17 00:00:00 2001 From: Benoit Bolsee Date: Fri, 4 Apr 2008 20:39:31 +0000 Subject: BGE bug [#4839] fixed: joystick keeps working after an overlay scene is removed --- .../gameengine/GameLogic/Joystick/SCA_Joystick.cpp | 28 ++++++++++++++++++++++ .../gameengine/GameLogic/Joystick/SCA_Joystick.h | 20 ++++++++++------ 2 files changed, 41 insertions(+), 7 deletions(-) (limited to 'source/gameengine/GameLogic/Joystick') diff --git a/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp b/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp index 071301514fb..79da15721f3 100644 --- a/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp +++ b/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp @@ -55,6 +55,34 @@ SCA_Joystick::~SCA_Joystick() 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() { diff --git a/source/gameengine/GameLogic/Joystick/SCA_Joystick.h b/source/gameengine/GameLogic/Joystick/SCA_Joystick.h index 2d2a713fe00..997e76615d3 100644 --- a/source/gameengine/GameLogic/Joystick/SCA_Joystick.h +++ b/source/gameengine/GameLogic/Joystick/SCA_Joystick.h @@ -71,12 +71,16 @@ /* * 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 { + static SCA_Joystick *m_instance; + static int m_refCount; class PrivateData; @@ -258,20 +262,22 @@ class SCA_Joystick int pGetHat(int direction); - - -public: - SCA_Joystick(); ~SCA_Joystick(); - - bool CreateJoystickDevice(void); void DestroyJoystickDevice(void); + +public: + + static SCA_Joystick *GetInstance(); + + void ReleaseInstance(); + + void HandleEvents(); /* -- cgit v1.2.3