public void RemoveCellControllerPrefabList(AbstractCellController cellController) { if (CellControllerPrefabList.Contains(cellController)) { CellControllerPrefabList.Remove(cellController); } }
protected virtual void UpdateCell(AbstractCellController cc, AbstractCellData cd) { if (cc != null) { cc.UpdateCell(cd); } }
protected override AbstractCellController Spawn(RectTransform parent, AbstractCellData cellData) { if (cellData.CellControllerRef != null) { return(cellData.CellControllerRef); } AbstractCellController cc = GetReusableCell(cellData.CellControllerType); cc.transform.SetParent(parent, false); UpdateCell(cc, cellData); #if UNITY_EDITOR cc.name = parent.name; #endif if (ContainerCellData.ContainsKey(parent)) { ContainerCellData[parent] = cellData; } else { ContainerCellData.Add(parent, cellData); } if (cellData.OnSpawn != null) { cellData.OnSpawn(cellData); } return(cc); }
protected virtual void Despawn(RectTransform container) { if (!ContainerCellData.ContainsKey(container)) { return; } AbstractCellData cellData = ContainerCellData[container]; if (cellData.CellControllerRef == null) { return; } AbstractCellController cellController = cellData.CellControllerRef; if (!ReusableCellPool.ContainsKey(cellController.GetType())) { ReusableCellPool.Add(cellController.GetType(), new List <AbstractCellController>()); } ReusableCellPool[cellController.GetType()].Insert(0, cellController); if (NoDeactivations) { cellController.transform.SetParent(null, false); } else { cellController.gameObject.SetActive(false); cellController.transform.SetParent(transform, false); cellController.transform.SetSiblingIndex(-1000); } cellController.enabled = false; if (cellData.OnDespawn != null) { cellData.OnDespawn(cellData); } cellData.CellControllerRef = null; ContainerCellData.Remove(container); }
protected override AbstractCellController GetFirstInactiveReusableCell(Type type) { if (ReusableCellPool.ContainsKey(type)) { List <AbstractCellController> reusableControllerList = ReusableCellPool[type]; if (reusableControllerList.Count > 0) { AbstractCellController cellController = reusableControllerList[0]; ReusableCellPool[cellController.GetType()].Remove(cellController); cellController.enabled = true; if (!NoDeactivations) { cellController.gameObject.SetActive(true); } return(cellController); } } return(null); }
protected virtual AbstractCellController GetReusableCell(Type type) { AbstractCellController cc = GetFirstInactiveReusableCell(type); if (cc != null) { return(cc); } else { for (int i = 0; i < CellControllerPrefabList.Count; i++) { if (CellControllerPrefabList[i].GetType().Name.Equals(type.Name)) { return(Instantiate(CellControllerPrefabList[i])); } } throw new InvalidOperationException("Did not find CellController - check if the cells are linked in CellControllerList"); } }
public void AddCellControllerPrefabList(AbstractCellController cellController) { CellControllerPrefabList.Add(cellController); }