|
|
@@ -106,89 +106,6 @@ void SetResourcePath(String newPath, bool usePreferredDir = true)
|
|
|
sceneResourcePath = newPath;
|
|
|
}
|
|
|
|
|
|
-Array<Resource@> GetSceneResources()
|
|
|
-{
|
|
|
- Array<Resource@> sceneResources;
|
|
|
- Array<Node@> allNodes = editorScene.GetChildren(true);
|
|
|
-
|
|
|
- for (uint i = 0; i < allNodes.length; ++i)
|
|
|
- {
|
|
|
- for (uint j = 0; j < allNodes[i].numComponents; ++j)
|
|
|
- {
|
|
|
- Component@ comp = allNodes[i].components[j];
|
|
|
- for (uint k = 0; k < comp.numAttributes; ++k)
|
|
|
- {
|
|
|
- Variant attr = comp.attributes[k];
|
|
|
- if (attr.type == VAR_RESOURCEREF)
|
|
|
- {
|
|
|
- ResourceRef ref = attr.GetResourceRef();
|
|
|
- Resource@ resource = cache.GetResource(ref.type, ref.id);
|
|
|
- if (resource !is null)
|
|
|
- AddResourceIfUnique(sceneResources, resource);
|
|
|
- }
|
|
|
- else if (attr.type == VAR_RESOURCEREFLIST)
|
|
|
- {
|
|
|
- ResourceRefList refList = attr.GetResourceRefList();
|
|
|
- for (uint l = 0; l < refList.length; ++l)
|
|
|
- {
|
|
|
- Resource@ resource = cache.GetResource(refList.type, refList.ids[l]);
|
|
|
- if (resource !is null)
|
|
|
- AddResourceIfUnique(sceneResources, resource);
|
|
|
- }
|
|
|
- }
|
|
|
- else if (attr.type == VAR_VARIANTVECTOR)
|
|
|
- {
|
|
|
- Array<Variant>@ variants = attr.GetVariantVector();
|
|
|
- for (uint l = 0; l < variants.length; ++l)
|
|
|
- {
|
|
|
- if (variants[l].type == VAR_RESOURCEREF)
|
|
|
- {
|
|
|
- ResourceRef ref = variants[l].GetResourceRef();
|
|
|
- Resource@ resource = cache.GetResource(ref.type, ref.id);
|
|
|
- if (resource !is null)
|
|
|
- AddResourceIfUnique(sceneResources, resource);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return sceneResources;
|
|
|
-}
|
|
|
-
|
|
|
-void AddResourceIfUnique(Array<Resource@>@ sceneResources, Resource@ resource)
|
|
|
-{
|
|
|
- for (uint i = 0; i < sceneResources.length; ++i)
|
|
|
- {
|
|
|
- if (sceneResources[i] is resource)
|
|
|
- return;
|
|
|
- }
|
|
|
- sceneResources.Push(resource);
|
|
|
-}
|
|
|
-
|
|
|
-void ReloadResources()
|
|
|
-{
|
|
|
- Array<Resource@> sceneResources = GetSceneResources();
|
|
|
- for (uint i = 0; i < sceneResources.length; ++i)
|
|
|
- {
|
|
|
- // Handle material textures manually
|
|
|
- Material@ mat = cast<Material>(sceneResources[i]);
|
|
|
- if (mat !is null)
|
|
|
- {
|
|
|
- for (int j = 0; j < MAX_MATERIAL_TEXTURE_UNITS; ++j)
|
|
|
- {
|
|
|
- Texture@ tex = mat.textures[j];
|
|
|
- if (tex !is null)
|
|
|
- AddResourceIfUnique(sceneResources, tex);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- for (uint i = 0; i < sceneResources.length; ++i)
|
|
|
- cache.ReloadResource(sceneResources[i]);
|
|
|
-}
|
|
|
-
|
|
|
bool LoadScene(const String&in fileName)
|
|
|
{
|
|
|
if (fileName.empty)
|