80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System.Collections; | |||
|  | using System.Collections.Generic; | |||
|  | using UnityEngine; | |||
|  | 
 | |||
|  | public abstract class UIListView<T> : MonoBehaviour, IListView where T : UIListCell | |||
|  | { | |||
|  |     public abstract int Count | |||
|  |     { | |||
|  |         get; | |||
|  |     } | |||
|  | 
 | |||
|  |     [SerializeField] GameObject mTplCell; | |||
|  |     [SerializeField] Transform mCtnCells; | |||
|  | 
 | |||
|  |     protected List<T> mCellList; | |||
|  | 
 | |||
|  |     public virtual void Show(bool pShow) | |||
|  |     { | |||
|  |         gameObject.SetActive(pShow); | |||
|  |     } | |||
|  | 
 | |||
|  |     public virtual void LoadData() | |||
|  |     { | |||
|  |         if (mCellList == null) | |||
|  |         { | |||
|  |             mCellList = new List<T>(); | |||
|  |         } | |||
|  | 
 | |||
|  |         for (int i = 0; i < Count; i++) | |||
|  |         { | |||
|  |             T tCell = null; | |||
|  |             if (i < mCellList.Count) | |||
|  |             { | |||
|  |                 tCell = mCellList[i]; | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 tCell = SpawnCell(); | |||
|  |                 mCellList.Add(tCell); | |||
|  |             } | |||
|  | 
 | |||
|  |             tCell.gameObject.SetActive(true); | |||
|  |             tCell.SetIndex(i); | |||
|  |             ConfigCell(tCell); | |||
|  |         } | |||
|  | 
 | |||
|  |         HideUnused(); | |||
|  |     } | |||
|  | 
 | |||
|  |     public virtual void ClearSelection() | |||
|  |     { | |||
|  | 
 | |||
|  |     } | |||
|  | 
 | |||
|  |     protected abstract void ConfigCell(T pCell); | |||
|  | 
 | |||
|  |     private T SpawnCell() | |||
|  |     { | |||
|  |         GameObject tCellOb = Instantiate(mTplCell, mCtnCells); | |||
|  | 
 | |||
|  |         tCellOb.transform.localScale = Vector3.one; | |||
|  | 
 | |||
|  |         return tCellOb.GetComponent<T>(); | |||
|  |     } | |||
|  | 
 | |||
|  |     private void HideUnused() | |||
|  |     { | |||
|  |         for (int i = Count; i < mCellList.Count; i++) | |||
|  |         { | |||
|  |             mCellList[i].gameObject.SetActive(false); | |||
|  |         } | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | public interface IListView | |||
|  | { | |||
|  |     void Show(bool pShow); | |||
|  |     void LoadData(); | |||
|  |     void ClearSelection(); | |||
|  | } |