Newer
Older
DungeonShooting / DungeonShooting_Godot / src / manager / ResourceManager.cs
using System.Collections.Generic;
using Godot;

public static class ResourceManager
{

    /// <summary>
    /// 2D阴影的材质
    /// </summary>
    public static ShaderMaterial ShadowMaterial
    {
        get
        {
            if (_shadowMaterial == null)
            {
                _shadowMaterial = ResourceLoader.Load<ShaderMaterial>("res://resource/materlal/Shadow.tres");
            }
            return _shadowMaterial;
        }
    }
    private static ShaderMaterial _shadowMaterial;

    /// <summary>
    /// 2D阴影的Shader
    /// </summary>
    public static Shader ShadowShader
    {
        get
        {
            if (_shadowShader == null)
            {
                _shadowShader = ResourceLoader.Load<Shader>("res://resource/materlal/Shadow.gdshader");
            }
            return _shadowShader;
        }
    }
    private static Shader _shadowShader;

    private static readonly Dictionary<string, object> CachePack = new Dictionary<string, object>();

    /// <summary>
    /// 加载资源对象, 并且缓存当前资源对象, 可频繁获取
    /// </summary>
    /// <param name="path">资源路径</param>
    public static T Load<T>(string path) where T : class
    {
        if (CachePack.TryGetValue(path, out var pack))
        {
            return (T)pack;
        }
        else
        {
            pack = ResourceLoader.Load(path);
            if (pack != null)
            {
                CachePack.Add(path, pack);
                return (T)pack;
            }
        }
        return default(T);
    }

    /// <summary>
    /// 加载并实例化一个武器对象
    /// </summary>
    /// <param name="path">资源路径</param>
    public static Weapon LoadWeaponAndInstance(string path)
    {
        var pack = Load<PackedScene>(path);
        if (pack != null)
        {
            return pack.Instance<Weapon>();
        }
        return null;
    }

}