コード例 #1
0
 public void RemoveCellControllerPrefabList(AbstractCellController cellController)
 {
     if (CellControllerPrefabList.Contains(cellController))
     {
         CellControllerPrefabList.Remove(cellController);
     }
 }
コード例 #2
0
 protected virtual void UpdateCell(AbstractCellController cc, AbstractCellData cd)
 {
     if (cc != null)
     {
         cc.UpdateCell(cd);
     }
 }
コード例 #3
0
    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);
    }
コード例 #4
0
    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);
    }
コード例 #5
0
    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);
    }
コード例 #6
0
    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");
        }
    }
コード例 #7
0
 public void AddCellControllerPrefabList(AbstractCellController cellController)
 {
     CellControllerPrefabList.Add(cellController);
 }