예제 #1
0
        private bool PopulateItem(TData item,
                                  int index,
                                  FilterDelegate filter,
                                  InitializeDelegate initializer,
                                  InstantiateDelegate instantiator
                                  )
        {
            if (filter != null && !filter(item))
            {
                return(false);
            }

            TComponent component;

            if (index < this.pool.Count)
            {
                component = this.pool[index];
            }
            else
            {
                component = instantiator != null
                    ? instantiator(this.prefab, this.root)
                    : Object.Instantiate(this.prefab, this.root);

                this.pool.Add(component);
            }

            component.gameObject.SetActive(true);
            initializer?.Invoke(item, component);

            return(true);
        }
예제 #2
0
        // --------------------------------------------------------------------------------------------
        public static void CreateForGame(Game game, Unit unit, UnitData data, InstantiateDelegate callback)
        {
            AppManager.AssetManager.Load(data.prefabPath, (bool successful, GameObject payload) =>
            {
                if (successful)
                {
                    GameObject viewGo = Instantiate(payload, unit.Transform, false);

                    UnitView view       = viewGo.GetComponent <UnitView>();
                    view.Unit           = unit;
                    view._healthBarView = new UIUnitHealthBarView(game, unit);

                    _unitToView.Add(unit, view);

                    callback(view);
                }
            });
        }
예제 #3
0
        // --------------------------------------------------------------------------------------------
        public static void Create(BoardTile boardTile, InstantiateDelegate callback)
        {
            AppManager.AssetManager.Load(AssetPaths.Prefabs.BoardTileView, (bool successful, GameObject payload) =>
            {
                if (successful)
                {
                    GameObject viewGo = Instantiate(payload, boardTile.Transform, false);

                    BoardTileView view = viewGo.GetComponent <BoardTileView>();
                    view.BoardTile     = boardTile;
                    view._highlight    = EHighlight.None;

                    view.SetMaterial();

                    _boardTileToView.Add(boardTile, view);

                    callback(view);
                }
            });
        }
예제 #4
0
        public void Refresh(
            IEnumerable <TData> source,
            FilterDelegate filter            = null,
            InitializeDelegate initializer   = null,
            InstantiateDelegate instantiator = null
            )
        {
            var index = 0;

            if (source is IReadOnlyList <TData> sourceList)
            {
                for (var i = 0; i < sourceList.Count; i += 1)
                {
                    if (this.PopulateItem(sourceList[i], index, filter, initializer, instantiator))
                    {
                        index += 1;
                    }
                }
            }
            else
            {
                foreach (var item in source)
                {
                    if (this.PopulateItem(item, index, filter, initializer, instantiator))
                    {
                        index += 1;
                    }
                }
            }

            while (index < this.pool.Count)
            {
                this.pool[index].gameObject.SetActive(false);
                index += 1;
            }
        }