1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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)
|