Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / manager / ResourceManager.cs
  1. using System.Collections.Generic;
  2. using Godot;
  3.  
  4. /// <summary>
  5. /// 资源管理器
  6. /// </summary>
  7. public static class ResourceManager
  8. {
  9. /// <summary>
  10. /// 颜色混合材质
  11. /// </summary>
  12. public static ShaderMaterial BlendMaterial
  13. {
  14. get
  15. {
  16. if (_shadowMaterial == null)
  17. {
  18. _shadowMaterial = Load<ShaderMaterial>(ResourcePath.resource_material_Blend_tres);
  19. }
  20.  
  21. return _shadowMaterial;
  22. }
  23. }
  24.  
  25. private static ShaderMaterial _shadowMaterial;
  26.  
  27. /// <summary>
  28. /// 颜色混合Shader
  29. /// </summary>
  30. public static Shader BlendShader
  31. {
  32. get
  33. {
  34. if (_shadowShader == null)
  35. {
  36. _shadowShader = Load<Shader>(ResourcePath.resource_material_Blend_tres);
  37. }
  38.  
  39. return _shadowShader;
  40. }
  41. }
  42.  
  43. private static Shader _shadowShader;
  44.  
  45. /// <summary>
  46. /// 默认字体资源
  47. /// </summary>
  48. public static Font DefaultFont
  49. {
  50. get
  51. {
  52. if (_defaultFont == null)
  53. {
  54. _defaultFont = Load<Font>(ResourcePath.resource_font_VonwaonBitmap16px_ttf);
  55. }
  56.  
  57. return _defaultFont;
  58. }
  59. }
  60. private static Font _defaultFont;
  61. //缓存的资源
  62. private static readonly Dictionary<string, object> CachePack = new Dictionary<string, object>();
  63.  
  64. /// <summary>
  65. /// 加载资源对象, 并且缓存当前资源对象, 可频繁获取
  66. /// </summary>
  67. /// <param name="path">资源路径</param>
  68. /// <param name="useCache">是否使用缓存中的资源</param>
  69. public static T Load<T>(string path, bool useCache = true) where T : class
  70. {
  71. if (!useCache)
  72. {
  73. var res = ResourceLoader.Load<T>(path, null, ResourceLoader.CacheMode.Ignore);
  74. if (res == null)
  75. {
  76. GD.PrintErr("加载资源失败, 未找到资源: " + path);
  77. return default;
  78. }
  79.  
  80. return res;
  81. }
  82.  
  83. if (CachePack.TryGetValue(path, out var pack))
  84. {
  85. return pack as T;
  86. }
  87.  
  88. pack = ResourceLoader.Load<T>(path);
  89. if (pack != null)
  90. {
  91. CachePack.Add(path, pack);
  92. return pack as T;
  93. }
  94. else
  95. {
  96. GD.PrintErr("加载资源失败, 未找到资源: " + path);
  97. }
  98.  
  99. return default;
  100. }
  101.  
  102. /// <summary>
  103. /// 加载并且实例化场景, 并返回
  104. /// </summary>
  105. /// <param name="path">场景路径</param>
  106. public static T LoadAndInstantiate<T>(string path) where T : Node
  107. {
  108. var packedScene = Load<PackedScene>(path);
  109. return packedScene.Instantiate<T>();
  110. }
  111. }