Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / manager / ResourceManager.cs
@小李xl 小李xl on 20 May 2023 3 KB 升级到Godot4.1.dev2
  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. /// 默认字体资源, 字体大小16px
  47. /// </summary>
  48. public static Font DefaultFont16Px
  49. {
  50. get
  51. {
  52. if (_defaultFont16Px == null)
  53. {
  54. _defaultFont16Px = Load<Font>(ResourcePath.resource_font_VonwaonBitmap16px_ttf);
  55. }
  56.  
  57. return _defaultFont16Px;
  58. }
  59. }
  60. private static Font _defaultFont16Px;
  61. /// <summary>
  62. /// 默认字体资源, 字体大小12px
  63. /// </summary>
  64. public static Font DefaultFont12Px
  65. {
  66. get
  67. {
  68. if (_defaultFont12Px == null)
  69. {
  70. _defaultFont12Px = Load<Font>(ResourcePath.resource_font_VonwaonBitmap12px_ttf);
  71. }
  72.  
  73. return _defaultFont12Px;
  74. }
  75. }
  76. private static Font _defaultFont12Px;
  77. //缓存的资源
  78. private static readonly Dictionary<string, object> CachePack = new Dictionary<string, object>();
  79.  
  80. /// <summary>
  81. /// 加载资源对象, 并且缓存当前资源对象, 可频繁获取
  82. /// </summary>
  83. /// <param name="path">资源路径</param>
  84. /// <param name="useCache">是否使用缓存中的资源</param>
  85. public static T Load<T>(string path, bool useCache = true) where T : class
  86. {
  87. if (!useCache)
  88. {
  89. var res = ResourceLoader.Load<T>(path, null, ResourceLoader.CacheMode.Ignore);
  90. if (res == null)
  91. {
  92. GD.PrintErr("加载资源失败, 未找到资源: " + path);
  93. return default;
  94. }
  95.  
  96. return res;
  97. }
  98.  
  99. if (CachePack.TryGetValue(path, out var pack))
  100. {
  101. return pack as T;
  102. }
  103.  
  104. pack = ResourceLoader.Load<T>(path);
  105. if (pack != null)
  106. {
  107. CachePack.Add(path, pack);
  108. return pack as T;
  109. }
  110. else
  111. {
  112. GD.PrintErr("加载资源失败, 未找到资源: " + path);
  113. }
  114.  
  115. return default;
  116. }
  117.  
  118. /// <summary>
  119. /// 加载并且实例化场景, 并返回
  120. /// </summary>
  121. /// <param name="path">场景路径</param>
  122. public static T LoadAndInstantiate<T>(string path) where T : Node
  123. {
  124. var packedScene = Load<PackedScene>(path);
  125. return packedScene.Instantiate<T>();
  126. }
  127. }