summaryrefslogtreecommitdiff
path: root/Runtime/Misc/ResourceManager.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/Misc/ResourceManager.cpp
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Misc/ResourceManager.cpp')
-rw-r--r--Runtime/Misc/ResourceManager.cpp1292
1 files changed, 1292 insertions, 0 deletions
diff --git a/Runtime/Misc/ResourceManager.cpp b/Runtime/Misc/ResourceManager.cpp
new file mode 100644
index 0000000..c30dc38
--- /dev/null
+++ b/Runtime/Misc/ResourceManager.cpp
@@ -0,0 +1,1292 @@
+#include "UnityPrefix.h"
+#include "ResourceManager.h"
+#include "Runtime/Serialize/PersistentManager.h"
+#include "Runtime/Shaders/Shader.h"
+#include "Runtime/Shaders/ShaderNameRegistry.h"
+#include "Runtime/Utilities/Word.h"
+#include "Runtime/Shaders/Material.h"
+#include "Runtime/BaseClasses/ManagerContext.h"
+#include "Runtime/Utilities/Argv.h"
+#include "Runtime/Utilities/ArrayUtility.h"
+#include "Runtime/Utilities/InitializeAndCleanup.h"
+#include "Configuration/UnityConfigureOther.h"
+#include "Runtime/Misc/BuildSettings.h"
+#if ENABLE_MONO
+#include "Runtime/Mono/MonoScript.h"
+#include "Runtime/Mono/MonoManager.h"
+#endif
+#if UNITY_EDITOR
+#include "Editor/Src/GUIDPersistentManager.h"
+#include "Editor/Src/AssetPipeline/AssetDatabase.h"
+#include "Editor/Src/AssetPipeline/MonoCompilationPipeline.h"
+#include <vector>
+#include "Runtime/Utilities/FileUtilities.h"
+#include "Editor/Src/Graphs/GraphUtils.h"
+#include "Editor/Src/EditorModules.h"
+#include "ResourceManagerGUIDs.h"
+#endif
+
+using namespace std;
+
+const char* kResourcePath = "Library/unity default resources";
+const char* kOldWebResourcePath = "Library/unity_web_old";
+
+static bool s_AreResourcesInitialized;
+
+#if UNITY_EDITOR
+static const char* kDefaultResourcesSource = "Resources/unity default resources";
+
+static const char* kEditorDefaultResourcesSource = "Resources/unity editor resources";
+const char* kEditorResourcePath = "Library/unity editor resources";
+const char* kDefaultExtraResourcesPath = "Resources/unity_builtin_extra";
+
+static BuiltinResourceManager* gBuiltinExtraResourceManager;
+
+static void RegisterBuiltinEditorScript (int instanceID, const char* className);
+static void RegisterBuiltinEditorInternalScript (int instanceID, const char* className);
+static void DoRegisterBuiltinEditorScript (int instanceID, const char* className, const char* _namespace, const char* assemblyName, bool isEditorScript);
+
+void BuiltinResourceManager::InitializeExtraResources ()
+{
+ m_ResourcePath = kDefaultExtraResourcesPath;
+ m_RequiredHideFlags = Object::kNotEditable;
+ m_AllowResourceManagerAccess = true;
+
+ // Issue RegisterResource shader calls in the expected loading order:
+ // if any shader references another (e.g. UsePass), the referenced must come first!
+
+ // Regular opaque
+ RegisterShader (6, "Normal-VertexLit.shader", "VertexLit");
+ RegisterShader (1, "Normal-DiffuseFast.shader", "Legacy Shaders/Diffuse Fast");
+ RegisterShader (7, "Normal-Diffuse.shader", "Diffuse");
+ RegisterShader (2, "Normal-Bumped.shader", "Bumped Diffuse");
+ RegisterShader (3, "Normal-Glossy.shader", "Specular");
+ RegisterShader (4, "Normal-BumpSpec.shader", "Bumped Specular");
+ RegisterShader (5, "Normal-DiffuseDetail.shader", "Diffuse Detail");
+ // Self-Illumin
+ RegisterShader (14, "Illumin-VertexLit.shader", "Self-Illumin/VertexLit");
+ RegisterShader (10, "Illumin-Diffuse.shader", "Self-Illumin/Diffuse");
+ RegisterShader (11, "Illumin-Bumped.shader", "Self-Illumin/Bumped Diffuse");
+ RegisterShader (12, "Illumin-Glossy.shader", "Self-Illumin/Specular");
+ RegisterShader (13, "Illumin-BumpSpec.shader", "Self-Illumin/Bumped Specular");
+ // Reflective
+ RegisterShader (24, "Reflect-VertexLit.shader", "Reflective/VertexLit");
+ RegisterShader (25, "Reflect-BumpNolight.shader", "Reflective/Bumped Unlit");
+ RegisterShader (20, "Reflect-Diffuse.shader", "Reflective/Diffuse");
+ RegisterShader (21, "Reflect-Bumped.shader", "Reflective/Bumped Diffuse");
+ RegisterShader (26, "Reflect-BumpVertexLit.shader", "Reflective/Bumped VertexLit");
+ RegisterShader (22, "Reflect-Glossy.shader", "Reflective/Specular");
+ RegisterShader (23, "Reflect-BumpSpec.shader", "Reflective/Bumped Specular");
+ // Transparent
+ RegisterShader (34, "Alpha-VertexLit.shader", "Transparent/VertexLit");
+ RegisterShader (30, "Alpha-Diffuse.shader", "Transparent/Diffuse");
+ RegisterShader (31, "Alpha-Bumped.shader", "Transparent/Bumped Diffuse");
+ RegisterShader (32, "Alpha-Glossy.shader", "Transparent/Specular");
+ RegisterShader (33, "Alpha-BumpSpec.shader", "Transparent/Bumped Specular");
+ // Transparent/Cutout
+ RegisterShader (50, "AlphaTest-VertexLit.shader", "Transparent/Cutout/VertexLit");
+ RegisterShader (51, "AlphaTest-Diffuse.shader", "Transparent/Cutout/Diffuse");
+ RegisterShader (52, "AlphaTest-Bumped.shader", "Transparent/Cutout/Bumped Diffuse");
+ RegisterShader (53, "AlphaTest-Glossy.shader", "Transparent/Cutout/Specular");
+ RegisterShader (54, "AlphaTest-BumpSpec.shader", "Transparent/Cutout/Bumped Specular");
+ // Parallax
+ RegisterShader (8, "Normal-Parallax.shader", "Parallax Diffuse");
+ RegisterShader (9, "Normal-ParallaxSpec.shader", "Parallax Specular");
+ RegisterShader (15, "Illumin-Parallax.shader", "Self-Illumin/Parallax Diffuse");
+ RegisterShader (16, "Illumin-ParallaxSpec.shader", "Self-Illumin/Parallax Specular");
+ RegisterShader (27, "Reflect-Parallax.shader", "Reflective/Parallax Diffuse");
+ RegisterShader (28, "Reflect-ParallaxSpec.shader", "Reflective/Parallax Specular");
+ RegisterShader (35, "Alpha-Parallax.shader", "Transparent/Parallax Diffuse");
+ RegisterShader (36, "Alpha-ParallaxSpec.shader", "Transparent/Parallax Specular");
+
+ // Misc
+ RegisterShader (100, "Decal.shader", "Decal");
+ RegisterShader (101, "Flare.shader", "FX/Flare");
+ RegisterShader (103, "skybox cubed.shader", "RenderFX/Skybox Cubed");
+ RegisterShader (104, "skybox.shader", "RenderFX/Skybox");
+
+ // Particle shaders
+ RegisterShader (200, "Particle Add.shader", "Particles/Additive");
+ RegisterShader (201, "Particle AddMultiply.shader", "Particles/~Additive-Multiply");
+ RegisterShader (202, "Particle AddSmooth.shader", "Particles/Additive (Soft)");
+ RegisterShader (203, "Particle Alpha Blend.shader", "Particles/Alpha Blended");
+ //RegisterResource (204, "Particle Alpha Blend Deprecated.shader", "Shader"); // obsolete
+ RegisterShader (205, "Particle Multiply.shader", "Particles/Multiply");
+ RegisterShader (206, "Particle MultiplyDouble.shader", "Particles/Multiply (Double)");
+ RegisterShader (207, "Particle Premultiply Blend.shader", "Particles/Alpha Blended Premultiply");
+ RegisterShader (208, "Particle VertexLit Blended.shader", "Particles/VertexLit Blended");
+
+#if ENABLE_SPRITES
+ // Sprite shaders
+ RegisterShader (10800, "Sprites-Diffuse.shader", "Sprites/Diffuse");
+#endif
+
+ // Various
+ RegisterShader (10512, "AlphaTest-SoftEdgeUnlit.shader", "Transparent/Cutout/Soft Edge Unlit");
+
+ // Terrain engine
+ RegisterShader (10500, "TerrainShaders/Details/VertexLit.shader", "Hidden/TerrainEngine/Details/Vertexlit", false);
+ RegisterShader (10501, "TerrainShaders/Details/WavingGrass.shader", "Hidden/TerrainEngine/Details/WavingDoublePass", false);
+ RegisterShader (10502, "TerrainShaders/Details/WavingGrassBillboard.shader", "Hidden/TerrainEngine/Details/BillboardWavingDoublePass", false);
+ RegisterShader (10505, "TerrainShaders/Splats/FirstPass.shader", "Nature/Terrain/Diffuse");
+ RegisterShader (10503, "TerrainShaders/Splats/AddPass.shader", "Hidden/TerrainEngine/Splatmap/Lightmap-AddPass", false);
+ RegisterShader (10507, "TerrainShaders/Trees/BillboardTree.shader", "Hidden/TerrainEngine/BillboardTree", false);
+ //RegisterResource (10513, "TerrainShaders/Trees/SH-Tree Leaves customLit.shader", "Shader"); // not used anymore
+ //RegisterResource (10514, "TerrainShaders/Trees/SH-Tree Bark customLit.shader", "Shader"); // not used anymore
+
+ // 2.x lightmap shaders
+ RegisterShader (40, "Lightmap-VertexLit.shader", "Legacy Shaders/Lightmapped/VertexLit");
+ RegisterShader (41, "Lightmap-Diffuse.shader", "Legacy Shaders/Lightmapped/Diffuse");
+ RegisterShader (42, "Lightmap-Bumped.shader", "Legacy Shaders/Lightmapped/Bumped Diffuse");
+ RegisterShader (43, "Lightmap-Glossy.shader", "Legacy Shaders/Lightmapped/Specular");
+ RegisterShader (44, "Lightmap-BumpSpec.shader", "Legacy Shaders/Lightmapped/Bumped Specular");
+
+ // 2.x tree shaders
+ RegisterShader (10508, "Nature/SoftOcclusion/TreeSoftOcclusionBarkRendertex.shader", "Hidden/Nature/Tree Soft Occlusion Bark Rendertex", false);
+ RegisterShader (10509, "Nature/SoftOcclusion/TreeSoftOcclusionBark.shader", "Nature/Tree Soft Occlusion Bark");
+ RegisterShader (10510, "Nature/SoftOcclusion/TreeSoftOcclusionLeavesRendertex.shader", "Hidden/Nature/Tree Soft Occlusion Leaves Rendertex", false);
+ RegisterShader (10511, "Nature/SoftOcclusion/TreeSoftOcclusionLeaves.shader", "Nature/Tree Soft Occlusion Leaves");
+
+ // Tree Creator shaders
+ RegisterShader (10600, "Nature/TreeCreator/TreeCreatorBark.shader", "Nature/Tree Creator Bark");
+ RegisterShader (10601, "Nature/TreeCreator/TreeCreatorLeaves.shader", "Nature/Tree Creator Leaves");
+ RegisterShader (10602, "Nature/TreeCreator/TreeCreatorBarkRendertex.shader", "Hidden/Nature/Tree Creator Bark Rendertex", false);
+ RegisterShader (10603, "Nature/TreeCreator/TreeCreatorLeavesRendertex.shader", "Hidden/Nature/Tree Creator Leaves Rendertex", false);
+ RegisterShader (10604, "Nature/TreeCreator/TreeCreatorBarkOptimized.shader", "Hidden/Nature/Tree Creator Bark Optimized", false);
+ RegisterShader (10605, "Nature/TreeCreator/TreeCreatorLeavesOptimized.shader", "Hidden/Nature/Tree Creator Leaves Optimized", false);
+
+ RegisterShader (10606, "Nature/TreeCreator/TreeCreatorLeavesFast.shader", "Nature/Tree Creator Leaves Fast");
+ RegisterShader (10607, "Nature/TreeCreator/TreeCreatorLeavesFastOptimized.shader", "Hidden/Nature/Tree Creator Leaves Fast Optimized", false);
+
+ // Terrain shaders
+ RegisterShader (10620, "Nature/Terrain/TerrBumpFirstPass.shader", "Nature/Terrain/Bumped Specular");
+ RegisterShader (10621, "Nature/Terrain/TerrBumpAddPass.shader", "Hidden/Nature/Terrain/Bumped Specular AddPass", false);
+
+ // Mobile optimized shaders
+ RegisterShader (10700, "Mobile/Mobile-Skybox.shader", "Mobile/Skybox");
+ RegisterShader (10701, "Mobile/Mobile-VertexLit.shader", "Mobile/VertexLit");
+ RegisterShader (10703, "Mobile/Mobile-Diffuse.shader", "Mobile/Diffuse");
+ RegisterShader (10704, "Mobile/Mobile-Bumped.shader", "Mobile/Bumped Diffuse");
+ RegisterShader (10705, "Mobile/Mobile-BumpSpec.shader", "Mobile/Bumped Specular");
+ RegisterShader (10706, "Mobile/Mobile-BumpSpec-1DirectionalLight.shader", "Mobile/Bumped Specular (1 Directional Light)");
+ RegisterShader (10707, "Mobile/Mobile-VertexLit-OnlyDirectionalLights.shader", "Mobile/VertexLit (Only Directional Lights)");
+ RegisterShader (10708, "Mobile/Mobile-Lightmap-Unlit.shader", "Mobile/Unlit (Supports Lightmap)");
+
+ RegisterShader (10720, "Mobile/Mobile-Particle-Add.shader", "Mobile/Particles/Additive");
+ RegisterShader (10721, "Mobile/Mobile-Particle-Alpha.shader", "Mobile/Particles/Alpha Blended");
+ RegisterShader (10722, "Mobile/Mobile-Particle-Alpha-VertexLit.shader", "Mobile/Particles/VertexLit Blended");
+ RegisterShader (10723, "Mobile/Mobile-Particle-Multiply.shader", "Mobile/Particles/Multiply");
+
+ // Unlit shaders
+ RegisterShader (10750, "Unlit/Unlit-Alpha.shader", "Unlit/Transparent");
+ RegisterShader (10751, "Unlit/Unlit-AlphaTest.shader", "Unlit/Transparent Cutout");
+ RegisterShader (10752, "Unlit/Unlit-Normal.shader", "Unlit/Texture");
+
+ // Materials & textures
+ RegisterResource (10300, "Default-Particle.psd", "Texture2D");
+ RegisterResource (10301, "Default-Particle.mat", "Material");
+ RegisterResource (10302, "Default-Diffuse.mat", "Material");
+
+ m_Resources.sort();
+}
+
+static void RemapShadersToDefaultExtraResources ()
+{
+ // We have moved some shaders from builtin to default resources extra,
+ // make sure we don't break any backwards compatibility by remapping all references to them on load
+ // in the editor.
+
+ const int ids[] = {
+ 6, 1, 7, 2, 3, 4, 5, // regular opaque
+ 14, 10, 11, 12, 13, // self-illumin
+ 24, 25, 20, 21, 26, 22, 23, // reflective
+ 34, 30, 31, 32, 33, // transparent
+ 50, 51, 52, 53, 54, // transparent/cutout
+ 8, 9, 15, 16, 27, 28, 35, 36, // parallax
+ 100, 101, 103, 104, // misc
+ 200, 201, 202, 203, 205, 206, 207, 208, // particles
+ 10512, // various
+ 10500, 10501, 10502, 10505, 10503, 10507, // terrain engine
+ 40, 41, 42, 43, 44, // 2.x lightmap shaders
+ 10508, 10509, 10510, 10511, // 2.x tree shaders
+ 10600, 10601, 10602, 10603, 10604, 10605, // Tree Creator shaders
+ 10300, 10301, 10302, // default textures & materials
+ };
+
+ PersistentManager& pm = GetPersistentManager();
+ for (int i = 0; i < ARRAY_SIZE(ids); ++i)
+ {
+ pm.RemapInstanceIDOnLoad(kResourcePath, ids[i], kDefaultExtraResourcesPath, ids[i]);
+ }
+}
+
+
+void BuiltinResourceManager::GetResourcesOfClass (int classID, std::vector< std::pair<std::string,int> >& outResources)
+{
+ for (Resources::iterator i = m_Resources.begin(); i != m_Resources.end(); ++i)
+ {
+ if (i->classID != classID || !i->userVisible)
+ continue;
+ // Cache and store the name, so we don't have to load the actual object
+ // each time we do GetResourcesOfClass
+ if (i->cachedDisplayName.empty())
+ {
+ NamedObject* no = dynamic_instanceID_cast<NamedObject*>(i->cachedInstanceID);
+ i->cachedDisplayName = no ? no->GetName() : "<no name>";
+ }
+ outResources.push_back (std::make_pair(i->cachedDisplayName, i->cachedInstanceID));
+ }
+}
+
+void BuiltinResourceManager::GetBuiltinResourcesOfClass (int classID, std::vector< std::pair<std::string,int> >& outResources)
+{
+ GetBuiltinResourceManager().GetResourcesOfClass (classID, outResources);
+ GetBuiltinExtraResourceManager().GetResourcesOfClass (classID, outResources);
+}
+
+#endif // #if UNITY_EDITOR
+
+
+#if WEBPLUG
+static void RemapShadersToOldWebResources ()
+{
+ const int ids[] = {
+ 6, 1, 7, 2, 3, 4, 5, // regular opaque
+ 14, 10, 11, 12, 13, // self-illumin
+ 24, 25, 20, 21, 26, 22, 23, // reflective
+ 34, 30, 31, 32, 33, // transparent
+ 50, 51, 52, 53, 54, // transparent/cutout
+ 8, 9, 15, 16, 27, 28, 35, 36, // parallax
+ 100, 101, 103, 104, // misc
+ 200, 201, 202, 203, 205, 206, 207, 208, // particles
+ 10512, // various
+ 10500, 10501, 10502, 10505, 10503, 10507, // terrain engine
+ 10300, 10301, 10302, // default textures & materials
+ };
+
+ PersistentManager& pm = GetPersistentManager();
+ for (int i = 0; i < ARRAY_SIZE(ids); ++i)
+{
+ pm.RemapInstanceIDOnLoad(kResourcePath, ids[i], kOldWebResourcePath, ids[i]);
+ }
+}
+#endif // #if WEBPLUG
+
+
+#if WEBPLUG || UNITY_EDITOR
+void BuiltinResourceManager::InitializeOldWebResources ()
+{
+ Assert (m_Resources.empty ());
+
+ m_ResourcePath = kOldWebResourcePath;
+ m_RequiredHideFlags = Object::kHideAndDontSave | Object::kHideInspector;
+ m_AllowResourceManagerAccess = true;
+
+ RegisterShader (6, "Normal-VertexLit.shader", "VertexLit");
+ RegisterShader (1, "Normal-DiffuseFast.shader", "Legacy Shaders/Diffuse Fast");
+ RegisterShader (7, "Normal-Diffuse.shader", "Diffuse");
+ RegisterShader (2, "Normal-Bumped.shader", "Bumped Diffuse");
+ RegisterShader (3, "Normal-Glossy.shader", "Specular");
+ RegisterShader (4, "Normal-BumpSpec.shader", "Bumped Specular");
+ RegisterShader (5, "Normal-DiffuseDetail.shader", "Diffuse Detail");
+
+ RegisterShader (14, "Illumin-VertexLit.shader", "Self-Illumin/VertexLit");
+ RegisterShader (10, "Illumin-Diffuse.shader", "Self-Illumin/Diffuse");
+ RegisterShader (11, "Illumin-Bumped.shader", "Self-Illumin/Bumped Diffuse");
+ RegisterShader (12, "Illumin-Glossy.shader", "Self-Illumin/Specular");
+ RegisterShader (13, "Illumin-BumpSpec.shader", "Self-Illumin/Bumped Specular");
+
+ RegisterShader (24, "Reflect-VertexLit.shader", "Reflective/VertexLit");
+ RegisterShader (25, "Reflect-BumpNolight.shader", "Reflective/Bumped Unlit");
+ RegisterShader (20, "Reflect-Diffuse.shader", "Reflective/Diffuse");
+ RegisterShader (21, "Reflect-Bumped.shader", "Reflective/Bumped Diffuse");
+ RegisterShader (26, "Reflect-BumpVertexLit.shader", "Reflective/Bumped VertexLit");
+ RegisterShader (22, "Reflect-Glossy.shader", "Reflective/Specular");
+ RegisterShader (23, "Reflect-BumpSpec.shader", "Reflective/Bumped Specular");
+
+ RegisterShader (34, "Alpha-VertexLit.shader", "Transparent/VertexLit");
+ RegisterShader (30, "Alpha-Diffuse.shader", "Transparent/Diffuse");
+ RegisterShader (31, "Alpha-Bumped.shader", "Transparent/Bumped Diffuse");
+ RegisterShader (32, "Alpha-Glossy.shader", "Transparent/Specular");
+ RegisterShader (33, "Alpha-BumpSpec.shader", "Transparent/Bumped Specular");
+
+ RegisterShader (50, "AlphaTest-VertexLit.shader", "Transparent/Cutout/VertexLit");
+ RegisterShader (51, "AlphaTest-Diffuse.shader", "Transparent/Cutout/Diffuse");
+ RegisterShader (52, "AlphaTest-Bumped.shader", "Transparent/Cutout/Bumped Diffuse");
+ RegisterShader (53, "AlphaTest-Glossy.shader", "Transparent/Cutout/Specular");
+ RegisterShader (54, "AlphaTest-BumpSpec.shader", "Transparent/Cutout/Bumped Specular");
+
+ RegisterShader (8, "Normal-Parallax.shader", "Parallax Diffuse");
+ RegisterShader (9, "Normal-ParallaxSpec.shader", "Parallax Specular");
+ RegisterShader (15, "Illumin-Parallax.shader", "Self-Illumin/Parallax Diffuse");
+ RegisterShader (16, "Illumin-ParallaxSpec.shader", "Self-Illumin/Parallax Specular");
+ RegisterShader (27, "Reflect-Parallax.shader", "Reflective/Parallax Diffuse");
+ RegisterShader (28, "Reflect-ParallaxSpec.shader", "Reflective/Parallax Specular");
+ RegisterShader (35, "Alpha-Parallax.shader", "Transparent/Parallax Diffuse");
+ RegisterShader (36, "Alpha-ParallaxSpec.shader", "Transparent/Parallax Specular");
+
+ RegisterShader (100, "Decal.shader", "Decal");
+ RegisterShader (101, "Flare.shader", "FX/Flare");
+ RegisterShader (103, "skybox cubed.shader", "RenderFX/Skybox Cubed");
+ RegisterShader (104, "skybox.shader", "RenderFX/Skybox");
+
+ RegisterShader (200, "Particle Add.shader", "Particles/Additive");
+ RegisterShader (201, "Particle AddMultiply.shader", "Particles/~Additive-Multiply");
+ RegisterShader (202, "Particle AddSmooth.shader", "Particles/Additive (Soft)");
+ RegisterShader (203, "Particle Alpha Blend.shader", "Particles/Alpha Blended");
+ RegisterShader (205, "Particle Multiply.shader", "Particles/Multiply");
+ RegisterShader (206, "Particle MultiplyDouble.shader", "Particles/Multiply (Double)");
+ RegisterShader (207, "Particle Premultiply Blend.shader", "Particles/Alpha Blended Premultiply");
+ RegisterShader (208, "Particle VertexLit Blended.shader", "Particles/VertexLit Blended");
+
+ RegisterShader (10512, "AlphaTest-SoftEdgeUnlit.shader", "Transparent/Cutout/Soft Edge Unlit");
+
+ RegisterShader (10500, "TerrainShaders/Details/VertexLit.shader", "Hidden/TerrainEngine/Details/Vertexlit");
+ RegisterShader (10501, "TerrainShaders/Details/WavingGrass.shader", "Hidden/TerrainEngine/Details/WavingDoublePass");
+ RegisterShader (10502, "TerrainShaders/Details/WavingGrassBillboard.shader", "Hidden/TerrainEngine/Details/BillboardWavingDoublePass");
+ RegisterShader (10505, "TerrainShaders/Splats/FirstPass.shader", "Nature/Terrain/Diffuse");
+ RegisterShader (10503, "TerrainShaders/Splats/AddPass.shader", "Hidden/TerrainEngine/Splatmap/Lightmap-AddPass");
+ RegisterShader (10507, "TerrainShaders/Trees/BillboardTree.shader", "Hidden/TerrainEngine/BillboardTree");
+
+ // Materials & textures
+ RegisterResource (10300, "Default-Particle.psd", "Texture2D");
+ RegisterResource (10301, "Default-Particle.mat", "Material");
+ RegisterResource (10302, "Default-Diffuse.mat", "Material");
+
+ m_Resources.sort();
+}
+#endif // #if WEBPLUG || UNITY_EDITOR
+
+
+
+template<class TransferFunction>
+void ResourceManager::Dependency::Transfer (TransferFunction& transfer)
+{
+ transfer.Transfer (object, "m_Object");
+ transfer.Transfer (dependencies, "m_Dependencies");
+}
+
+void BuiltinResourceManager::InitializeResources ()
+{
+ m_ResourcePath = kResourcePath;
+ m_RequiredHideFlags = Object::kHideAndDontSave | Object::kHideInspector;
+ m_AllowResourceManagerAccess = true;
+
+ AssertIf (!m_Resources.empty ());
+
+
+ // Issue RegisterResource shader calls in the expected loading order:
+ // if any shader references another (e.g. UsePass), the referenced must come first!
+
+ RegisterShader (60, "Shadow-ScreenBlur.shader", "Hidden/Shadow-ScreenBlur", false);
+ RegisterShader (61, "Camera-DepthTexture.shader", "Hidden/Camera-DepthTexture", false);
+ RegisterShader (62, "Camera-DepthNormalTexture.shader", "Hidden/Camera-DepthNormalTexture", false);
+ RegisterShader (63, "Internal-PrePassLighting.shader", "Hidden/Internal-PrePassLighting", false);
+ RegisterShader (64, "Internal-PrePassCollectShadows.shader", "Hidden/Internal-PrePassCollectShadows", false);
+ RegisterShader (65, "Internal-CombineDepthNormals.shader", "Hidden/Internal-CombineDepthNormals", false);
+ RegisterShader (66, "Internal-BlitCopy.shader", "Hidden/BlitCopy", false);
+ RegisterShader (67, "Shadow-ScreenBlurRotated.shader", "Hidden/Shadow-ScreenBlurRotated", false);
+ RegisterShader (68, "Internal-Clear.shader", "Hidden/InternalClear", false);
+
+ RegisterShader (102, "Internal-Flare.shader", "Hidden/Internal-Flare", false);
+ RegisterShader (105, "Internal-Halo.shader", "Hidden/Internal-Halo", false);
+
+ //RegisterResource (300, "FX-Water.shader", "Shader"); // obsolete
+ //RegisterResource (500, "r7000bumpmap.cgvp", "CGProgram"); // obsolete
+ //RegisterResource (501, "r7000bumpmap2.cgvp", "CGProgram"); // obsolete
+
+ // Light stuff
+ //RegisterResource (10000, "Med.psd", "Cubemap"); // obsolete
+ RegisterResource (10001, "Soft.psd", "Texture2D", false);
+
+ // internal GUI stuff
+ RegisterShader (9000, "Internal-GUITextureClip.shader", "Hidden/Internal-GUITextureClip", false);
+ RegisterShader (9001, "Internal-GUITextureClipText.shader", "Hidden/Internal-GUITextureClipText", false);
+ RegisterShader (9002, "Internal-GUITexture.shader", "Hidden/Internal-GUITexture", false);
+ RegisterShader (9003, "Internal-GUITextureBlit.shader", "Hidden/Internal-GUITextureBlit", false);
+
+ // Default font
+ RegisterResource (10100, kDefaultFontName, "Material", false);
+ RegisterShader (10101, "Font.shader", "GUI/Text Shader");
+ RegisterResource (10102, kDefaultFontName, "Font");
+ RegisterResource (10103, kDefaultFontName, "Texture2D", false);
+
+ // Default meshes
+ RegisterResource (10202, "Cube.fbx", "Mesh");
+
+ RegisterResource (10206, "New-Cylinder.fbx", "Mesh");
+ RegisterResource (10207, "New-Sphere.fbx", "Mesh");
+ RegisterResource (10208, "New-Capsule.fbx", "Mesh");
+ RegisterResource (10209, "New-Plane.fbx", "Mesh");
+ RegisterResource (10210, "Quad.fbx", "Mesh");
+ // These 3 have zero normals, because pre-4.3 light prepass shader expects it
+ RegisterResource (10211, "icosphere.fbx", "Mesh");
+ RegisterResource (10212, "icosahedron.fbx", "Mesh");
+ RegisterResource (10213, "pyramid.fbx", "Mesh");
+
+ // DEPRECATED builtin meshes (Deprecated in version 1.5 (Adjust scale (eg. capsule is 2 meters high instead of 4)))
+ RegisterResource (10200, "Sphere.fbx", "Mesh", false);
+ RegisterResource (10203, "Cylinder.fbx", "Mesh", false);
+ RegisterResource (10204, "Plane.fbx", "Mesh", false);
+ RegisterResource (10205, "Capsule.fbx", "Mesh", false);
+
+ // Watermark, splash etc.
+ RegisterResource (10400, "UnityWaterMark-small.png", "Texture2D", false);
+ RegisterResource (10401, "EscToExit_back.png", "Texture2D", false);
+ RegisterResource (10402, "EscToExit_text.png", "Texture2D", false);
+ RegisterResource (10407, "UnityWaterMark-trial.png", "Texture2D", false);
+ RegisterResource (10408, "UnityWaterMark-beta.png", "Texture2D", false);
+ RegisterResource (10409, "UnityWaterMark-edu.png", "Texture2D", false);
+ RegisterResource (10410, "UnityWaterMark-dev.png", "Texture2D", false);
+ RegisterResource (10411, "WarningSign.psd", "Texture2D", false);
+ RegisterResource (10412, "UnityWatermark-DebugFlashPlayer.png", "Texture2D", false);
+ RegisterResource (10413, "UnityWaterMark-proto.png", "Texture2D", false);
+ RegisterResource (10414, "UnityWaterMarkPlugin-beta.png", "Texture2D", false);
+
+#if !UNITY_IPHONE
+ // Standalone
+ RegisterResource (10403, "UnitySplash.png", "Texture2D", false);
+ RegisterResource (10404, "UnitySplash2.png", "Texture2D", false);
+ RegisterResource (10405, "UnitySplash3.png", "Texture2D", false);
+ RegisterResource (10406, "UnitySplashBack.png", "Texture2D", false);
+#endif
+
+#if ENABLE_SPRITES
+ RegisterShader (10753, "Sprites-Default.shader", "Sprites/Default");
+ RegisterResource (10754, "Sprites-Default.mat", "Material");
+#endif
+
+ // Built-in GUISkin
+ RegisterResource (11000, "GameSkin/GameSkin.guiskin", "MonoBehaviour", false);
+ RegisterResource (11001, "GameSkin/box.png", "Texture2D", false);
+ RegisterResource (11002, "GameSkin/button active.png", "Texture2D", false);
+ RegisterResource (11003, "GameSkin/button hover.png", "Texture2D", false);
+ RegisterResource (11004, "GameSkin/button on hover.png", "Texture2D", false);
+ RegisterResource (11005, "GameSkin/button on.png", "Texture2D", false);
+ RegisterResource (11006, "GameSkin/button.png", "Texture2D", false);
+ RegisterResource (11007, "GameSkin/horizontal scrollbar thumb.png", "Texture2D", false);
+ RegisterResource (11008, "GameSkin/horizontal scrollbar.png", "Texture2D", false);
+ RegisterResource (11009, "GameSkin/horizontalslider.png", "Texture2D", false);
+ RegisterResource (11010, "GameSkin/slider thumb active.png", "Texture2D", false);
+ RegisterResource (11011, "GameSkin/slider thumb.png", "Texture2D", false);
+ RegisterResource (11012, "GameSkin/slidert humb hover.png", "Texture2D", false);
+ RegisterResource (11013, "GameSkin/toggle active.png", "Texture2D", false);
+ RegisterResource (11014, "GameSkin/toggle hover.png", "Texture2D", false);
+ RegisterResource (11015, "GameSkin/toggle on hover.png", "Texture2D", false);
+ RegisterResource (11016, "GameSkin/toggle on.png", "Texture2D", false);
+ RegisterResource (11017, "GameSkin/toggle on active.png", "Texture2D", false);
+ RegisterResource (11018, "GameSkin/toggle.png", "Texture2D", false);
+ RegisterResource (11019, "GameSkin/vertical scrollbar thumb.png", "Texture2D", false);
+ RegisterResource (11020, "GameSkin/vertical scrollbar.png", "Texture2D", false);
+ RegisterResource (11021, "GameSkin/verticalslider.png", "Texture2D", false);
+ RegisterResource (11022, "GameSkin/window on.png", "Texture2D", false);
+ RegisterResource (11023, "GameSkin/window.png", "Texture2D", false);
+ RegisterResource (11024, "GameSkin/textfield.png", "Texture2D", false);
+ RegisterResource (11025, "GameSkin/textfield on.png", "Texture2D", false);
+ RegisterResource (11026, "GameSkin/textfield hover.png", "Texture2D", false);
+
+ // 12000 range is used by scripts in RegisterBuiltinScripts
+ RegisterResource(11998, "DeveloperConsole", "MonoScript", false);
+ RegisterResource(11999, "UserAuthorizationDialog", "MonoScript", false);
+ RegisterResource(12000, "Terrain", "MonoScript", false);
+ RegisterResource(12001, "GUISkin", "MonoScript", false);
+
+ #if UNITY_LOGIC_GRAPH
+ // 130xx are for logic graph engine side scripts
+ RegisterResource(13003, "GraphBehaviour", "MonoScript", false);
+ RegisterResource(13006, "OnAnimationEventDummy", "MonoScript", false);
+ RegisterResource(13007, "OnMouseEventDummy", "MonoScript", false);
+ RegisterResource(13008, "OnTriggerEventDummy", "MonoScript", false);
+ RegisterResource(13009, "OnCollisionEventDummy", "MonoScript", false);
+ #endif
+
+ m_Resources.sort();
+
+}
+
+void BuiltinResourceManager::InitializeAllResources ()
+{
+#if WEBPLUG
+ if (!IS_CONTENT_NEWER_OR_SAME(kUnityVersion_OldWebResourcesAdded))
+ {
+ GetBuiltinOldWebResourceManager().InitializeOldWebResources();
+ RemapShadersToOldWebResources();
+ }
+#endif
+
+#if UNITY_EDITOR
+
+ // Setup up path remapping for builtin resources
+ GetPersistentManager().SetPathRemap(kResourcePath, AppendPathName (GetApplicationContentsPath (), kDefaultResourcesSource));
+ GetPersistentManager().SetPathRemap(kEditorResourcePath, AppendPathName (GetApplicationContentsPath (), kEditorDefaultResourcesSource));
+ GetPersistentManager().SetPathRemap(kDefaultExtraResourcesPath, AppendPathName (GetApplicationContentsPath (), kDefaultExtraResourcesPath));
+
+ // Initialize resources
+ GetBuiltinResourceManager().InitializeResources();
+ GetBuiltinExtraResourceManager().InitializeExtraResources();
+ RemapShadersToDefaultExtraResources();
+#else
+ GetBuiltinResourceManager().InitializeResources();
+#endif
+
+ s_AreResourcesInitialized = true;
+}
+
+bool BuiltinResourceManager::AreResourcesInitialized()
+{
+ return s_AreResourcesInitialized;
+}
+
+
+#if UNITY_EDITOR
+
+// Disable builtin resource loading. This is useful to ensure there are no dependencies on builtin resources when building them.
+void BuiltinResourceManager::SetAllowLoadingBuiltinResources (bool allowLoadingBuiltinResources)
+{
+ GetBuiltinResourceManager().m_AllowResourceManagerAccess = allowLoadingBuiltinResources;
+ GetBuiltinOldWebResourceManager().m_AllowResourceManagerAccess = allowLoadingBuiltinResources;
+ GetBuiltinExtraResourceManager().m_AllowResourceManagerAccess = allowLoadingBuiltinResources;
+}
+
+
+void BuiltinResourceManager::RegisterBuiltinScriptsForBuilding ()
+{
+ // Regenerate scripts from scratch and serialize them
+ for (Resources::iterator i=m_Resources.begin ();i != m_Resources.end ();i++)
+ {
+ if (i->classID == ClassID (MonoScript))
+ {
+ string path = AppendPathName("GeneratedBuiltinScripts", i->name);
+ int oldID = GetPersistentManager().GetInstanceIDFromPathAndFileID(path, 1);
+ if (dynamic_instanceID_cast<MonoScript*>(oldID) == NULL)
+ {
+ MonoScript* script = NEW_OBJECT(MonoScript);
+ script->Reset();
+ script->Init("", i->name, "UnityEngine", "UnityEngine.dll", false);
+ script->SetName(i->name);
+ script->SetPathName(i->name);
+ GetPersistentManager().MakeObjectPersistentAtFileID(script->GetInstanceID(), 1, path);
+ script->AwakeFromLoad(kDefaultAwakeFromLoad);
+ }
+ }
+ }
+}
+
+static void RegisterGraphScript (int id, const char* className, const char* _namspace)
+{
+ DoRegisterBuiltinEditorScript(id, className, _namspace, "UnityEditor.Graphs.dll", true);
+}
+
+void GenerateEditorScripts ()
+{
+ RegisterBuiltinEditorScript(12002, "TerrainInspector");
+
+ RegisterBuiltinEditorScript(12003, "ConsoleWindow");
+ RegisterBuiltinEditorScript(12004, "ContainerWindow");
+ RegisterBuiltinEditorScript(12005, "GUIView");
+ RegisterBuiltinEditorScript(12006, "DockArea");
+ RegisterBuiltinEditorScript(12007, "EditorWindow");
+ RegisterBuiltinEditorScript(12008, "MainWindow");
+ RegisterBuiltinEditorScript(12009, "PaneDragTab");
+ RegisterBuiltinEditorScript(12010, "SplitView");
+ RegisterBuiltinEditorScript(12011, "Toolbar");
+ RegisterBuiltinEditorScript(12012, "Tools");
+ RegisterBuiltinEditorScript(12013, "SceneView");
+ RegisterBuiltinEditorScript(12014, "ProjectBrowser");
+ RegisterBuiltinEditorScript(12015, "GameView");
+ RegisterBuiltinEditorScript(12016, "PopupEditor");
+ RegisterBuiltinEditorScript(12017, "ColorPicker");
+ RegisterBuiltinEditorScript(12018, "AboutWindow");
+ RegisterBuiltinEditorScript(12019, "InspectorWindow");
+ RegisterBuiltinEditorScript(12020, "ShaderInspector");
+ //RegisterBuiltinEditorScript(12021, "ServerDemo"); // was used for testing only
+// RegisterBuiltinEditorScript(12022, "GUIDebugHelper");
+ //RegisterBuiltinEditorScript(12023, "ButtonsDemo"); // was used for testing only
+ RegisterBuiltinEditorScript(12024, "AssetImporterInspector");
+ RegisterBuiltinEditorScript(12025, "TextureImporterInspector");
+ RegisterBuiltinEditorScript(12026, "MovieImporterInspector");
+ RegisterBuiltinEditorScript(12027, "TransformInspector");
+ RegisterBuiltinEditorScript(12028, "ModelImporterEditor");
+ RegisterBuiltinEditorScript(12029, "AudioImporterInspector");
+ RegisterBuiltinEditorScript(12030, "TrueTypeFontImporterInspector");
+ RegisterBuiltinEditorScript(12031, "TextureInspector");
+ RegisterBuiltinEditorScript(12032, "GameObjectInspector");
+ RegisterBuiltinEditorScript(12033, "MaterialEditor");
+ RegisterBuiltinEditorScript(12034, "SaveWindowLayout");
+ RegisterBuiltinEditorScript(12035, "DeleteWindowLayout");
+ RegisterBuiltinEditorScript(12036, "RenderTextureInspector");
+ RegisterBuiltinEditorScript(12037, "ASMainWindow");
+ RegisterBuiltinEditorScript(12038, "CubemapTextureInspector");
+ RegisterBuiltinEditorScript(12039, "RagdollBuilder");
+ RegisterBuiltinEditorScript(12040, "GenericInspector");
+ RegisterBuiltinEditorScript(12041, "ProfilerIPWindow");
+ RegisterBuiltinEditorScript(12042, "AppStatusBar");
+ RegisterBuiltinEditorScript(12043, "BuildPlayerWindow");
+ RegisterBuiltinEditorScript(12044, "PreferencesWindow");
+ RegisterBuiltinEditorScript(12045, "Settings");
+ RegisterBuiltinEditorScript(12046, "SnapSettings");
+ RegisterBuiltinEditorScript(12047, "HostView");
+
+ RegisterBuiltinEditorScript(12048, "TerrainWizard");
+ RegisterBuiltinEditorScript(12049, "LightmapWizard");
+ RegisterBuiltinEditorScript(12050, "ImportRawHeightmap");
+ RegisterBuiltinEditorScript(12051, "ExportRawHeightmap");
+ RegisterBuiltinEditorScript(12052, "SetResolutionWizard");
+ RegisterBuiltinEditorScript(12053, "TreeWizard");
+ RegisterBuiltinEditorScript(12054, "SplatWizard");
+ RegisterBuiltinEditorScript(12055, "DetailMeshWizard");
+ RegisterBuiltinEditorScript(12056, "DetailTextureWizard");
+ RegisterBuiltinEditorScript(12057, "PlaceTreeWizard");
+ RegisterBuiltinEditorScript(12058, "FlattenHeightmap");
+
+ RegisterBuiltinEditorScript(12059, "FallbackEditorWindow");
+ RegisterBuiltinEditorScript(12060, "MaximizedHostView");
+ RegisterBuiltinEditorScript(12061, "HierarchyWindow");
+ RegisterBuiltinEditorScript(12062, "PackageExport");
+ RegisterBuiltinEditorScript(12063, "PackageImport");
+ RegisterBuiltinEditorScript(12064, "EyeDropper");
+ RegisterBuiltinEditorScript(12065, "WelcomeScreen");
+ RegisterBuiltinEditorScript(12066, "MonoScriptInspector");
+ RegisterBuiltinEditorScript(12067, "AudioClipInspector");
+ RegisterBuiltinEditorScript(12068, "ModelInspector");
+ RegisterBuiltinEditorScript(12069, "TooltipView");
+ RegisterBuiltinEditorScript(12070, "ProfilerWindow");
+ RegisterBuiltinEditorScript(12071, "AnimationWindow");
+ RegisterBuiltinEditorScript(12072, "ASHistoryWindow");
+ RegisterBuiltinEditorScript(12073, "AnimationEventPopup");
+ RegisterBuiltinEditorScript(12074, "EditorSettingsInspector");
+ RegisterBuiltinEditorScript(12075, "AssetInspector");
+ RegisterBuiltinEditorScript(12076, "AnimationCleanupPopup");
+ RegisterBuiltinEditorScript(12077, "ScriptReloadProperties");
+ RegisterBuiltinEditorInternalScript(12078, "MacroWindow");
+ RegisterBuiltinEditorScript(12079, "LightmappingWindow");
+ RegisterBuiltinEditorScript(12080, "AuxWindow");
+ RegisterBuiltinEditorScript(12081, "ObjectSelector");
+ RegisterBuiltinEditorScript(12082, "LabelCompletion");
+ RegisterBuiltinEditorScript(12083, "CurveEditorWindow");
+ RegisterBuiltinEditorScript(12084, "MonoScriptImporterInspector");
+ RegisterBuiltinEditorScript(12085, "MovieTextureInspector");
+ RegisterBuiltinEditorScript(12086, "TextAssetInspector");
+ RegisterBuiltinEditorScript(12087, "LightEditor");
+ RegisterBuiltinEditorScript(12088, "AudioSourceInspector");
+ RegisterBuiltinEditorScript(12089, "AudioLowPassFilterInspector");
+ RegisterBuiltinEditorScript(12090, "OcclusionCullingWindow");
+ RegisterBuiltinEditorScript(12091, "WebCamTextureInspector");
+ RegisterBuiltinEditorScript(12092, "ShaderImporterInspector");
+
+ RegisterBuiltinEditorScript(12099, "AudioReverbZoneEditor");
+ RegisterBuiltinEditorScript(12100, "PhysicsManagerInspector");
+
+ RegisterBuiltinEditorScript(12101, "ClothInspector");
+ RegisterBuiltinEditorScript(12102, "BumpMapSettingsFixingWindow");
+ RegisterBuiltinEditorScript(12103, "PragmaFixingWindow");
+ RegisterBuiltinEditorScript(12104, "WindInspector");
+
+ DoRegisterBuiltinEditorScript (12105, "TreeEditor", "TreeEditor", "UnityEditor.dll", true);
+ DoRegisterBuiltinEditorScript (12106, "TreeData", "TreeEditor", "UnityEditor.dll", true);
+
+ RegisterBuiltinEditorScript(12107, "PlayerSettingsEditor");
+ RegisterBuiltinEditorScript(12108, "EditorUpdateWindow");
+
+ RegisterBuiltinEditorScript(12109, "AudioReverbFilterEditor");
+
+ RegisterBuiltinEditorScript(12110, "WebView");
+ RegisterBuiltinEditorScript(12111, "AssetStoreWindow");
+ RegisterBuiltinEditorScript(12112, "AssetStoreContext");
+
+ RegisterBuiltinEditorScript(12113, "AssembleEditorSkin");
+ RegisterBuiltinEditorScript(12114, "OcclusionAreaEditor");
+ RegisterBuiltinEditorScript(12115, "CameraEditor");
+
+ RegisterBuiltinEditorScript(12116, "WindowFocusState");
+
+ RegisterBuiltinEditorScript(12117, "AndroidKeystoreWindow");
+
+ RegisterBuiltinEditorScript(12118, "AudioDistortionFilterEditor");
+ RegisterBuiltinEditorScript(12119, "AudioEchoFilterEditor");
+ RegisterBuiltinEditorScript(12120, "AudioHighPassFilterEditor");
+ RegisterBuiltinEditorScript(12121, "AudioChorusFilterEditor");
+
+ RegisterBuiltinEditorScript(12122, "BoxColliderEditor");
+ RegisterBuiltinEditorScript(12123, "SphereColliderEditor");
+ RegisterBuiltinEditorScript(12124, "CapsuleColliderEditor");
+ RegisterBuiltinEditorScript(12125, "MeshColliderEditor");
+ RegisterBuiltinEditorScript(12126, "WheelColliderEditor");
+ RegisterBuiltinEditorScript(12127, "RigidbodyEditor");
+
+ RegisterBuiltinEditorScript(12128, "AssetSaveDialog");
+
+ RegisterBuiltinEditorScript(12129, "AnnotationWindow");
+ RegisterBuiltinEditorScript(12130, "IconSelector");
+ RegisterBuiltinEditorScript(12131, "ScriptExecutionOrderInspector");
+
+ RegisterBuiltinEditorScript(12132, "AnimationEditor");
+ RegisterBuiltinEditorScript(12133, "SkinnedMeshRendererEditor");
+ RegisterBuiltinEditorScript(12134, "PreviewWindow");
+ RegisterBuiltinEditorScript(12135, "LODGroupEditor");
+
+ RegisterBuiltinEditorScript(12136, "OffMeshLinkInspector");
+ RegisterBuiltinEditorScript(12137, "ParticleSystemWindow");
+ RegisterBuiltinEditorScript(12138, "ParticleSystemInspector");
+ RegisterBuiltinEditorScript(12139, "MeshRendererEditor");
+
+ RegisterBuiltinEditorScript(12140, "GradientPicker");
+
+ RegisterBuiltinEditorScript(12141, "NavMeshEditorWindow");
+ RegisterBuiltinEditorScript(12142, "FontInspector");
+
+ RegisterBuiltinEditorScript(12143, "BuildUploadCompletedWindow");
+ RegisterBuiltinEditorScript(12144, "UploadingBuildsMonitor");
+
+ RegisterBuiltinEditorScript(12145, "TerrainSplatEditor");
+
+ #if ENABLE_SPRITES
+ RegisterBuiltinEditorScript(12150, "SpriteRendererInspector");
+ RegisterBuiltinEditorScript(12151, "SpriteInspector");
+ #endif
+
+ RegisterBuiltinEditorScript(12153, "TagManagerInspector");
+
+ RegisterBuiltinEditorScript(12200, "SubstanceImporterInspector");
+ // RegisterBuiltinEditorScript(12201, "SubstanceArchiveInspector");
+ RegisterBuiltinEditorScript(12202, "ProceduralMaterialInspector");
+ RegisterBuiltinEditorScript(12203, "ProceduralTextureInspector");
+ RegisterBuiltinEditorScript(12204, "NavMeshAgentInspector");
+ RegisterBuiltinEditorScript(12205, "LightProbeGroupInspector");
+ RegisterBuiltinEditorScript(12206, "LightProbeGroupSelection");
+ RegisterBuiltinEditorScript(12207, "View");
+ RegisterBuiltinEditorScript(12208, "OcclusionPortalInspector");
+ RegisterBuiltinEditorScript(12209, "NavMeshObstacleInspector");
+
+ RegisterBuiltinEditorScript(12210, "PopupList");
+
+ RegisterBuiltinEditorScript(12211, "AssetStoreAssetInspector");
+ RegisterBuiltinEditorScript(12212, "AssetStoreInstaBuyWindow");
+ RegisterBuiltinEditorScript(12213, "AssetStoreLoginWindow");
+
+ DoRegisterBuiltinEditorScript(12216, "EndNameEditAction", "UnityEditor.ProjectWindowCallback", "UnityEditor.dll", true);
+ DoRegisterBuiltinEditorScript(12217, "DoCreateNoneAsset", "UnityEditor.ProjectWindowCallback", "UnityEditor.dll", true);
+ DoRegisterBuiltinEditorScript(12218, "DoCreateNewAsset", "UnityEditor.ProjectWindowCallback", "UnityEditor.dll", true);
+ DoRegisterBuiltinEditorScript(12219, "DoCreateFolder", "UnityEditor.ProjectWindowCallback", "UnityEditor.dll", true);
+ DoRegisterBuiltinEditorScript(12220, "DoCreatePrefab", "UnityEditor.ProjectWindowCallback", "UnityEditor.dll", true);
+ DoRegisterBuiltinEditorScript(12221, "DoCreateScriptAsset", "UnityEditor.ProjectWindowCallback", "UnityEditor.dll", true);
+ DoRegisterBuiltinEditorScript(12223, "DoCreateAnimatorController", "UnityEditor.ProjectWindowCallback", "UnityEditor.dll", true);
+
+ RegisterBuiltinEditorScript(12214, "LightProbesInspector");
+
+ RegisterBuiltinEditorScript(12215, "AddComponentWindow");
+
+ RegisterBuiltinEditorScript(12222, "LicenseManagementWindow");
+
+ DoRegisterBuiltinEditorScript(12300, "WindowResolve", "UnityEditor.VersionControl", "UnityEditor.dll", true);
+ DoRegisterBuiltinEditorScript(12301, "WindowChange", "UnityEditor.VersionControl", "UnityEditor.dll", true);
+ DoRegisterBuiltinEditorScript(12303, "WindowPending", "UnityEditor.VersionControl", "UnityEditor.dll", true);
+ DoRegisterBuiltinEditorScript(12304, "WindowRevert", "UnityEditor.VersionControl", "UnityEditor.dll", true);
+
+ RegisterBuiltinEditorScript(12306, "CharacterControllerEditor");
+
+ RegisterBuiltinEditorScript(12307, "QualitySettingsEditor");
+ RegisterBuiltinEditorScript(12308, "SavedSearchFilters");
+ // RegisterBuiltinEditorScript(12309, ""); // Unused
+ RegisterBuiltinEditorScript(12310, "TextMeshInspector");
+ RegisterBuiltinEditorScript(12311, "Texture3DInspector");
+
+ //RegisterBuiltinEditorScript(12312, "MetroCreateTestCertificateWindow");
+ //RegisterBuiltinEditorScript(12313, "MetroCertificatePasswordWindow");
+
+ RegisterBuiltinEditorScript(12314, "ModelImporterRigEditor");
+ RegisterBuiltinEditorScript(12315, "ModelImporterModelEditor");
+ RegisterBuiltinEditorScript(12316, "ModelImporterClipEditor");
+
+ RegisterBuiltinEditorScript(12318, "AvatarPreviewSelection");
+ RegisterBuiltinEditorScript(12319, "PopupWindow");
+
+ RegisterBuiltinEditorScript(12320, "PresetLibraryManager");
+ RegisterBuiltinEditorScript(12321, "GradientPresetLibrary");
+ RegisterBuiltinEditorScript(12322, "CurvePresetLibrary");
+ RegisterBuiltinEditorScript(12323, "ColorPresetLibrary");
+ RegisterBuiltinEditorScript(12324, "DoubleCurvePresetLibrary");
+
+ #if ENABLE_SPRITES
+ RegisterBuiltinEditorScript(12325, "AtlasEditorWindow");
+ RegisterBuiltinEditorScript(12326, "SpritePackerWindow");
+ #endif
+
+ #if ENABLE_2D_PHYSICS
+ RegisterBuiltinEditorScript(12327, "PolygonColliderEditor");
+ RegisterBuiltinEditorScript(12329, "Physics2DSettingsInspector");
+ #endif
+
+ RegisterBuiltinEditorScript(12330, "GameViewSizes");
+
+ RegisterBuiltinEditorScript(12331, "ColorPresetLibraryEditor");
+ RegisterBuiltinEditorScript(12332, "GradientPresetLibraryEditor");
+ RegisterBuiltinEditorScript(12333, "CurvePresetLibraryEditor");
+ RegisterBuiltinEditorScript(12334, "DoubleCurvePresetLibraryEditor");
+
+ RegisterBuiltinEditorScript(12340, "BB10SigningAuthorityWindow");
+ RegisterBuiltinEditorScript(12341, "BB10UnregisterWarningWindow");
+
+ RegisterBuiltinEditorScript(12342, "TizenSigningAuthorityWindow");
+ RegisterBuiltinEditorScript(12343, "TizenUnregisterWarningWindow");
+
+ #if ENABLE_2D_PHYSICS
+ RegisterBuiltinEditorScript(12350, "BoxCollider2DEditor");
+ RegisterBuiltinEditorScript(12351, "CircleCollider2DEditor");
+ RegisterBuiltinEditorScript(12352, "EdgeCollider2DEditor");
+ #endif
+
+
+ // 12410-12449 are for Toolbar & GUI Editor
+
+ #if UNITY_LOGIC_GRAPH
+ // 131xx are for logic graph editor side scripts
+ RegisterGraphScript(13100, "FlowWindow", kGraphsEditorBaseNamespace);
+ RegisterGraphScript(13101, "LogicGraph", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13102, "LogicGraphGUI", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13103, "FunctionNode", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13104, "VariableNode", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13105, "FunctionNodeEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13106, "VariableNodeEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13107, "ClassNode", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13108, "ExpressionNode", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13109, "ExpressionNodeEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13110, "CompareNode", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13111, "CompareNodeEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13112, "IfNode", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13113, "IfNodeEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13114, "RandomNode", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13115, "RandomNodeEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13116, "ClassNodeEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13117, "EventNode", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13118, "EventNodeEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13119, "SetPropertyNode", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13120, "SetPropertyNodeEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13121, "GetPropertyNode", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13122, "GetPropertyNodeEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13123, "OnAnimationEventNode", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13124, "OnAnimationEventNodeEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13125, "ExternalCallReceiver", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13126, "ExternalCallReceiverEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13127, "ExternalCallSender", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13128, "ExternalCallSenderEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13129, "EvalNode", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13130, "EvalNodeEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13131, "StructExpressionNode", kLogicGraphEditorNamespace);
+
+ RegisterGraphScript(13132, "StructExpressionNodeEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13133, "ToggleNode", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13134, "ToggleNodeEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13135, "GetComponentNode", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13136, "GetComponentNodeEditor", kLogicGraphEditorNamespace);
+ RegisterGraphScript(13137, "GraphBehaviourInspector", kLogicGraphEditorNamespace);
+ #endif
+
+ RegisterGraphScript(13138, "Graph", kGraphsEditorBaseNamespace);
+ RegisterGraphScript(13139, "GraphInspector", kGraphsEditorBaseNamespace);
+ RegisterGraphScript(13140, "GraphGUI", kGraphsEditorBaseNamespace);
+ RegisterGraphScript(13141, "Node", kGraphsEditorBaseNamespace);
+ RegisterBuiltinEditorScript(12901, "AnimatorInspector");
+ RegisterBuiltinEditorScript(12902, "AnimatorOverrideControllerInspector");
+ RegisterBuiltinEditorScript(12905, "AnimationClipEditor");
+ RegisterBuiltinEditorScript(12906, "AvatarEditor");
+ RegisterGraphScript(12907, "TransitionInspector", kAnimationStateMachineNamespace);
+ RegisterGraphScript(12914, "AnimatorControllerTool", kGraphsEditorBaseNamespace);
+ RegisterBuiltinEditorScript(12915, "AvatarMaskInspector");
+ RegisterBuiltinEditorScript(12916, "BlendTreeInspector");
+
+ RegisterBuiltinEditorScript(12917, "AvatarMappingEditor");
+ RegisterBuiltinEditorScript(12918, "AvatarMuscleEditor");
+
+ RegisterGraphScript(12919, "GraphGUI", kAnimationBlendTreeNamespace);
+ RegisterGraphScript(12920, "Graph", kAnimationBlendTreeNamespace);
+ RegisterGraphScript(12921, "Node", kAnimationBlendTreeNamespace);
+
+ RegisterGraphScript(12930, "GraphGUI", kAnimationStateMachineNamespace);
+ RegisterGraphScript(12931, "Graph", kAnimationStateMachineNamespace);
+ RegisterGraphScript(12932, "StateNode", kAnimationStateMachineNamespace);
+ RegisterGraphScript(12933, "AnyStateNode", kAnimationStateMachineNamespace);
+ RegisterGraphScript(12934, "StateMachineNode", kAnimationStateMachineNamespace);
+ RegisterGraphScript(12935, "StateEditor", kAnimationStateMachineNamespace);
+ RegisterGraphScript(12936, "StateMachineInspector", kAnimationStateMachineNamespace);
+ RegisterGraphScript(12937, "AnyStateNodeInspector", kAnimationStateMachineNamespace);
+
+ RegisterBuiltinEditorScript(13201, "HeapshotWindow");
+}
+
+static void DoRegisterBuiltinEditorScript (int fileID, const char* className, const char* _namespace, const char* assemblyName, bool isEditorScript)
+{
+#if ENABLE_MONO
+ MonoScript* script = NEW_OBJECT(MonoScript);
+ script->Reset();
+ script->Init("", className, _namespace, assemblyName, isEditorScript);
+ script->SetName(className);
+ script->SetPathName(className);
+
+ SInt32 oldInstanceID = GetPersistentManager().GetInstanceIDFromPathAndFileID(kResourcePath, fileID);
+ if (Object::IDToPointer(oldInstanceID) != NULL)
+ {
+ ErrorString("Duplicate editor builtin script " + string(className));
+ }
+
+ GetPersistentManager().MakeObjectPersistentAtFileID(script->GetInstanceID(), fileID, kResourcePath);
+ script->SetHideFlags(Object::kDontSave);
+
+ if (isEditorScript)
+ GetMonoScriptManager().RegisterEditorScript(*script);
+ else
+ GetMonoScriptManager().RegisterRuntimeScript(*script);
+ script->AwakeFromLoad(kDefaultAwakeFromLoad);
+
+#endif
+}
+
+static void RegisterBuiltinEditorScript (int instanceID, const char* className)
+{
+ DoRegisterBuiltinEditorScript (instanceID, className, "UnityEditor", "UnityEditor.dll", true);
+}
+
+static void RegisterBuiltinEditorInternalScript (int instanceID, const char* className)
+{
+ DoRegisterBuiltinEditorScript (instanceID, className, "UnityEditorInternal", "UnityEditor.dll", true);
+}
+
+#if ENABLE_UNIT_TESTS
+void BuiltinResourceManager::RegisterShadersWithRegistry (ScriptMapper* registry)
+{
+ for (OrderedShaderStartup::iterator i = m_OrderedShaderStartup.begin ();
+ i != m_OrderedShaderStartup.end (); i++)
+ {
+ const ShaderInitializationData& data = *i;
+ registry->AddBuiltinShader (data.shaderClassName, PPtr<Shader> (data.cachedInstanceID));
+ }
+}
+#endif
+
+void BuiltinResourceManager::LoadDefaultResourcesFromEditor ()
+{
+ if (!m_AllowResourceManagerAccess)
+ return;
+
+ PersistentManager& pm = GetPersistentManager ();
+
+ // They need to show up in the script mapper
+ for (OrderedShaderStartup::iterator i=m_OrderedShaderStartup.begin ();i != m_OrderedShaderStartup.end ();i++)
+ {
+ const ShaderInitializationData& data = *i;
+ GetScriptMapper ().AddBuiltinShader (data.shaderClassName, PPtr<Shader>(data.cachedInstanceID));
+
+ void AddBuiltinShaderInfoForMenu (const std::string& name, SInt32 id);
+ AddBuiltinShaderInfoForMenu (data.shaderClassName, data.cachedInstanceID);
+ }
+
+ // In non-release builds, verify that the setup of all shaders is correct and no shaders have errors.
+ #if !UNITY_RELEASE
+ for (OrderedShaderStartup::iterator i=m_OrderedShaderStartup.begin ();i != m_OrderedShaderStartup.end ();i++)
+ {
+ Shader* shader = dynamic_pptr_cast<Shader*> (GetResource (ClassID (Shader), i->resourceName));
+ Assert(shader != NULL);
+ if (shader)
+ {
+ if (shader->GetScriptClassName() != i->shaderClassName)
+ {
+ AssertString("Shadername is: " + shader->GetScriptClassName() + " but hardcoded name was: " + i->shaderClassName);
+ }
+
+ Assert(shader->GetHideFlags() == m_RequiredHideFlags);
+ if (shader->GetErrors().HasErrorsOrWarnings())
+ shader->GetErrors().LogErrors(shader->GetScriptClassName().c_str(), "BUILTIN SHADER", shader, shader->GetInstanceID());
+ }
+ }
+ #endif
+
+ /////@TODO: Verify that all assets in the builtin resource file are actually being registered!
+
+ // Scripts need to register with mono manager
+ for (Resources::iterator i=m_Resources.begin ();i != m_Resources.end ();i++)
+ {
+ if (i->classID == ClassID (MonoScript))
+ {
+ int instanceID = pm.GetInstanceIDFromPathAndFileID (m_ResourcePath, i->fileID);
+ MonoScript* script = dynamic_instanceID_cast<MonoScript*> (instanceID);
+ if (script)
+ GetMonoScriptManager().RegisterRuntimeScript(*script);
+ else
+ Assert("Script can't be found");
+ }
+ }
+}
+
+
+void BuiltinResourceManager::LoadAllDefaultResourcesFromEditor ()
+{
+ GetBuiltinResourceManager().LoadDefaultResourcesFromEditor();
+ GetBuiltinExtraResourceManager().LoadDefaultResourcesFromEditor();
+
+ // Editor scripts need to be generated and registered
+ GenerateEditorScripts ();
+}
+#endif
+
+
+vector<Object*> BuiltinResourceManager::GetAllResources ()
+{
+ vector<Object*> result;
+ result.reserve (m_Resources.size ());
+
+ for (Resources::const_iterator iter = m_Resources.begin (); iter != m_Resources.end (); ++iter)
+ result.push_back (GetResource (iter->classID, iter->name));
+
+ return result;
+}
+
+// Returns the first found resource with name that is derived from classID
+Object* BuiltinResourceManager::GetResource (int classID, const string& name)
+{
+ if (!m_AllowResourceManagerAccess)
+ {
+ bool mustLoadBuiltinShader =
+ name == "Internal-Halo.shader" ||
+ name == "Internal-GUITexture.shader" ||
+ name == "Normal-Diffuse.shader";
+ // Allow for some specific exceptions!
+ if (!mustLoadBuiltinShader)
+ {
+ AssertString("Loading builtin resources is forbidden when building them: " + name + "\nIf it is really necessary you can add a exception case at this assert.");
+ return NULL;
+ }
+ }
+
+ Resource proxy;
+ proxy.classID = classID;
+ proxy.name = name.c_str();
+
+ Resources::iterator found = m_Resources.find (proxy);
+ if (found == m_Resources.end())
+ {
+ AssertString("Failed to find " + name);
+ return NULL;
+ }
+
+ AssertIf (found->cachedInstanceID == 0);
+ Object* ptr = PPtr<Object> (found->cachedInstanceID);
+ if (ptr == NULL || !ptr->IsDerivedFrom (classID))
+ {
+ ErrorString ("The resource " + name + " could not be loaded from the resource file!");
+ return NULL;
+ }
+ else
+ {
+ AssertIf(ptr->GetHideFlags() != m_RequiredHideFlags);
+ return ptr;
+ }
+}
+
+void BuiltinResourceManager::RegisterShader (LocalIdentifierInFileType fileID, const char* name, const char* shaderClassName, bool userVisible)
+{
+#if UNITY_EDITOR
+ int cachedInstanceID =
+#endif
+ RegisterResourceInternal(fileID, name, "Shader", shaderClassName, userVisible);
+
+#if UNITY_EDITOR
+ // Register shader initialization
+ ShaderInitializationData data;
+ data.shaderClassName = shaderClassName;
+ data.resourceName = name;
+ data.cachedInstanceID = cachedInstanceID;
+ m_OrderedShaderStartup.push_back(data);
+#endif
+}
+
+int BuiltinResourceManager::RegisterResourceInternal (LocalIdentifierInFileType fileID, const char* name, const char* className, const char* displayName, bool userVisible)
+{
+ RegisterDebugUsedFileID (fileID, name);
+
+ Resource r;
+ r.name = name;
+ r.classID = Object::StringToClassID (className);
+ r.fileID = fileID;
+ r.cachedInstanceID = GetPersistentManager().GetInstanceIDFromPathAndFileID(m_ResourcePath, fileID);
+ r.userVisible = userVisible;
+ #if UNITY_EDITOR
+ if (displayName != NULL)
+ r.cachedDisplayName = displayName;
+ #endif
+ m_Resources.push_unsorted (r);
+
+ return r.cachedInstanceID;
+}
+
+void BuiltinResourceManager::RegisterResource (LocalIdentifierInFileType fileID, const char* name, const char* className, bool userVisible)
+{
+ // RegisterResource can not be used on shaders, use RegisterShader
+ Assert(strcmp(className, "Shader") != 0);
+
+ RegisterResourceInternal(fileID, name, className, NULL, userVisible);
+}
+
+static BuiltinResourceManager* gBuiltinResourceManager;
+static BuiltinResourceManager* gBuiltinOldWebResourceManager;
+
+
+void BuiltinResourceManager::StaticInitialize()
+{
+ gBuiltinResourceManager = UNITY_NEW(BuiltinResourceManager,kMemResource);
+ gBuiltinOldWebResourceManager = UNITY_NEW(BuiltinResourceManager,kMemResource);
+
+#if UNITY_EDITOR
+ gBuiltinExtraResourceManager = UNITY_NEW(BuiltinResourceManager,kMemResource);
+#endif
+
+ s_AreResourcesInitialized = false;
+}
+
+void BuiltinResourceManager::StaticDestroy()
+{
+ s_AreResourcesInitialized = false;
+
+ UNITY_DELETE(gBuiltinResourceManager,kMemResource);
+ UNITY_DELETE(gBuiltinOldWebResourceManager,kMemResource);
+#if UNITY_EDITOR
+ UNITY_DELETE(gBuiltinExtraResourceManager,kMemResource);
+#endif
+}
+
+static RegisterRuntimeInitializeAndCleanup s_BuiltinResourceManagerCallbacks(BuiltinResourceManager::StaticInitialize, BuiltinResourceManager::StaticDestroy);
+
+BuiltinResourceManager& GetBuiltinResourceManager ()
+{
+ return *gBuiltinResourceManager;
+}
+
+BuiltinResourceManager& GetBuiltinOldWebResourceManager ()
+{
+ return *gBuiltinOldWebResourceManager;
+}
+
+
+void BuiltinResourceManager::DestroyAllResources()
+{
+ for (Resources::iterator i=m_Resources.begin ();i != m_Resources.end ();i++)
+ {
+ Object* obj = Object::IDToPointer (i->cachedInstanceID);
+ if(obj)
+ {
+ DestroySingleObject(obj);
+ }
+ }
+ m_Resources.clear();
+}
+
+#if DEBUGMODE
+void BuiltinResourceManager::RegisterDebugUsedFileID (LocalIdentifierInFileType fileID, const char* name)
+{
+ if (!m_UsedFileIDs.insert (fileID).second)
+ ErrorString (Format ("File ID %d is registered twice (%s)", (int)fileID, name));
+}
+#endif
+
+#if UNITY_EDITOR
+
+BuiltinResourceManager& GetBuiltinExtraResourceManager ()
+{
+ return *gBuiltinExtraResourceManager;
+}
+
+#endif // #if UNITY_EDITOR
+
+ResourceManager::ResourceManager (MemLabelId label, ObjectCreationMode mode)
+: Super(label, mode)
+{
+ m_NeedsReload = true;
+}
+
+ResourceManager::~ResourceManager ()
+{
+}
+
+ResourceManager::range ResourceManager::GetAll ()
+{
+ #if UNITY_EDITOR
+ if (m_NeedsReload)
+ RebuildResources();
+ #endif
+
+ return make_pair (m_Container.begin(), m_Container.end());
+}
+
+ResourceManager::range ResourceManager::GetPathRange (const string& path)
+{
+ #if UNITY_EDITOR
+ if (m_NeedsReload)
+ RebuildResources();
+ #endif
+
+ return m_Container.equal_range(ToLower(path));
+}
+
+#if UNITY_EDITOR
+void ResourceManager::RebuildResources ()
+{
+ m_NeedsReload = !AssetDatabase::Get().GetAllResources(m_Container);
+}
+#endif
+
+void ResourceManager::ClearDependencyInfo ()
+{
+ m_DependentAssets.clear ();
+}
+
+void ResourceManager::PreloadDependencies (SInt32 instanceId)
+{
+ std::set<SInt32> parents;
+ PreloadDependencies (instanceId, parents);
+}
+
+void ResourceManager::PreloadDependencies (SInt32 instanceId, std::set<SInt32>& visited)
+{
+ if (visited.find (instanceId) != visited.end ())
+ return;
+
+ DependencyContainer::iterator it = std::lower_bound (m_DependentAssets.begin (), m_DependentAssets.end (), instanceId, ResourceManager::Dependency::Sorter ());
+ // Check if we actually found info for the object we're looking for. As we're using lower_bound, we might get back
+ // another object that is closest smallest.
+ if (it == m_DependentAssets.end () || it->object.GetInstanceID () != instanceId)
+ return;
+
+ visited.insert (it->object.GetInstanceID ());
+
+ for (size_t i = 0; i<it->dependencies.size (); ++i)
+ {
+ PPtr<Object> pptr = it->dependencies[i];
+ *pptr; // fetch
+ PreloadDependencies (pptr.GetInstanceID (), visited);
+ }
+}
+
+template<class TransferFunc>
+void ResourceManager::Transfer (TransferFunc& transfer)
+{
+ Super::Transfer (transfer);
+ AssertIf (transfer.GetFlags() & kPerformUnloadDependencyTracking);
+
+ transfer.Transfer(m_Container, "m_Container");
+
+ // Wee need dependent-assets only in the player
+ if (transfer.IsSerializingForGameRelease ())
+ transfer.Transfer(m_DependentAssets, "m_DependentAssets");
+
+ if (transfer.IsReading ())
+ std::sort (m_DependentAssets.begin (), m_DependentAssets.end (), ResourceManager::Dependency::Sorter ());
+}
+
+bool ResourceManager::ShouldIgnoreInGarbageDependencyTracking ()
+{
+ return true;
+}
+
+IMPLEMENT_CLASS (ResourceManager)
+IMPLEMENT_OBJECT_SERIALIZE (ResourceManager)
+GET_MANAGER (ResourceManager)
+