﻿using UnityEngine;

namespace JLGames.RocketDriver.Actions.Loaderx
{
    /// <summary>
    ///  Loader中使用到的Delegate定义
    /// </summary>
    public static class LoaderDelegate
    {
        /// <summary>
        /// AssetBundle加载/下载回调
        /// </summary>
        /// <param name="bundleRef">资源</param>
        /// <param name="suc">是否成功</param>
        public delegate void OnBundleLoaded(BundleRef bundleRef, bool suc);

        /// <summary>
        /// 批量加载/批量下载回调
        /// </summary>
        /// <param name="bundleRefs">资源列表</param>
        /// <param name="suc">是否成功</param>
        public delegate void OnMultiBundleLoaded(BundleRef[] bundleRefs, bool suc);

        /// <summary>
        /// 加载/下载回调
        /// </summary>
        /// <param name="asset">资源</param>
        /// <param name="suc">是否成功</param>
        /// <typeparam name="T">资源类型</typeparam>
        public delegate void OnAssetLoaded<in T>(T asset, bool suc) where T : Object;

        /// <summary>
        /// 批量加载/批量下载回调
        /// </summary>
        /// <param name="assets">资源列表</param>
        /// <param name="suc">是否成功</param>
        /// <typeparam name="T">资源类型</typeparam>
        public delegate void OnMultiAssetLoaded<in T>(T[] assets, bool suc) where T : Object;

        /// <summary>
        /// 加载资源回调
        /// </summary>
        /// <param name="bundleRef">资源Bundle</param>
        /// <param name="asset">资源</param>
        /// <param name="suc">是否成功</param>
        /// <typeparam name="T">资源类型</typeparam>
        public delegate void OnAssetWithBundleLoaded<in T>(BundleRef bundleRef, T asset, bool suc) where T : Object;

        /// <summary>
        /// 加载资源回调
        /// </summary>
        /// <param name="bundleRef">资源Bundle</param>
        /// <param name="asset">资源数组</param>
        /// <param name="suc">是否成功</param>
        /// <typeparam name="T">资源类型</typeparam>
        public delegate void OnAssetsWithBundleLoaded<in T>(BundleRef bundleRef, T[] asset, bool suc) where T : Object;
    }
}