Browse Source

Clean up ScriptFile & ScriptInstance Execute() AngelScript bindings. Allow to call ScriptFile::Execute() without parameters.

Lasse Öörni 11 years ago
parent
commit
2cb66a1d36
1 changed files with 40 additions and 76 deletions
  1. 40 76
      Source/Urho3D/Script/ScriptAPI.cpp

+ 40 - 76
Source/Urho3D/Script/ScriptAPI.cpp

@@ -31,38 +31,32 @@ namespace Urho3D
 
 static bool ScriptFileExecute(const String& declaration, CScriptArray* srcParams, ScriptFile* ptr)
 {
-    if (!srcParams)
-        return false;
+    VariantVector destParams(srcParams ? srcParams->GetSize() : 0);
 
-    unsigned numParams = srcParams->GetSize();
-    VariantVector destParams(numParams);
-
-    for (unsigned i = 0; i < numParams; ++i)
-        destParams[i] = *(static_cast<Variant*>(srcParams->At(i)));
+    if (srcParams)
+    {
+        unsigned numParams = srcParams->GetSize();
+        for (unsigned i = 0; i < numParams; ++i)
+            destParams[i] = *(static_cast<Variant*>(srcParams->At(i)));
+    }
 
     return ptr->Execute(declaration, destParams);
 }
 
 static void ScriptFileDelayedExecute(float delay, bool repeat, const String& declaration, CScriptArray* srcParams, ScriptFile* ptr)
 {
-    if (!srcParams)
-        return;
+    VariantVector destParams(srcParams ? srcParams->GetSize() : 0);
 
-    unsigned numParams = srcParams->GetSize();
-    VariantVector destParams;
-    destParams.Resize(numParams);
-
-    for (unsigned i = 0; i < numParams; ++i)
-        destParams[i] = *(static_cast<Variant*>(srcParams->At(i)));
+    if (srcParams)
+    {
+        unsigned numParams = srcParams->GetSize();
+        for (unsigned i = 0; i < numParams; ++i)
+            destParams[i] = *(static_cast<Variant*>(srcParams->At(i)));
+    }
 
     ptr->DelayedExecute(delay, repeat, declaration, destParams);
 }
 
-static void ScriptFileDelayedExecuteNoParams(float delay, bool repeat, const String& declaration, ScriptFile* ptr)
-{
-    ptr->DelayedExecute(delay, repeat, declaration);
-}
-
 static asIScriptObject* NodeCreateScriptObjectWithFile(ScriptFile* file, const String& className, CreateMode mode, Node* ptr)
 {
     if (!file)
@@ -92,9 +86,8 @@ static asIScriptObject* NodeCreateScriptObjectWithFile(ScriptFile* file, const S
 static void RegisterScriptFile(asIScriptEngine* engine)
 {
     RegisterResource<ScriptFile>(engine, "ScriptFile");
-    engine->RegisterObjectMethod("ScriptFile", "bool Execute(const String&in, const Array<Variant>@+)", asFUNCTION(ScriptFileExecute), asCALL_CDECL_OBJLAST);
-    engine->RegisterObjectMethod("ScriptFile", "void DelayedExecute(float, bool, const String&in, const Array<Variant>@+)", asFUNCTION(ScriptFileDelayedExecute), asCALL_CDECL_OBJLAST);
-    engine->RegisterObjectMethod("ScriptFile", "void DelayedExecute(float, bool, const String&in)", asFUNCTION(ScriptFileDelayedExecuteNoParams), asCALL_CDECL_OBJLAST);
+    engine->RegisterObjectMethod("ScriptFile", "bool Execute(const String&in, const Array<Variant>@+ params = null)", asFUNCTION(ScriptFileExecute), asCALL_CDECL_OBJLAST);
+    engine->RegisterObjectMethod("ScriptFile", "void DelayedExecute(float, bool, const String&in, const Array<Variant>@+ params = null)", asFUNCTION(ScriptFileDelayedExecute), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("ScriptFile", "void ClearDelayedExecute(const String&in declaration = String())", asMETHOD(ScriptFile, ClearDelayedExecute), asCALL_THISCALL);
     engine->RegisterObjectMethod("ScriptFile", "bool get_compiled() const", asMETHOD(ScriptFile, IsCompiled), asCALL_THISCALL);
     engine->RegisterGlobalFunction("ScriptFile@+ get_scriptFile()", asFUNCTION(GetScriptContextFile), asCALL_CDECL);
@@ -146,44 +139,32 @@ asIScriptObject* NodeGetNamedScriptObject(const String& className, Node* ptr)
 
 static bool ScriptInstanceExecute(const String& declaration, CScriptArray* srcParams, ScriptInstance* ptr)
 {
-    if (!srcParams)
-        return false;
+    VariantVector destParams(srcParams ? srcParams->GetSize() : 0);
 
-    unsigned numParams = srcParams->GetSize();
-    VariantVector destParams;
-    destParams.Resize(numParams);
-
-    for (unsigned i = 0; i < numParams; ++i)
-        destParams[i] = *(static_cast<Variant*>(srcParams->At(i)));
+    if (srcParams)
+    {
+        unsigned numParams = srcParams->GetSize();
+        for (unsigned i = 0; i < numParams; ++i)
+            destParams[i] = *(static_cast<Variant*>(srcParams->At(i)));
+    }
 
     return ptr->Execute(declaration, destParams);
 }
 
-static bool ScriptInstanceExecuteNoParams(const String& declaration, ScriptInstance* ptr)
-{
-    return ptr->Execute(declaration);
-}
-
 static void ScriptInstanceDelayedExecute(float delay, bool repeat, const String& declaration, CScriptArray* srcParams, ScriptInstance* ptr)
 {
-    if (!srcParams)
-        return;
+    VariantVector destParams(srcParams ? srcParams->GetSize() : 0);
 
-    unsigned numParams = srcParams->GetSize();
-    VariantVector destParams;
-    destParams.Resize(numParams);
-
-    for (unsigned i = 0; i < numParams; ++i)
-        destParams[i] = *(static_cast<Variant*>(srcParams->At(i)));
+    if (srcParams)
+    {
+        unsigned numParams = srcParams->GetSize();
+        for (unsigned i = 0; i < numParams; ++i)
+            destParams[i] = *(static_cast<Variant*>(srcParams->At(i)));
+    }
 
     ptr->DelayedExecute(delay, repeat, declaration, destParams);
 }
 
-static void ScriptInstanceDelayedExecuteNoParams(float delay, bool repeat, const String& declaration, ScriptInstance* ptr)
-{
-    ptr->DelayedExecute(delay, repeat, declaration);
-}
-
 static ScriptInstance* GetSelf()
 {
     return GetScriptContextInstance();
@@ -191,37 +172,23 @@ static ScriptInstance* GetSelf()
 
 static void SelfDelayedExecute(float delay, bool repeat, const String& declaration, CScriptArray* srcParams)
 {
-    if (!srcParams)
-        return;
-    
-    unsigned numParams = srcParams->GetSize();
-    VariantVector destParams;
-    destParams.Resize(numParams);
+    VariantVector destParams(srcParams ? srcParams->GetSize() : 0);
 
-    for (unsigned i = 0; i < numParams; ++i)
-        destParams[i] = *(static_cast<Variant*>(srcParams->At(i)));
-
-    ScriptInstance* ptr = GetScriptContextInstance();
-    if (ptr)
-        ptr->DelayedExecute(delay, repeat, declaration, destParams);
-    else
+    if (srcParams)
     {
-        ScriptFile* file = GetScriptContextFile();
-        if (file)
-            file->DelayedExecute(delay, repeat, declaration, destParams);
+        unsigned numParams = srcParams->GetSize();
+        for (unsigned i = 0; i < numParams; ++i)
+            destParams[i] = *(static_cast<Variant*>(srcParams->At(i)));
     }
-}
 
-static void SelfDelayedExecuteNoParams(float delay, bool repeat, const String& declaration)
-{
     ScriptInstance* ptr = GetScriptContextInstance();
     if (ptr)
-        ptr->DelayedExecute(delay, repeat, declaration);
+        ptr->DelayedExecute(delay, repeat, declaration, destParams);
     else
     {
         ScriptFile* file = GetScriptContextFile();
         if (file)
-            file->DelayedExecute(delay, repeat, declaration);
+            file->DelayedExecute(delay, repeat, declaration, destParams);
     }
 }
 
@@ -268,10 +235,8 @@ static void RegisterScriptInstance(asIScriptEngine* engine)
 
     RegisterComponent<ScriptInstance>(engine, "ScriptInstance");
     engine->RegisterObjectMethod("ScriptInstance", "bool CreateObject(ScriptFile@+, const String&in)", asMETHODPR(ScriptInstance, CreateObject, (ScriptFile*, const String&), bool), asCALL_THISCALL);
-    engine->RegisterObjectMethod("ScriptInstance", "bool Execute(const String&in, const Array<Variant>@+)", asFUNCTION(ScriptInstanceExecute), asCALL_CDECL_OBJLAST);
-    engine->RegisterObjectMethod("ScriptInstance", "bool Execute(const String&in)", asFUNCTION(ScriptInstanceExecuteNoParams), asCALL_CDECL_OBJLAST);
-    engine->RegisterObjectMethod("ScriptInstance", "void DelayedExecute(float, bool, const String&in, const Array<Variant>@+)", asFUNCTION(ScriptInstanceDelayedExecute), asCALL_CDECL_OBJLAST);
-    engine->RegisterObjectMethod("ScriptInstance", "void DelayedExecute(float, bool, const String&in)", asFUNCTION(ScriptInstanceDelayedExecuteNoParams), asCALL_CDECL_OBJLAST);
+    engine->RegisterObjectMethod("ScriptInstance", "bool Execute(const String&in, const Array<Variant>@+ params = null)", asFUNCTION(ScriptInstanceExecute), asCALL_CDECL_OBJLAST);
+    engine->RegisterObjectMethod("ScriptInstance", "void DelayedExecute(float, bool, const String&in, const Array<Variant>@+ params = null)", asFUNCTION(ScriptInstanceDelayedExecute), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("ScriptInstance", "void ClearDelayedExecute(const String&in declaration = String())", asMETHOD(ScriptInstance, ClearDelayedExecute), asCALL_THISCALL);
     engine->RegisterObjectMethod("ScriptInstance", "void set_scriptFile(ScriptFile@+)", asMETHOD(ScriptInstance, SetScriptFile), asCALL_THISCALL);
     engine->RegisterObjectMethod("ScriptInstance", "ScriptFile@+ get_scriptFile() const", asMETHOD(ScriptInstance, GetScriptFile), asCALL_THISCALL);
@@ -282,8 +247,7 @@ static void RegisterScriptInstance(asIScriptEngine* engine)
 
     // Register convenience functions for controlling self, similar to event sending
     engine->RegisterGlobalFunction("void MarkNetworkUpdate()", asFUNCTION(SelfMarkNetworkUpdate), asCALL_CDECL);
-    engine->RegisterGlobalFunction("void DelayedExecute(float, bool, const String&in, const Array<Variant>@+)", asFUNCTION(SelfDelayedExecute), asCALL_CDECL);
-    engine->RegisterGlobalFunction("void DelayedExecute(float, bool, const String&in)", asFUNCTION(SelfDelayedExecuteNoParams), asCALL_CDECL);
+    engine->RegisterGlobalFunction("void DelayedExecute(float, bool, const String&in, const Array<Variant>@+ params = null)", asFUNCTION(SelfDelayedExecute), asCALL_CDECL);
     engine->RegisterGlobalFunction("void ClearDelayedExecute(const String&in declaration = String())", asFUNCTION(SelfClearDelayedExecute), asCALL_CDECL);
     engine->RegisterGlobalFunction("void Remove()", asFUNCTION(SelfRemove), asCALL_CDECL);
 }