YIUILoopScrollChild.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. //------------------------------------------------------------
  2. // Author: 亦亦
  3. // Mail: 379338943@qq.com
  4. // Data: 2023年2月12日
  5. //------------------------------------------------------------
  6. using System;
  7. using System.Collections;
  8. using System.Collections.Generic;
  9. using YIUIFramework;
  10. using UnityEngine;
  11. using UnityEngine.UI;
  12. namespace ET.Client
  13. {
  14. /// <summary>
  15. /// 无限循环列表 (异步)
  16. /// 文档: https://lib9kmxvq7k.feishu.cn/wiki/HPbwwkhsKi9aDik5VEXcqPhDnIh
  17. /// </summary>
  18. [ChildOf]
  19. public partial class YIUILoopScrollChild : Entity, IAwake, IAwake<LoopScrollRect, Type>, IAwake<LoopScrollRect, Type, string>, IDestroy, IYIUILoopScrollPrefabAsyncSource, IYIUILoopScrollDataSource
  20. {
  21. public EntityRef<Entity> m_OwnerEntity;
  22. public Entity OwnerEntity => m_OwnerEntity;
  23. public YIUIBindVo m_BindVo;
  24. public Type m_DefaultDataType;
  25. public Type m_DataType;
  26. public LoopScrollRect m_Owner;
  27. public Type m_ItemType;
  28. public Type m_LoopRendererSystemType;
  29. public Type m_LoopOnClickSystemType;
  30. public Type m_LoopOnClickCheckSystemType;
  31. public ObjAsyncCache<EntityRef<Entity>> m_ItemPool;
  32. public Dictionary<Transform, EntityRef<Entity>> m_ItemTransformDic = new();
  33. public Dictionary<Transform, int> m_ItemTransformIndexDic = new();
  34. public YIUIInvokeEntity_LoadInstantiateByVo m_InvokeLoadInstantiate;
  35. public HashSet<long> m_BanLayerOptionForeverHashSet = new();
  36. private IList m_Data;
  37. public IList Data
  38. {
  39. get => m_Data;
  40. set
  41. {
  42. m_Data = value;
  43. if (m_Data is { Count: > 0 })
  44. {
  45. m_DataType = m_DefaultDataType ?? m_Data[0].GetType();
  46. m_LoopRendererSystemType = typeof(IYIUILoopRenderer<,,>).MakeGenericType(OwnerEntity?.GetType(), m_ItemType, m_DataType);
  47. m_LoopOnClickSystemType = typeof(IYIUILoopOnClick<,,>).MakeGenericType(OwnerEntity?.GetType(), m_ItemType, m_DataType);
  48. m_LoopOnClickCheckSystemType = typeof(IYIUILoopOnClickCheck<,,>).MakeGenericType(OwnerEntity?.GetType(), m_ItemType, m_DataType);
  49. }
  50. else
  51. {
  52. m_DataType = null;
  53. m_LoopRendererSystemType = null;
  54. m_LoopOnClickSystemType = null;
  55. m_LoopOnClickCheckSystemType = null;
  56. }
  57. }
  58. }
  59. #if UNITY_EDITOR
  60. public bool m_FirstCheckLayoutElement;
  61. #endif
  62. }
  63. }