summaryrefslogtreecommitdiff
path: root/Runtime/Misc/AssetBundle.h
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/AssetBundle.h
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Misc/AssetBundle.h')
-rw-r--r--Runtime/Misc/AssetBundle.h127
1 files changed, 127 insertions, 0 deletions
diff --git a/Runtime/Misc/AssetBundle.h b/Runtime/Misc/AssetBundle.h
new file mode 100644
index 0000000..803c8b7
--- /dev/null
+++ b/Runtime/Misc/AssetBundle.h
@@ -0,0 +1,127 @@
+#pragma once
+
+#include "Runtime/BaseClasses/NamedObject.h"
+
+#include <map>
+#include <utility>
+
+class UnityWebStream;
+class CachedUnityWebStream;
+
+class AssetBundleScriptInfo
+{
+public:
+ DECLARE_SERIALIZE(AssetBundleScriptInfo)
+
+ AssetBundleScriptInfo () {}
+ AssetBundleScriptInfo (const UnityStr& name, const UnityStr& ns, const UnityStr& assembly, UInt32 h) : className (name), nameSpace (ns), hash (h), assemblyName(assembly) {}
+ UnityStr className;
+ UnityStr nameSpace;
+ UnityStr assemblyName;
+ UInt32 hash;
+};
+
+
+class AssetBundle : public NamedObject
+{
+public:
+
+ typedef std::vector<AssetBundleScriptInfo> ScriptCompatibility;
+ typedef std::vector<std::pair<int, UInt32> > ClassCompatibility;
+
+ enum
+ {
+ /// A simple integer version count to keep track of changes to the
+ /// runtime that cause asset bundles to no longer work as intended.
+ /// Increase this version whenever you need to break backwards-compatibility.
+ /// An example of this is when we started to no longer package all default
+ /// resources with every player and thus broke asset bundles that were
+ /// referencing these resources.
+ ///
+ /// @note Runtime compatibility checks are bypassed for the webplayer where
+ /// breaking backwards-compatibility is not allowed at this point.
+ ///
+ /// @see TestAssetBundleCompatiblity
+ CURRENT_RUNTIME_COMPATIBILITY_VERSION = 1
+ };
+
+ struct AssetInfo
+ {
+ DECLARE_SERIALIZE(AssetInfo)
+
+ int preloadIndex;
+ int preloadSize;
+
+ PPtr<Object> asset;
+
+ AssetInfo () { preloadIndex = 0; preloadSize = 0; }
+ };
+ struct UncompressedFileInfo
+ {
+ std::string fileName;
+ UInt32 offset, size;
+
+ bool operator < (UncompressedFileInfo const& a) const { return fileName < a.fileName; }
+ };
+ typedef std::vector<UncompressedFileInfo> UncompressedFileInfoContainer;
+
+ DECLARE_OBJECT_SERIALIZE (AssetBundle)
+ REGISTER_DERIVED_CLASS (AssetBundle, NamedObject)
+
+ AssetBundle (MemLabelId label, ObjectCreationMode mode);
+ // ~AssetBundle (); declared-by-macro
+
+ typedef std::multimap<UnityStr, AssetInfo> AssetMap;
+ typedef AssetMap::iterator iterator;
+ typedef std::pair<iterator, iterator> range;
+
+ range GetAll ();
+ range GetPathRange (const string& path);
+
+ virtual bool ShouldIgnoreInGarbageDependencyTracking ();
+
+ void DebugPrintContents ();
+
+ // AssetBundle* file = GetEditorAssetBundle();
+ // if (file) {
+ // // Path MUST omit the extension
+ // MonoBehaviour* be = file->Get<MonoBehaviour>(MySkin);
+ // }
+ template<class T>
+ T* Get (const string& path)
+ {
+ Object* res = GetImpl (T::GetClassIDStatic (), path);
+ return static_cast<T*> (res);
+ }
+
+ Object* GetImpl (int classID, const string& path);
+
+ void AddScriptCompatibilityInfo (std::string const& className, std::string const& nameSpace, std::string const& assembly, UInt32 hash);
+ void FillHashTableForRuntimeClasses (std::vector<SInt32> const& classIds, TransferInstructionFlags transferFlags);
+
+ UInt32 m_RuntimeCompatibility;
+ ScriptCompatibility m_ScriptCompatibility;
+ ClassCompatibility m_ClassCompatibility;
+
+ /// AssetInfo for the main asset. Has no associated name.
+ AssetInfo m_MainAsset;
+
+ /// Table of objects that need to be pulled from the bundle by the preload
+ /// manager when a specific asset is loaded from the bundle. Each AssetInfo
+ /// entry has an associated range of entries in the preload table.
+ std::vector<PPtr<Object> > m_PreloadTable;
+
+ /// Map of named assets contained in the bundle. Multiple objects may
+ /// have the same name.
+ AssetMap m_Container;
+
+#if ENABLE_WWW
+ UnityWebStream* m_UnityWebStream;
+#endif
+#if ENABLE_CACHING
+ CachedUnityWebStream* m_CachedUnityWebStream;
+#endif
+ UncompressedFileInfoContainer* m_UncompressedFileInfo;
+};
+
+AssetBundle* GetEditorAssetBundle ();