blob: 960ae9602ff9810864e076ef55201c20d3f3dcdc (
plain)
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
|
#include "UnityPrefix.h"
#include "ModuleRegistration.h"
#include "LoadDylib.h"
#include "RegisterStaticallyLinkedModules.h"
#include "Runtime/Utilities/FileUtilities.h"
#include "Runtime/Utilities/PathNameUtility.h"
#if UNITY_WINRT
#include "PlatformDependent/MetroPlayer/MetroUtils.h"
#endif
enum { kMaxModuleCount = 10 };
static int gAvailableModuleCount = 0;
static ModuleRegistrationInfo gModuleRegistrationInfos[kMaxModuleCount];
void RegisterAllAvailableModuleClasses (ClassRegistrationContext& context)
{
RegisterAvailableModules ();
for(int i=0;i<gAvailableModuleCount;i++)
{
if (gModuleRegistrationInfos[i].registerClassesCallback != NULL)
gModuleRegistrationInfos[i].registerClassesCallback (context);
}
}
void RegisterAllAvailableModuleICalls ()
{
RegisterAvailableModules ();
for(int i=0;i<gAvailableModuleCount;i++)
{
if (gModuleRegistrationInfos[i].registerIcallsCallback != NULL)
gModuleRegistrationInfos[i].registerIcallsCallback ();
}
}
void RegisterModuleInfo(ModuleRegistrationInfo& info)
{
gModuleRegistrationInfos[gAvailableModuleCount] = info;
gAvailableModuleCount++;
// Bump up kMaxModuleCount if we have too many modules.
Assert(gAvailableModuleCount < kMaxModuleCount);
}
#if !UNITY_WP8
void RegisterModuleInDynamicLibrary (const char* dllName, const char* modulename)
{
std::string dllFullName = dllName;
#if WEBPLUG
ErrorString ("Dynamic module loading not implemented for web plug");
#elif UNITY_OSX
dllFullName = AppendPathName (GetApplicationPath (), "Contents/Frameworks/MacStandalonePlayer_"+dllFullName+".dylib");
#elif UNITY_WIN
dllFullName = "StandalonePlayer_"+dllFullName+".dll";
#elif UNITY_LINUX
dllFullName += "LinuxStandalonePlayer_"+dllFullName+".so";
#endif
std::string funcName("RegisterModule_");
funcName.append(modulename);
void (*registerModuleFunction)() = (void(*)())LoadAndLookupSymbol(dllFullName, funcName);
if (registerModuleFunction == NULL)
return;
registerModuleFunction();
}
#endif
static void RegisterDynamicallyLinkedModules()
{
//Work in progress:
// RegisterModuleInDynamicLibrary("GfxDeviceModule_Dynamic","GfxDevice");
// RegisterModuleInDynamicLibrary("TerrainModule_Dynamic","Terrain");
// RegisterModuleInDynamicLibrary("NavMeshModule_Dynamic","Navigation");
// RegisterModuleInDynamicLibrary("AnimationModule_Dynamic","Animation");
// RegisterModuleInDynamicLibrary("Dynamics2DModule_Dynamic","Physics2D");
// RegisterModuleInDynamicLibrary("PhysicsModule_Dynamic","Physics");
// RegisterModuleInDynamicLibrary("PhysicsEditorModule_Dynamic","PhysicsEditor");
}
void RegisterAvailableModules ()
{
if (gAvailableModuleCount != 0)
return;
RegisterStaticallyLinkedModules();
RegisterDynamicallyLinkedModules();
}
|