summaryrefslogtreecommitdiff
path: root/Runtime/Scripting/MonoManager_WinRT.cpp
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/MonoManager_WinRT.cpp
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Scripting/MonoManager_WinRT.cpp')
-rw-r--r--Runtime/Scripting/MonoManager_WinRT.cpp105
1 files changed, 105 insertions, 0 deletions
diff --git a/Runtime/Scripting/MonoManager_WinRT.cpp b/Runtime/Scripting/MonoManager_WinRT.cpp
new file mode 100644
index 0000000..7719478
--- /dev/null
+++ b/Runtime/Scripting/MonoManager_WinRT.cpp
@@ -0,0 +1,105 @@
+#include "UnityPrefix.h"
+
+#include "MonoManager_WinRT.h"
+#include "Runtime/Serialize/TransferFunctions/SerializeTransfer.h"
+#include "Runtime/Mono/MonoScript.h"
+#include "Runtime/BaseClasses/ManagerContext.h"
+#include "Runtime/Scripting/CommonScriptingClasses.h"
+#include "Runtime/Scripting/ScriptingUtility.h"
+#include "Runtime/Scripting/Backend/ScriptingBackendApi.h"
+
+#include "Runtime/Scripting/Backend/Metro/ScriptingTypeProvider_Metro.h"
+#include "Runtime/Scripting/Backend/Metro/ScriptingMethodFactory_Metro.h"
+
+#include "Runtime/Scripting/Backend/ScriptingMethodRegistry.h"
+
+#include "Runtime/Mono/MonoBehaviourSerialization_ByCodeGeneration.h"
+
+#include "PlatformDependent/MetroPlayer/MetroUtils.h"
+
+MonoManager::MonoManager (MemLabelId label, ObjectCreationMode mode)
+ : ScriptingManager(label, mode, UNITY_NEW( ScriptingTypeProvider_Metro(), kMemManager), UNITY_NEW( ScriptingMethodFactory_Metro(), kMemManager))
+{
+ METRO_DBG_MARK_TIME("MonoManager::ctor");
+ InputString data;
+ const char* managedAssemblies = "managedAssemblies.txt";
+ if (ReadStringFromFile(&data, PathToAbsolutePath(managedAssemblies)))
+ {
+ GetWinRTUtils()->LoadAssemblies(ConvertUtf8ToString(data.c_str()));
+ }
+ else
+ {
+ FatalErrorMsg("Failed to load %s", managedAssemblies);
+ }
+ METRO_DBG_MARK_TIME("MonoManager::FillCommonScriptingClasses begin...");
+ FillCommonScriptingClasses(m_CommonScriptingClasses);
+ METRO_DBG_MARK_TIME("MonoManager::FillCommonScriptingClasses end...");
+ SetupExceptionHandler();
+ SetupMarshalCallbacks();
+ void RegisterAllInternalCalls();
+ RegisterAllInternalCalls();
+
+# if ENABLE_SERIALIZATION_BY_CODEGENERATION
+
+ s_WinRTBridge->SetupSerializationReader(
+ (long long)(NativeExt_MonoBehaviourSerialization_ReaderAlign),
+ (long long)(NativeExt_MonoBehaviourSerialization_ReadBuffer),
+ (long long)(NativeExt_MonoBehaviourSerialization_ReadUnityEngineObject),
+ (long long)(NativeExt_MonoBehaviourSerialization_ReadGUIStyle),
+ (long long)(NativeExt_MonoBehaviourSerialization_ReadRectOffset),
+ (long long)(NativeExt_MonoBehaviourSerialization_ReadAnimationCurve),
+ (long long)(NativeExt_MonoBehaviourSerialization_ReadGradient));
+
+ s_WinRTBridge->SetupSerializationWriter(
+ (long long)(NativeExt_MonoBehaviourSerialization_WriterAlign),
+ (long long)(NativeExt_MonoBehaviourSerialization_WriteBuffer),
+ (long long)(NativeExt_MonoBehaviourSerialization_WriteUnityEngineObject),
+ (long long)(NativeExt_MonoBehaviourSerialization_WriteGUIStyle),
+ (long long)(NativeExt_MonoBehaviourSerialization_WriteRectOffset),
+ (long long)(NativeExt_MonoBehaviourSerialization_WriteAnimationCurve),
+ (long long)(NativeExt_MonoBehaviourSerialization_WriteGradient));
+
+ s_WinRTBridge->SetupSerializationRemapper(
+ (long long)(NativeExt_MonoBehaviourSerialization_GetNewInstanceToReplaceOldInstance));
+
+ ScriptingInvocation initManagedAnalysis(GetScriptingMethodRegistry().GetMethod("UnityEngine.Serialization","ManagedLivenessAnalysis","Init"));
+ initManagedAnalysis.Invoke();
+# endif
+ // It tries to get classes like LevelGameManager which doesn't exist in managed land, is this intended?
+ RebuildClassIDToScriptingClass();
+
+# if !ENABLE_WINRT_PINVOKE
+ METRO_DBG_MARK_TIME("MonoManager::SetupDelegates begin...");
+ GetWinRTUtils()->SetupDelegates();
+ METRO_DBG_MARK_TIME("MonoManager::SetupDelegates end...");
+# else
+ if (GetWinRTUtils()->IsPlatformInvokeSupported() == false)
+ FatalErrorMsg("WinRTBridge: Platform Invoke should be supported on this platform.");
+ if (UnityEngineDelegates::PlatformInvoke::IsSupported() == false)
+ FatalErrorMsg("UnityEngineDelegates: Platform Invoke should be supported on this platform.");
+# endif
+
+}
+
+MonoManager::~MonoManager ()
+{
+
+}
+
+template<class TransferFunction>
+void MonoManager::Transfer (TransferFunction& transfer)
+{
+ Super::Transfer (transfer);
+ transfer.SetVersion(2);
+ transfer.Transfer (m_MonoScriptManager.m_RuntimeScripts, "m_Scripts");
+
+ // ToDo: Temporary fix if we're deserializing for metro see MonoManager::Transfer function
+ std::vector<UnityStr> assemblyNames;
+ transfer.Transfer (assemblyNames, "m_AssemblyNames");
+}
+
+
+IMPLEMENT_OBJECT_SERIALIZE (MonoManager)
+IMPLEMENT_CLASS (MonoManager)
+GET_MANAGER (MonoManager)
+GET_MANAGER_PTR (MonoManager)