Browse Source

Cleaned up joystick code. Automatically open the joystick when accessed.
Added String::EMPTY. Removed duplicate empty strings from different libraries.

Lasse Öörni 13 years ago
parent
commit
c96f9e72dc

+ 2 - 0
Engine/Container/Str.cpp

@@ -30,6 +30,8 @@
 
 char String::endZero = 0;
 
+const String String::EMPTY;
+
 String::String(const WString& str) :
     length_(0),
     capacity_(0),

+ 2 - 0
Engine/Container/Str.h

@@ -419,6 +419,8 @@ public:
     static const unsigned NPOS = 0xffffffff;
     /// Initial dynamic allocation size.
     static const unsigned MIN_CAPACITY = 8;
+    /// Empty string.
+    static const String EMPTY;
     
 private:
     /// Move a range of characters within the string.

+ 0 - 1
Engine/Core/Variant.cpp

@@ -28,7 +28,6 @@
 #include <cstring>
 
 const Variant Variant::EMPTY;
-const String Variant::emptyString;
 const PODVector<unsigned char> Variant::emptyBuffer;
 const ResourceRef Variant::emptyResourceRef;
 const ResourceRefList Variant::emptyResourceRefList;

+ 1 - 3
Engine/Core/Variant.h

@@ -793,7 +793,7 @@ public:
     const String& GetString() const
     {
         if (type_ != VAR_STRING)
-            return emptyString;
+            return String::EMPTY;
         return *reinterpret_cast<const String*>(&value_);
     }
     
@@ -873,8 +873,6 @@ private:
     /// Variant value.
     VariantValue value_;
     
-    /// Empty string.
-    static const String emptyString;
     /// Empty buffer.
     static const PODVector<unsigned char> emptyBuffer;
     /// Empty resource reference.

+ 1 - 2
Engine/Engine/Console.cpp

@@ -41,7 +41,6 @@
 
 static const int DEFAULT_CONSOLE_ROWS = 16;
 static const int DEFAULT_HISTORY_SIZE = 16;
-static const String noRow;
 
 OBJECTTYPESTATIC(Console);
 
@@ -167,7 +166,7 @@ bool Console::IsVisible() const
 
 const String& Console::GetHistoryRow(unsigned index) const
 {
-    return index < history_.Size() ? history_[index] : noRow;
+    return index < history_.Size() ? history_[index] : String::EMPTY;
 }
 
 void Console::HandleTextFinished(StringHash eventType, VariantMap& eventData)

+ 2 - 2
Engine/Engine/InputAPI.cpp

@@ -157,8 +157,8 @@ static void RegisterInput(asIScriptEngine* engine)
     engine->RegisterObjectMethod("Input", "uint get_numTouches() const", asMETHOD(Input, GetNumTouches), asCALL_THISCALL);
     engine->RegisterObjectMethod("Input", "TouchState@+ get_touches(uint) const", asMETHOD(Input, GetTouch), asCALL_THISCALL);
     engine->RegisterObjectMethod("Input", "uint get_numJoysticks() const", asMETHOD(Input, GetNumJoysticks), asCALL_THISCALL);
-    engine->RegisterObjectMethod("Input", "String get_joystickNames(uint) const", asMETHOD(Input, GetJoystickName), asCALL_THISCALL);
-    engine->RegisterObjectMethod("Input", "JoystickState@+ get_joysticks(uint) const", asMETHOD(Input, GetJoystick), asCALL_THISCALL);
+    engine->RegisterObjectMethod("Input", "const String& get_joystickNames(uint) const", asMETHOD(Input, GetJoystickName), asCALL_THISCALL);
+    engine->RegisterObjectMethod("Input", "JoystickState@+ get_joysticks(uint)", asMETHOD(Input, GetJoystick), asCALL_THISCALL);
     engine->RegisterObjectMethod("Input", "bool get_active() const", asMETHOD(Input, IsActive), asCALL_THISCALL);
     engine->RegisterObjectMethod("Input", "bool get_minimized() const", asMETHOD(Input, IsMinimized), asCALL_THISCALL);
     engine->RegisterGlobalFunction("Input@+ get_input()", asFUNCTION(GetInput), asCALL_CDECL);

+ 0 - 2
Engine/Engine/ScriptAPI.cpp

@@ -27,8 +27,6 @@
 #include "ScriptAPI.h"
 #include "ScriptFile.h"
 
-static const String noClassName;
-
 static bool ScriptFileExecute(const String& declaration, CScriptArray* srcParams, ScriptFile* ptr)
 {
     if (!srcParams)

+ 1 - 3
Engine/Graphics/OpenGL/OGLGraphics.cpp

@@ -117,8 +117,6 @@ static const unsigned glStencilOps[] =
 
 static unsigned numInstances = 0;
 
-static const String noParameter;
-
 static const unsigned MAX_FRAMEBUFFER_AGE = 2000;
 
 OBJECTTYPESTATIC(Graphics);
@@ -1650,7 +1648,7 @@ const String& Graphics::GetTextureUnitName(TextureUnit unit)
         if (i->second_ == unit)
             return i->first_;
     }
-    return noParameter;
+    return String::EMPTY;
 }
 
 Texture* Graphics::GetTexture(unsigned index) const

+ 1 - 3
Engine/Graphics/PostProcess.cpp

@@ -31,8 +31,6 @@
 
 #include "DebugNew.h"
 
-static const String emptyName;
-
 TextureUnit ParseTextureUnitName(const String& name);
 
 PostProcessPass::PostProcessPass()
@@ -89,7 +87,7 @@ SharedPtr<PostProcessPass> PostProcessPass::Clone()
 
 const String& PostProcessPass::GetTexture(TextureUnit unit) const
 {
-    return unit < MAX_MATERIAL_TEXTURE_UNITS ? textureNames_[unit] : emptyName;
+    return unit < MAX_MATERIAL_TEXTURE_UNITS ? textureNames_[unit] : String::EMPTY;
 }
 
 const Vector4& PostProcessPass::GetShaderParameter(const String& name) const

+ 1 - 2
Engine/IO/Deserializer.cpp

@@ -26,7 +26,6 @@
 
 #include "DebugNew.h"
 
-static const String noName;
 static const float invQ = 1.0f / 32767.0f;
 
 Deserializer::Deserializer() :
@@ -47,7 +46,7 @@ Deserializer::~Deserializer()
 
 const String& Deserializer::GetName() const
 {
-    return noName;
+    return String::EMPTY;
 }
 
 unsigned Deserializer::GetChecksum()

+ 23 - 13
Engine/Input/Input.cpp

@@ -196,14 +196,18 @@ void Input::SetToggleFullscreen(bool enable)
 
 bool Input::OpenJoystick(unsigned index)
 {
+    if (index >= joysticks_.Size())
+        return false;
+    
+    // Check if already opened
+    if (joysticks_[index].joystick_)
+        return true;
+    
     MutexLock lock(GetStaticMutex());
     
     SDL_Joystick* joystick = SDL_JoystickOpen(index);
     if (joystick)
     {
-        if (index <= joysticks_.Size())
-            joysticks_.Resize(index + 1);
-        
         JoystickState& state = joysticks_[index];
         state.joystick_ = joystick;
         state.buttons_.Resize(SDL_JoystickNumButtons(joystick));
@@ -312,23 +316,24 @@ TouchState* Input::GetTouch(unsigned index) const
     return 0;
 }
 
-unsigned Input::GetNumJoysticks() const
+const String& Input::GetJoystickName(unsigned index) const
 {
-    return SDL_NumJoysticks();
-}
-
-String Input::GetJoystickName(unsigned index) const
-{
-    if (index < GetNumJoysticks())
-        return String(SDL_JoystickName(index));
+    if (index < joysticks_.Size())
+        return joysticks_[index].name_;
     else
-        return String();
+        return String::EMPTY;
 }
 
-JoystickState* Input::GetJoystick(unsigned index) const
+JoystickState* Input::GetJoystick(unsigned index)
 {
     if (index < joysticks_.Size())
+    {
+        // If necessary, automatically open the joystick first
+        if (!joysticks_[index].joystick_)
+            OpenJoystick(index);
+        
         return const_cast<JoystickState*>(&joysticks_[index]);
+    }
     else
         return 0;
 }
@@ -362,6 +367,11 @@ void Input::Initialize()
         inputInstances[windowID_] = this;
     }
     
+    // Initialize joysticks
+    joysticks_.Resize(SDL_NumJoysticks());
+    for (unsigned i = 0; i < joysticks_.Size(); ++i)
+        joysticks_[i].name_ = SDL_JoystickName(i);
+    
     LOGINFO("Initialized input");
 }
 

+ 10 - 4
Engine/Input/Input.h

@@ -48,6 +48,12 @@ struct TouchState
 /// Input state for a joystick.
 struct JoystickState
 {
+    /// Construct with defaults.
+    JoystickState() :
+        joystick_(0)
+    {
+    }
+    
     /// Return number of buttons.
     unsigned GetNumButtons() const { return buttons_.Size(); }
     /// Return number of axes.
@@ -152,11 +158,11 @@ public:
     /// Return active finger touch by index.
     TouchState* GetTouch(unsigned index) const;
     /// Return number of connected joysticks.
-    unsigned GetNumJoysticks() const;
+    unsigned GetNumJoysticks() const { return joysticks_.Size(); }
     /// Return joystick name by index.
-    String GetJoystickName(unsigned index) const;
-    /// Return joystick state by index.
-    JoystickState* GetJoystick(unsigned index) const;
+    const String& GetJoystickName(unsigned index) const;
+    /// Return joystick state by index. Automatically open if not opened yet.
+    JoystickState* GetJoystick(unsigned index);
     /// Return whether fullscreen toggle is enabled.
     bool GetToggleFullscreen() const { return toggleFullscreen_; }
     /// Return whether application window is active.

+ 1 - 2
Engine/Network/Connection.cpp

@@ -45,7 +45,6 @@
 #include "DebugNew.h"
 
 static const int STATS_INTERVAL_MSEC = 2000;
-static const String noName;
 
 PackageDownload::PackageDownload() :
     totalFragments_(0),
@@ -968,7 +967,7 @@ const String& Connection::GetDownloadName() const
         if (i->second_.initiated_)
             return i->second_.name_;
     }
-    return noName;
+    return String::EMPTY;
 }
 
 float Connection::GetDownloadProgress() const

+ 1 - 2
Engine/Resource/ResourceCache.cpp

@@ -53,7 +53,6 @@ static const String checkDirs[] = {
     ""
 };
 
-static const String noName;
 static const SharedPtr<Resource> noResource;
 
 OBJECTTYPESTATIC(ResourceCache);
@@ -501,7 +500,7 @@ const String& ResourceCache::GetResourceName(StringHash nameHash) const
 {
     HashMap<StringHash, String>::ConstIterator i = hashToName_.Find(nameHash);
     if (i == hashToName_.End())
-        return noName;
+        return String::EMPTY;
     else
         return i->second_;
 }

+ 1 - 2
Engine/Scene/Scene.cpp

@@ -42,7 +42,6 @@ static const int ASYNC_LOAD_MIN_FPS = 30;
 static const int ASYNC_LOAD_MAX_MSEC = (int)(1000.0f / ASYNC_LOAD_MIN_FPS);
 static const float DEFAULT_SMOOTHING_CONSTANT = 50.0f;
 static const float DEFAULT_SNAP_THRESHOLD = 5.0f;
-static const String emptyVarName;
 
 OBJECTTYPESTATIC(Scene);
 
@@ -460,7 +459,7 @@ float Scene::GetAsyncProgress() const
 const String& Scene::GetVarName(ShortStringHash hash) const
 {
     HashMap<ShortStringHash, String>::ConstIterator i = varNames_.Find(hash);
-    return i != varNames_.End() ? i->second_ : emptyVarName;
+    return i != varNames_.End() ? i->second_ : String::EMPTY;
 }
 
 void Scene::Update(float timeStep)

+ 2 - 4
Engine/UI/FileSelector.cpp

@@ -39,8 +39,6 @@
 
 #include "DebugNew.h"
 
-static const String emptyFilter;
-
 static bool CompareEntries(const FileSelectorEntry& lhs, const FileSelectorEntry& rhs)
 {
     if (lhs.directory_ && !rhs.directory_)
@@ -292,8 +290,8 @@ const String& FileSelector::GetFilter() const
     Text* selectedFilter = static_cast<Text*>(filterList_->GetSelectedItem());
     if (selectedFilter)
         return selectedFilter->GetText();
-    
-    return emptyFilter;
+    else
+        return String::EMPTY;
 }
 
 unsigned FileSelector::GetFilterIndex() const