| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | using System;using System.Collections.Generic;using System.IO;using UnityEngine;namespace VEngine{    [Serializable]    public class ManifestBundle    {        public static ManifestBundle Empty = new ManifestBundle();        public int id;        public string name;        public List<string> assets;        public long size;        public uint crc;        public string nameWithAppendHash;        public int[] dependencies;    }    public class Manifest : ScriptableObject    {        public static readonly ManifestBundle[] EmptyBundles = new ManifestBundle[0];        public int version;        public string appVersion;        public List<ManifestBundle> bundles = new List<ManifestBundle>();        private Dictionary<string, ManifestBundle> nameWithBundles = new Dictionary<string, ManifestBundle>();        public Action<string> onReadAsset;        public Dictionary<string, ManifestBundle> GetBundles()        {            var dictionary = new Dictionary<string, ManifestBundle>();            foreach (var bundle in bundles) dictionary[bundle.name] = bundle;            return dictionary;        }        public bool Contains(string assetPath)        {            return nameWithBundles.ContainsKey(assetPath);        }        public ManifestBundle GetBundle(string assetPath)        {            ManifestBundle manifestBundle;            return nameWithBundles.TryGetValue(assetPath, out manifestBundle) ? manifestBundle : null;        }        public ManifestBundle[] GetDependencies(ManifestBundle bundle)        {            if (bundle == null) return EmptyBundles;            return Array.ConvertAll(bundle.dependencies, input => bundles[input]);        }        public void Override(Manifest manifest)        {            version = manifest.version;            bundles = manifest.bundles;            nameWithBundles = manifest.nameWithBundles;        }        public static string GetVersionFile(string file)        {            return $"{file}.version";        }        public void Load(string path)        {            var json = File.ReadAllText(path);            JsonUtility.FromJsonOverwrite(json, this);            nameWithBundles.Clear();            if (onReadAsset != null)                foreach (var bundle in bundles)                {                    nameWithBundles[bundle.nameWithAppendHash] = bundle;                    foreach (var asset in bundle.assets)                    {                        nameWithBundles[asset] = bundle;                        onReadAsset.Invoke(asset);                    }                }            else                foreach (var bundle in bundles)                {                    nameWithBundles[bundle.nameWithAppendHash] = bundle;                    foreach (var asset in bundle.assets) nameWithBundles[asset] = bundle;                }        }        public void AddAsset(string assetPath)        {            nameWithBundles[assetPath] = ManifestBundle.Empty;            if (onReadAsset != null) onReadAsset(assetPath);        }    }}
 |