summaryrefslogtreecommitdiff
path: root/Runtime/Scripting/Backend/ScriptingArguments.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/ScriptingArguments.h
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Scripting/Backend/ScriptingArguments.h')
-rw-r--r--Runtime/Scripting/Backend/ScriptingArguments.h79
1 files changed, 79 insertions, 0 deletions
diff --git a/Runtime/Scripting/Backend/ScriptingArguments.h b/Runtime/Scripting/Backend/ScriptingArguments.h
new file mode 100644
index 0000000..9ea823f
--- /dev/null
+++ b/Runtime/Scripting/Backend/ScriptingArguments.h
@@ -0,0 +1,79 @@
+#ifndef _SCRIPTINGARGUMENTS_H_
+#define _SCRIPTINGARGUMENTS_H_
+
+#if ENABLE_SCRIPTING
+#include "ScriptingTypes.h"
+#include <string>
+#include "Runtime/Modules/ExportModules.h"
+
+
+struct EXPORT_COREMODULE ScriptingArguments
+{
+ enum Constants
+ {
+ MAXARGS=10
+ };
+
+ enum ArgType
+ {
+ ARGTYPE_BOOLEAN,
+ ARGTYPE_INT,
+ ARGTYPE_FLOAT,
+ ARGTYPE_STRING,
+ ARGTYPE_OBJECT,
+ ARGTYPE_STRUCT,
+ ARGTYPE_ARRAY,
+ ARGTYPE_ENUM
+ };
+
+ //this setup is kind of weird. some types of arguments just need to be stuffed in m_Arguments,
+ //however for ints and floats, instead of stuffing them in, mono actually excepts a pointer to one.
+ //to make it happy, we store the actual int in a field, and store a pointer to it in the ScriptingParam.
+ union
+ {
+ int ints[MAXARGS];
+ float floats[MAXARGS];
+ } m_PrimitiveStorage;
+
+#if UNITY_WINRT
+ Platform::Array<Platform::String^>^ m_StringArguments;
+ ScriptingParams m_Arguments[MAXARGS];
+#else
+ const void* m_Arguments[MAXARGS];
+#endif
+ int m_ArgumentTypes[MAXARGS];
+ int m_Count;
+
+ ScriptingArguments();
+
+ void AddBoolean(bool value);
+ void AddInt(int value);
+ void AddFloat(float value);
+ void AddString(const char* str);
+ void AddString(std::string& str);
+ void AddObject(ScriptingObjectPtr scriptingObject);
+ void AddStruct(void* pointerToStruct);
+ void AddEnum(int value);
+ void AddArray(ScriptingArrayPtr arr);
+
+ bool GetBooleanAt(int index);
+ int GetIntAt(int index);
+ float GetFloatAt(int index);
+ const void* GetStringAt(int index);
+ ScriptingObjectPtr GetObjectAt(int index);
+
+ void** InMonoFormat();
+
+ void AdjustArgumentsToMatchMethod(ScriptingMethodPtr method);
+ bool CheckArgumentsAgainstMethod(ScriptingMethodPtr method);
+#if UNITY_WINRT
+ ScriptingParamsPtr InMetroFormat();
+#endif
+
+ int GetTypeAt(int index);
+ int GetCount();
+};
+
+#endif
+
+#endif