// Copyright (c) Pixel Crushers. All rights reserved.
using UnityEngine;
using System.Collections.Generic;
namespace PixelCrushers.DialogueSystem
{
    /// 
    /// This class manages a list of asset bundles. It's used by DialogueSystemController.
    /// It allows you to register asset bundles and then load assets from asset bundles
    /// or Resources without having to specify which asset bundle (or Resources) contains
    /// the asset.
    /// 
    public class AssetBundleManager
    {
        private HashSet m_bundles = new HashSet();
        public void RegisterAssetBundle(AssetBundle bundle)
        {
            if (bundle == null) return;
            m_bundles.Add(bundle);
        }
        public void UnregisterAssetBundle(AssetBundle bundle)
        {
            if (bundle == null) return;
            m_bundles.Remove(bundle);
        }
        public UnityEngine.Object Load(string name)
        {
            foreach (var bundle in m_bundles)
            {
                if (bundle.Contains(name))
                {
                    return LoadFromBundle(bundle, name);
                }
            }
            return Resources.Load(name);
        }
        public UnityEngine.Object Load(string name, System.Type type)
        {
            foreach (var bundle in m_bundles)
            {
                if (bundle.Contains(name))
                {
                    return LoadFromBundle(bundle, name, type);
                }
            }
            return Resources.Load(name, type);
        }
        private UnityEngine.Object LoadFromBundle(AssetBundle bundle, string name)
        {
            return bundle.LoadAsset(name);
        }
        private UnityEngine.Object LoadFromBundle(AssetBundle bundle, string name, System.Type type)
        {
            return bundle.LoadAsset(name, type);
        }
    }
}