瀏覽代碼

Preload prefabs

Josh Engebretson 10 年之前
父節點
當前提交
f38b1e0ab2

+ 13 - 5
Source/ToolCore/Assets/Asset.cpp

@@ -54,6 +54,14 @@ bool Asset::Import()
     return importer_->Import(guid_);
     return importer_->Import(guid_);
 }
 }
 
 
+bool Asset::Preload()
+{
+    if (importer_.Null())
+        return true;
+
+    return importer_->Preload();
+}
+
 // load .asset
 // load .asset
 bool Asset::Load()
 bool Asset::Load()
 {
 {
@@ -164,7 +172,7 @@ bool Asset::CreateImporter()
     {
     {
         name_ = GetFileName(RemoveTrailingSlash(path_));
         name_ = GetFileName(RemoveTrailingSlash(path_));
         isFolder_ = true;
         isFolder_ = true;
-        importer_ = new FolderImporter(context_);
+        importer_ = new FolderImporter(context_, this);
     }
     }
     else
     else
     {
     {
@@ -184,19 +192,19 @@ bool Asset::CreateImporter()
         }
         }
         else if (ext == ".prefab")
         else if (ext == ".prefab")
         {
         {
-            importer_ = new PrefabImporter(context_);
+            importer_ = new PrefabImporter(context_, this);
         }
         }
         else if (ext == ".scene")
         else if (ext == ".scene")
         {
         {
-            importer_ = new SceneImporter(context_);
+            importer_ = new SceneImporter(context_, this);
         }
         }
         else if (ext == ".material")
         else if (ext == ".material")
         {
         {
-            importer_ = new MaterialImporter(context_);
+            importer_ = new MaterialImporter(context_, this);
         }
         }
         else if (textureFormats.Contains(ext))
         else if (textureFormats.Contains(ext))
         {
         {
-            importer_ = new TextureImporter(context_);
+            importer_ = new TextureImporter(context_, this);
         }
         }
 
 
     }
     }

+ 1 - 0
Source/ToolCore/Assets/Asset.h

@@ -24,6 +24,7 @@ public:
     virtual ~Asset();
     virtual ~Asset();
 
 
     bool Import();
     bool Import();
+    bool Preload();
 
 
     // the .fbx, .png, etc path, attempts to load .asset, creates missing .asset
     // the .fbx, .png, etc path, attempts to load .asset, creates missing .asset
     bool SetPath(const String& path);
     bool SetPath(const String& path);

+ 16 - 0
Source/ToolCore/Assets/AssetDatabase.cpp

@@ -176,6 +176,20 @@ void AssetDatabase::ImportDirtyAssets()
 
 
 }
 }
 
 
+void AssetDatabase::PreloadAssets()
+{
+
+    List<SharedPtr<Asset>>::ConstIterator itr = assets_.Begin();
+
+    while (itr != assets_.End())
+    {
+        (*itr)->Preload();
+        itr++;
+    }
+
+}
+
+
 void AssetDatabase::Scan()
 void AssetDatabase::Scan()
 {
 {
     PruneOrphanedDotAssetFiles();
     PruneOrphanedDotAssetFiles();
@@ -244,6 +258,8 @@ void AssetDatabase::Scan()
 
 
     }
     }
 
 
+    PreloadAssets();
+
     ImportDirtyAssets();
     ImportDirtyAssets();
 
 
 }
 }

+ 1 - 0
Source/ToolCore/Assets/AssetDatabase.h

@@ -50,6 +50,7 @@ private:
     void Import(const String& path);
     void Import(const String& path);
 
 
     void ImportDirtyAssets();
     void ImportDirtyAssets();
+    void PreloadAssets();
 
 
     SharedPtr<Project> project_;
     SharedPtr<Project> project_;
     List<SharedPtr<Asset>> assets_;
     List<SharedPtr<Asset>> assets_;

+ 2 - 1
Source/ToolCore/Assets/AssetImporter.cpp

@@ -7,7 +7,8 @@
 namespace ToolCore
 namespace ToolCore
 {
 {
 
 
-AssetImporter::AssetImporter(Context* context) : Object(context),
+AssetImporter::AssetImporter(Context* context, Asset *asset) : Object(context),
+    asset_(asset),
     requiresCacheFile_(true)
     requiresCacheFile_(true)
 {
 {
     SetDefaults();
     SetDefaults();

+ 5 - 1
Source/ToolCore/Assets/AssetImporter.h

@@ -9,6 +9,8 @@ using namespace Atomic;
 namespace ToolCore
 namespace ToolCore
 {
 {
 
 
+class Asset;
+
 /// deals with .asset files
 /// deals with .asset files
 class AssetImporter : public Object
 class AssetImporter : public Object
 {
 {
@@ -16,7 +18,7 @@ class AssetImporter : public Object
 
 
 public:
 public:
     /// Construct.
     /// Construct.
-    AssetImporter(Context* context);
+    AssetImporter(Context* context, Asset* asset);
     virtual ~AssetImporter();
     virtual ~AssetImporter();
 
 
     // load .asset
     // load .asset
@@ -28,11 +30,13 @@ public:
 
 
     /// Imports to cached data
     /// Imports to cached data
     virtual bool Import(const String& guid) = 0;
     virtual bool Import(const String& guid) = 0;
+    virtual bool Preload() { return true; }
 
 
     bool RequiresCacheFile() const { return requiresCacheFile_; }
     bool RequiresCacheFile() const { return requiresCacheFile_; }
 
 
 protected:
 protected:
 
 
+    WeakPtr<Asset> asset_;
     JSONValue jsonRoot_;   
     JSONValue jsonRoot_;   
     bool requiresCacheFile_;
     bool requiresCacheFile_;
 
 

+ 1 - 1
Source/ToolCore/Assets/FolderImporter.cpp

@@ -6,7 +6,7 @@
 namespace ToolCore
 namespace ToolCore
 {
 {
 
 
-FolderImporter::FolderImporter(Context* context) : AssetImporter(context)
+FolderImporter::FolderImporter(Context* context, Asset* asset) : AssetImporter(context, asset)
 {
 {
 
 
 }
 }

+ 1 - 1
Source/ToolCore/Assets/FolderImporter.h

@@ -12,7 +12,7 @@ class FolderImporter : public AssetImporter
 
 
 public:
 public:
     /// Construct.
     /// Construct.
-    FolderImporter(Context* context);
+    FolderImporter(Context* context, Asset* asset);
     virtual ~FolderImporter();
     virtual ~FolderImporter();
 
 
     virtual void SetDefaults();
     virtual void SetDefaults();

+ 1 - 1
Source/ToolCore/Assets/MaterialImporter.cpp

@@ -6,7 +6,7 @@
 namespace ToolCore
 namespace ToolCore
 {
 {
 
 
-MaterialImporter::MaterialImporter(Context* context) : AssetImporter(context)
+MaterialImporter::MaterialImporter(Context* context, Asset* asset) : AssetImporter(context, asset)
 {
 {
 
 
 }
 }

+ 1 - 1
Source/ToolCore/Assets/MaterialImporter.h

@@ -12,7 +12,7 @@ class MaterialImporter : public AssetImporter
 
 
 public:
 public:
     /// Construct.
     /// Construct.
-    MaterialImporter(Context* context);
+    MaterialImporter(Context* context, Asset *asset);
     virtual ~MaterialImporter();
     virtual ~MaterialImporter();
 
 
     virtual void SetDefaults();
     virtual void SetDefaults();

+ 1 - 2
Source/ToolCore/Assets/ModelImporter.cpp

@@ -20,8 +20,7 @@ namespace ToolCore
 {
 {
 
 
 /// Node + Model (static or animated)
 /// Node + Model (static or animated)
-ModelImporter::ModelImporter(Context* context, Asset *asset) : AssetImporter(context),
-    asset_(asset)
+ModelImporter::ModelImporter(Context* context, Asset *asset) : AssetImporter(context, asset)
 {
 {
     SetDefaults();
     SetDefaults();
 }
 }

+ 1 - 1
Source/ToolCore/Assets/ModelImporter.h

@@ -70,7 +70,7 @@ protected:
     virtual bool LoadSettingsInternal();
     virtual bool LoadSettingsInternal();
     virtual bool SaveSettingsInternal();
     virtual bool SaveSettingsInternal();
 
 
-    WeakPtr<Asset> asset_;
+
     float scale_;
     float scale_;
     bool importAnimations_;
     bool importAnimations_;
     Vector<SharedPtr<AnimationImportInfo>> animationInfo_;
     Vector<SharedPtr<AnimationImportInfo>> animationInfo_;

+ 15 - 3
Source/ToolCore/Assets/PrefabImporter.cpp

@@ -2,6 +2,8 @@
 #include <Atomic/Resource/ResourceCache.h>
 #include <Atomic/Resource/ResourceCache.h>
 #include <Atomic/Resource/Image.h>
 #include <Atomic/Resource/Image.h>
 
 
+#include <Atomic/Scene/Scene.h>
+
 #include "Asset.h"
 #include "Asset.h"
 #include "AssetDatabase.h"
 #include "AssetDatabase.h"
 #include "PrefabImporter.h"
 #include "PrefabImporter.h"
@@ -9,7 +11,7 @@
 namespace ToolCore
 namespace ToolCore
 {
 {
 
 
-PrefabImporter::PrefabImporter(Context* context) : AssetImporter(context)
+PrefabImporter::PrefabImporter(Context* context, Asset* asset) : AssetImporter(context, asset)
 {
 {
     requiresCacheFile_ = false;
     requiresCacheFile_ = false;
 }
 }
@@ -24,6 +26,18 @@ void PrefabImporter::SetDefaults()
     AssetImporter::SetDefaults();
     AssetImporter::SetDefaults();
 }
 }
 
 
+bool PrefabImporter::Preload()
+{
+    if (!asset_)
+        return false;
+
+    preloadResourceScene_ = new Scene(context_);
+    SharedPtr<File> file(new File(context_, asset_->GetPath()));
+    preloadResourceScene_->LoadAsyncXML(file, LOAD_RESOURCES_ONLY);
+
+    return true;
+}
+
 bool PrefabImporter::Import(const String& guid)
 bool PrefabImporter::Import(const String& guid)
 {
 {
     AssetDatabase* db = GetSubsystem<AssetDatabase>();
     AssetDatabase* db = GetSubsystem<AssetDatabase>();
@@ -32,8 +46,6 @@ bool PrefabImporter::Import(const String& guid)
     if (!asset)
     if (!asset)
         return false;
         return false;
 
 
-    ResourceCache* cache = GetSubsystem<ResourceCache>();
-
     return true;
     return true;
 }
 }
 
 

+ 11 - 1
Source/ToolCore/Assets/PrefabImporter.h

@@ -3,6 +3,11 @@
 
 
 #include "AssetImporter.h"
 #include "AssetImporter.h"
 
 
+namespace Atomic
+{
+class Scene;
+}
+
 namespace ToolCore
 namespace ToolCore
 {
 {
 
 
@@ -12,18 +17,23 @@ class PrefabImporter : public AssetImporter
 
 
 public:
 public:
     /// Construct.
     /// Construct.
-    PrefabImporter(Context* context);
+    PrefabImporter(Context* context, Asset* asset);
     virtual ~PrefabImporter();
     virtual ~PrefabImporter();
 
 
     virtual void SetDefaults();
     virtual void SetDefaults();
 
 
     bool Import(const String& guid);
     bool Import(const String& guid);
+    virtual bool Preload();
 
 
 protected:
 protected:
 
 
     virtual bool LoadSettingsInternal();
     virtual bool LoadSettingsInternal();
     virtual bool SaveSettingsInternal();
     virtual bool SaveSettingsInternal();
 
 
+private:
+
+   SharedPtr<Atomic::Scene> preloadResourceScene_;
+
 };
 };
 
 
 }
 }

+ 1 - 1
Source/ToolCore/Assets/SceneImporter.cpp

@@ -6,7 +6,7 @@
 namespace ToolCore
 namespace ToolCore
 {
 {
 
 
-SceneImporter::SceneImporter(Context* context) : AssetImporter(context)
+SceneImporter::SceneImporter(Context* context, Asset* asset) : AssetImporter(context, asset)
 {
 {
 
 
 }
 }

+ 1 - 1
Source/ToolCore/Assets/SceneImporter.h

@@ -12,7 +12,7 @@ class SceneImporter : public AssetImporter
 
 
 public:
 public:
     /// Construct.
     /// Construct.
-    SceneImporter(Context* context);
+    SceneImporter(Context* context, Asset *asset);
     virtual ~SceneImporter();
     virtual ~SceneImporter();
 
 
     virtual void SetDefaults();
     virtual void SetDefaults();

+ 1 - 1
Source/ToolCore/Assets/TextureImporter.cpp

@@ -9,7 +9,7 @@
 namespace ToolCore
 namespace ToolCore
 {
 {
 
 
-TextureImporter::TextureImporter(Context* context) : AssetImporter(context)
+TextureImporter::TextureImporter(Context* context, Asset *asset) : AssetImporter(context, asset)
 {
 {
 
 
 }
 }

+ 1 - 1
Source/ToolCore/Assets/TextureImporter.h

@@ -12,7 +12,7 @@ class TextureImporter : public AssetImporter
 
 
 public:
 public:
     /// Construct.
     /// Construct.
-    TextureImporter(Context* context);
+    TextureImporter(Context* context, Asset* asset);
     virtual ~TextureImporter();
     virtual ~TextureImporter();
 
 
     virtual void SetDefaults();
     virtual void SetDefaults();