summaryrefslogtreecommitdiff
path: root/Runtime/Scripting/Backend/ScriptingInvocation.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-14 22:50:43 +0800
committerchai <chaifix@163.com>2019-08-14 22:50:43 +0800
commit15740faf9fe9fe4be08965098bbf2947e096aeeb (patch)
treea730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Scripting/Backend/ScriptingInvocation.h
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Scripting/Backend/ScriptingInvocation.h')
-rw-r--r--Runtime/Scripting/Backend/ScriptingInvocation.h73
1 files changed, 73 insertions, 0 deletions
diff --git a/Runtime/Scripting/Backend/ScriptingInvocation.h b/Runtime/Scripting/Backend/ScriptingInvocation.h
new file mode 100644
index 0000000..2bad02c
--- /dev/null
+++ b/Runtime/Scripting/Backend/ScriptingInvocation.h
@@ -0,0 +1,73 @@
+#ifndef _SCRIPTINGINVOCATION_H_
+#define _SCRIPTINGINVOCATION_H_
+
+#if ENABLE_SCRIPTING
+
+#include "ScriptingInvocationNoArgs.h"
+#include "ScriptingArguments.h"
+
+
+/// ScriptingInvocation invocation (scriptingMethod); // Slow alternative (Don't use this in runtime code) ScriptingInvocation invocation ("MyNameSpace", "MyClassName", "MyMethod");
+/// invocation.AddInt(5);
+/// invocation.Invoke (); // < you are certain that the bound method accepts those exact parameters
+/// invocation.InvokeChecked(); // < you cant guarantee that the bound method has the passed parameters
+
+/// By default logs the exception (Can be turned off via invocation.logException = false;)
+/// Parameters are setup AddInt, AddFloat, AddStruct functions below
+class ScriptingInvocation : public ScriptingInvocationNoArgs
+{
+public:
+ ScriptingInvocation();
+ ScriptingInvocation(ScriptingMethodPtr in_method);
+#if ENABLE_MONO || UNITY_WINRT
+ ScriptingInvocation(const char* namespaze, const char* klass, const char* name);
+ ScriptingInvocation(ScriptingClassPtr klass, const char* name);
+ ScriptingInvocation(BackendNativeMethod method);
+#endif
+
+ //convenience forwarders to arguments
+ void AddBoolean(bool value) { arguments.AddBoolean(value); }
+ void AddInt(int value) { arguments.AddInt(value); }
+ void AddFloat(float value) { arguments.AddFloat(value); }
+ void AddString(const char* str) { arguments.AddString(str); }
+ void AddString(std::string& str) { arguments.AddString(str); }
+ void AddObject(ScriptingObjectPtr scriptingObject) { arguments.AddObject(scriptingObject); }
+ void AddStruct(void* pointerToStruct) { arguments.AddStruct(pointerToStruct); }
+ void AddEnum(int value) { arguments.AddEnum(value); }
+ void AddArray(ScriptingArrayPtr arr) { arguments.AddArray(arr); }
+
+ void AdjustArgumentsToMatchMethod();
+
+ template<class T> T Invoke();
+ template<class T> T Invoke(ScriptingException**);
+ ScriptingObjectPtr Invoke();
+ ScriptingObjectPtr Invoke(ScriptingException**);
+ ScriptingObjectPtr Invoke(ScriptingExceptionPtr*, bool);
+
+ ScriptingArguments& Arguments() { return arguments; }
+protected:
+ ScriptingArguments arguments;
+ virtual bool Check();
+};
+
+
+#if ENABLE_MONO
+
+struct MonoObject;
+struct MonoException;
+class Object;
+struct MonoMethod;
+struct MonoClass;
+class MonoScript;
+
+MonoObject* CallStaticMonoMethod (const char* className, const char* methodName, void** parameters = NULL);
+MonoObject* CallStaticMonoMethod (const char* className, const char* methodName, void** parameters, MonoException** exception);
+MonoObject* CallStaticMonoMethod (const char* className, const char* nameSpace, const char* methodName, void** paramenters = NULL);
+MonoObject* CallStaticMonoMethod (const char* className, const char* nameSpace, const char* methodName, void** paramenters, MonoException** exception);
+MonoObject* CallStaticMonoMethod (MonoClass* klass , const char* methodName, void** parameters = NULL);
+MonoObject* CallStaticMonoMethod (MonoClass* klass , const char* methodName, void** parameters, MonoException** exception);
+#endif
+
+#endif
+
+#endif