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); }
// -------------------------------------------------------------------------------------------- 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); } }); }
// -------------------------------------------------------------------------------------------- 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); } }); }
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; } }