UIAssetModule.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System;
  2. using UnityEngine;
  3. using XGame.Framework.Asset;
  4. namespace XGame.Framework.UI
  5. {
  6. internal class UIAssetModule : IUIAssetModule, IDisposable
  7. {
  8. private IAssetModule _assetModule;
  9. private UIContext _context;
  10. public UIAssetModule(UIContext context)
  11. {
  12. _context = context;
  13. _assetModule = new AssetModule();
  14. }
  15. IAssetLoadAsync<TResult> IUIAssetModule.LoadAsync<TResult>(string addressableName)
  16. {
  17. return _assetModule.LoadAsync<TResult>(addressableName);
  18. }
  19. void IUIAssetModule.Recycle(UnityEngine.Object obj, bool isDestroy)
  20. {
  21. if (obj is GameObject go)
  22. {
  23. _assetModule.Recycle(go, isDestroy);
  24. }
  25. else
  26. {
  27. _assetModule.Recycle(obj);
  28. }
  29. }
  30. IAssetLoadAsync<INestedView> IUIAssetModule.LoadNested(UIKey nestedKey)
  31. {
  32. var loadAsync = _assetModule.LoadAsync<UINested>(nestedKey.Key);
  33. var nestedAsync = new UINestedLoadAsync(loadAsync, nestedKey, null, _context);
  34. return nestedAsync;
  35. }
  36. void IUIAssetModule.Recycle(INestedView nestedView, bool isDestroy)
  37. {
  38. if (nestedView == null) return;
  39. nestedView.Disable();
  40. var nested = (nestedView as INestedInternal)?.Nested;
  41. (nestedView as IDisposable)?.Dispose();
  42. if (nested is UINested uiNested)
  43. {
  44. _assetModule.Recycle(uiNested.gameObject, isDestroy);
  45. }
  46. }
  47. void IUIAssetModule.StopAllAsyncs()
  48. {
  49. _assetModule.StopAllAsyncs();
  50. }
  51. //void IUIAssetModule.UnloadUnusedAssets()
  52. //{
  53. // _assetModule.UnloadUnusedAssets();
  54. //}
  55. void IDisposable.Dispose()
  56. {
  57. (_assetModule as IDisposable)?.Dispose();
  58. _assetModule = null;
  59. _context = null;
  60. }
  61. }
  62. }