//------------------------------------------------------------ // Game Framework // Copyright © 2013-2021 loyalsoft. All rights reserved. // Homepage: http://www.game7000.com/ // Feedback: http://www.game7000.com/ //------------------------------------------------------------ using GameFramework; using System.Collections.Generic; namespace UnityGameFramework.Editor.ResourceTools { /// /// 资源。 /// public sealed class Resource { private readonly List m_Assets; private readonly List m_ResourceGroups; private Resource(string name, string variant, string fileSystem, LoadType loadType, bool packed, string[] resourceGroups) { m_Assets = new List(); m_ResourceGroups = new List(); Name = name; Variant = variant; AssetType = AssetType.Unknown; FileSystem = fileSystem; LoadType = loadType; Packed = packed; foreach (string resourceGroup in resourceGroups) { AddResourceGroup(resourceGroup); } } public string Name { get; private set; } public string Variant { get; private set; } public string FullName { get { return Variant != null ? Utility.Text.Format("{0}.{1}", Name, Variant) : Name; } } public AssetType AssetType { get; private set; } public bool IsLoadFromBinary { get { return LoadType == LoadType.LoadFromBinary || LoadType == LoadType.LoadFromBinaryAndQuickDecrypt || LoadType == LoadType.LoadFromBinaryAndDecrypt; } } public string FileSystem { get; set; } public LoadType LoadType { get; set; } public bool Packed { get; set; } public static Resource Create(string name, string variant, string fileSystem, LoadType loadType, bool packed, string[] resourceGroups) { return new Resource(name, variant, fileSystem, loadType, packed, resourceGroups ?? new string[0]); } public Asset[] GetAssets() { return m_Assets.ToArray(); } public Asset GetFirstAsset() { return m_Assets.Count > 0 ? m_Assets[0] : null; } public void Rename(string name, string variant) { Name = name; Variant = variant; } public void AssignAsset(Asset asset, bool isScene) { if (asset.Resource != null) { asset.Resource.UnassignAsset(asset); } AssetType = isScene ? AssetType.Scene : AssetType.Asset; asset.Resource = this; m_Assets.Add(asset); m_Assets.Sort(AssetComparer); } public void UnassignAsset(Asset asset) { asset.Resource = null; m_Assets.Remove(asset); if (m_Assets.Count <= 0) { AssetType = AssetType.Unknown; } } public string[] GetResourceGroups() { return m_ResourceGroups.ToArray(); } public bool HasResourceGroup(string resourceGroup) { if (string.IsNullOrEmpty(resourceGroup)) { return false; } return m_ResourceGroups.Contains(resourceGroup); } public void AddResourceGroup(string resourceGroup) { if (string.IsNullOrEmpty(resourceGroup)) { return; } if (m_ResourceGroups.Contains(resourceGroup)) { return; } m_ResourceGroups.Add(resourceGroup); m_ResourceGroups.Sort(); } public bool RemoveResourceGroup(string resourceGroup) { if (string.IsNullOrEmpty(resourceGroup)) { return false; } return m_ResourceGroups.Remove(resourceGroup); } public void Clear() { foreach (Asset asset in m_Assets) { asset.Resource = null; } m_Assets.Clear(); m_ResourceGroups.Clear(); } private int AssetComparer(Asset a, Asset b) { return a.Guid.CompareTo(b.Guid); } } }