From a619df8e01562ff9898de8bd9b67a2c5a93e7d7d Mon Sep 17 00:00:00 2001 From: Sinai Date: Mon, 19 Apr 2021 23:47:41 +1000 Subject: [PATCH] Delete ScrollPool_bak.cs --- src/UI/Widgets/ScrollPool/ScrollPool_bak.cs | 494 -------------------- 1 file changed, 494 deletions(-) delete mode 100644 src/UI/Widgets/ScrollPool/ScrollPool_bak.cs diff --git a/src/UI/Widgets/ScrollPool/ScrollPool_bak.cs b/src/UI/Widgets/ScrollPool/ScrollPool_bak.cs deleted file mode 100644 index f4c7e36..0000000 --- a/src/UI/Widgets/ScrollPool/ScrollPool_bak.cs +++ /dev/null @@ -1,494 +0,0 @@ -//using System; -//using System.Collections; -//using System.Collections.Generic; -//using System.Linq; -//using System.Text; -//using UnityEngine; -//using UnityEngine.UI; -//using UnityExplorer.UI.Models; - -//namespace UnityExplorer.UI.Widgets -//{ -// /// -// /// A handler which pools displayed cells to improve performance. -// /// -// public class ScrollPool : UIBehaviourModel, IScrollPool -// { -// public ScrollPool(ScrollRect scrollRect) -// { -// this.scrollRect = scrollRect; -// Init(); -// } - -// public IPoolDataSource DataSource; - -// public int PoolCount => _cachedCells.Count; - -// public override GameObject UIRoot => scrollRect.gameObject; - -// /// Use -// public override void ConstructUI(GameObject parent) => throw new NotImplementedException(); - -// internal ScrollRect scrollRect; - -// public bool AutoResizeHandleRect { get; set; } - -// internal RectTransform PrototypeCell; -// internal Slider _slider; - -// // Cell pool -// private float _cellWidth, _cellHeight; -// private List _cellPool; -// private List _cachedCells; -// private Bounds _recyclableViewBounds; - -// /// -// /// Extra pooled cells above AND below the viewport (so actual extra pool is double this value). -// /// -// public int ExtraCellPoolSize = 2; - -// private readonly Vector3[] _corners = new Vector3[4]; -// private bool _recycling; -// private Vector2 _prevAnchoredPos; -// internal Vector2 _lastScroll; - -// internal int currentItemCount; //item count corresponding to the datasource. -// internal int topMostCellIndex, bottomMostCellIndex; //Topmost and bottommost cell in the heirarchy - -// public bool ExternallySetting -// { -// get => externallySetting; -// internal set -// { -// if (externallySetting == value) -// return; -// timeOfLastExternalSet = Time.time; -// externallySetting = value; -// } -// } -// private bool externallySetting; -// private float timeOfLastExternalSet; - -// private Vector2 zeroVector = Vector2.zero; - -// public override void Init() -// { -// _slider = scrollRect.GetComponentInChildren(); - -// _slider.onValueChanged.AddListener((float val) => -// { -// if (this.ExternallySetting) -// return; -// this.ExternallySetting = true; - -// // Jump to val * count (ie, 0.0 would jump to top, 1.0 would jump to bottom) -// var index = Math.Floor(val * DataSource.ItemCount); -// JumpToIndex((int)index); -// }); -// } - -// public override void Update() -// { -// if (externallySetting && timeOfLastExternalSet < Time.time) -// externallySetting = false; -// } - -// internal void OnValueChangedListener(Vector2 _) -// { -// if (ExternallySetting) -// return; - -// ExternallySetting = true; - -// Vector2 dir = scrollRect.content.anchoredPosition - _prevAnchoredPos; -// scrollRect.m_ContentStartPosition += ProcessValueChange(dir); -// _prevAnchoredPos = scrollRect.content.anchoredPosition; - -// UpdateSlider(); - -// // ExternallySetting = false; -// } - -// internal void UpdateSlider(bool forceValue = true) -// { -// int total = DataSource.ItemCount; -// total = Math.Max(total, 1); - -// var spread = _cellPool.Count - (ExtraCellPoolSize * 2); - -// if (forceValue) -// { -// var range = GetDisplayedRange(); -// if (spread >= total) -// _slider.value = 0f; -// else -// // top-most displayed index divided by (totalCount - displayedRange) -// _slider.value = (float)((decimal)range.x / Math.Max(1, (total - _cellPool.Count))); -// } - -// // resize the handle rect to reflect the size of the displayed content vs. the total content height. -// if (AutoResizeHandleRect) -// { -// var viewportHeight = scrollRect.viewport.rect.height; - -// var handleRatio = (decimal)spread / total; -// var handleHeight = viewportHeight * (float)Math.Min(1, handleRatio); - -// handleHeight = Math.Max(handleHeight, 15f); - -// // need to resize the handle container area for the size of the handle (bigger handle = smaller container) -// var container = _slider.m_HandleContainerRect; -// container.offsetMax = new Vector2(container.offsetMax.x, -(handleHeight * 0.5f)); -// container.offsetMin = new Vector2(container.offsetMin.x, handleHeight * 0.5f); - -// var handle = _slider.handleRect; - -// handle.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, handleHeight); - -// // if slider is 100% height then make it not interactable. -// _slider.interactable = !Mathf.Approximately(handleHeight, viewportHeight); -// } -// } - -// /// -// /// Try to jump to the specified index. Pretty accurate, not perfect. Currently assumes all elements are the same height. -// /// -// public void JumpToIndex(int index) -// { -// var realCount = DataSource.ItemCount; - -// // clamp to real index limit -// index = Math.Min(index, realCount - 1); - -// // add the buffer count to desired index and set our currentItemCount to that. -// currentItemCount = index + _cachedCells.Count; -// currentItemCount = Math.Max(Math.Min(currentItemCount, realCount - 1), _cachedCells.Count); -// Refresh(); - -// // if we're jumping to the very bottom we need to show the extra pooled cells which are normally hidden. -// var y = 0f; -// if (index >= realCount - (ExtraCellPoolSize * 4)) -// y = _cellHeight * (index - realCount + (4 * ExtraCellPoolSize)) + ExtraCellPoolSize; // add +1 to show the last entry. - -// scrollRect.content.anchoredPosition = new Vector2(scrollRect.content.anchoredPosition.x, y); -// } - -// /// -// /// Get the start and end indexes (relative to DataSource) of the cell pool -// /// -// public Vector2 GetDisplayedRange() -// { -// int max = currentItemCount; -// int min = max - _cachedCells.Count; -// return new Vector2(min, max); -// } - -// /// -// /// Initialize with the provided DataSource -// /// -// public void Initialize(IPoolDataSource dataSource) -// { -// DataSource = dataSource; - -// scrollRect.vertical = true; -// scrollRect.horizontal = false; - -// _prevAnchoredPos = scrollRect.content.anchoredPosition; -// scrollRect.onValueChanged.RemoveListener(OnValueChangedListener); - -// RuntimeProvider.Instance.StartCoroutine(InitCoroutine(() => -// { -// scrollRect.onValueChanged.AddListener(OnValueChangedListener); -// })); -// } - -// public void ReloadData() -// { -// ReloadData(DataSource); -// } - -// public void ReloadData(IPoolDataSource dataSource) -// { -// if (scrollRect.onValueChanged == null) -// return; - -// scrollRect.StopMovement(); - -// scrollRect.onValueChanged.RemoveListener(OnValueChangedListener); - -// DataSource = dataSource; - -// RuntimeProvider.Instance.StartCoroutine(InitCoroutine(() => -// scrollRect.onValueChanged.AddListener(OnValueChangedListener) -// )); - -// _prevAnchoredPos = scrollRect.content.anchoredPosition; -// } - -// public void Refresh() -// { -// if (DataSource == null || _cellPool == null) -// return; - -// int count = DataSource.ItemCount; -// if (currentItemCount > count) -// currentItemCount = Math.Max(count, _cellPool.Count); - -// SetRecyclingBounds(); -// RecycleBottomToTop(); -// RecycleTopToBottom(); - -// PopulateCells(); - -// RefreshContentSize(); - -// UpdateSlider(false); -// } - -// public void PopulateCells() -// { -// var width = scrollRect.viewport.rect.width; -// scrollRect.content.sizeDelta = new Vector2(width, scrollRect.content.sizeDelta.y); - -// int cellIndex = topMostCellIndex; -// var itemIndex = currentItemCount - _cachedCells.Count; -// int iterated = 0; -// while (iterated < _cachedCells.Count) -// { -// var cell = _cachedCells[cellIndex]; -// cellIndex++; -// if (cellIndex >= _cachedCells.Count) -// cellIndex = 0; -// DataSource.SetCell(cell, itemIndex); -// itemIndex++; - -// var rect = _cellPool[cellIndex]; -// rect.sizeDelta = new Vector2(width, rect.sizeDelta.y); - -// iterated++; -// } -// } - -// #region RECYCLING INIT - -// private IEnumerator InitCoroutine(Action onInitialized) -// { -// yield return null; -// SetTopAnchor(scrollRect.content); -// scrollRect.content.anchoredPosition = Vector3.zero; - -// yield return null; -// SetRecyclingBounds(); - -// //Cell Pool -// CreateCellPool(); -// currentItemCount = _cellPool.Count; -// topMostCellIndex = 0; -// bottomMostCellIndex = _cellPool.Count - 1; - -// //Set content height according to no of rows -// RefreshContentSize(); - -// SetTopAnchor(scrollRect.content); - -// onInitialized?.Invoke(); -// } - -// private void RefreshContentSize() -// { -// int noOfRows = 0; -// foreach (var cell in _cachedCells) -// if (cell.Enabled) noOfRows++; -// float contentYSize = noOfRows * _cellHeight; -// scrollRect.content.sizeDelta = new Vector2(scrollRect.content.sizeDelta.x, contentYSize); -// } - -// private void SetRecyclingBounds() -// { -// scrollRect.viewport.GetCorners(_corners); -// float threshHold = _cellHeight * ExtraCellPoolSize; //RecyclingThreshold * (_corners[2].y - _corners[0].y); -// _recyclableViewBounds.min = new Vector3(_corners[0].x, _corners[0].y - threshHold); -// _recyclableViewBounds.max = new Vector3(_corners[2].x, _corners[2].y + threshHold); -// } - -// private void CreateCellPool() -// { -// //Reseting Pool -// if (_cellPool != null) -// { -// _cellPool.ForEach((RectTransform item) => GameObject.Destroy(item.gameObject)); -// _cellPool.Clear(); -// _cachedCells.Clear(); -// } -// else -// { -// _cachedCells = new List(); -// _cellPool = new List(); -// } - -// //Set the prototype cell active and set cell anchor as top -// PrototypeCell.gameObject.SetActive(true); -// SetTopAnchor(PrototypeCell); - -// //Temps -// float currentPoolCoverage = 0; -// int poolSize = 0; -// float posY = 0; - -// //set new cell size according to its aspect ratio -// _cellWidth = scrollRect.content.rect.width; -// _cellHeight = PrototypeCell.rect.height; - -// //Get the required pool coverage and mininum size for the Cell pool -// float requiredCoverage = scrollRect.viewport.rect.height + (_cellHeight * (ExtraCellPoolSize * 2)); - -// //create cells untill the Pool area is covered -// while (currentPoolCoverage < requiredCoverage) -// { -// //Instantiate and add to Pool -// RectTransform item = GameObject.Instantiate(PrototypeCell.gameObject).GetComponent(); -// item.name = $"Cell_{_cachedCells.Count + 1}"; -// item.sizeDelta = new Vector2(_cellWidth, _cellHeight); -// _cellPool.Add(item); -// item.SetParent(scrollRect.content, false); - -// item.anchoredPosition = new Vector2(0, posY); -// posY = item.anchoredPosition.y - item.rect.height; -// currentPoolCoverage += item.rect.height; - -// //Setting data for Cell -// var cell = DataSource.CreateCell(item); -// _cachedCells.Add(cell); -// DataSource.SetCell(cell, poolSize); - -// //Update the Pool size -// poolSize++; -// } - -// //Deactivate prototype cell if it is not a prefab(i.e it's present in scene) -// if (PrototypeCell.gameObject.scene.IsValid()) -// PrototypeCell.gameObject.SetActive(false); -// } -// #endregion - -// #region RECYCLING - -// public Vector2 ProcessValueChange(Vector2 direction) -// { -// if (_recycling || _cellPool == null || _cellPool.Count == 0) -// return zeroVector; - -// //Updating Recyclable view bounds since it can change with resolution changes. -// SetRecyclingBounds(); - -// _lastScroll = direction; - -// if (direction.y > 0 && _cellPool[bottomMostCellIndex].MaxY() > _recyclableViewBounds.min.y) -// { -// return RecycleTopToBottom(); -// } -// else if (direction.y < 0 && _cellPool[topMostCellIndex].MinY() < _recyclableViewBounds.max.y) -// { -// return RecycleBottomToTop(); -// } - -// return zeroVector; -// } - -// /// -// /// Recycles cells from top to bottom in the List heirarchy -// /// -// private Vector2 RecycleTopToBottom() -// { -// _recycling = true; - -// int n = 0; -// float posY; - -// //to determine if content size needs to be updated -// //Recycle until cell at Top is avaiable and current item count smaller than datasource -// while (_cellPool[topMostCellIndex].MinY() > _recyclableViewBounds.max.y && currentItemCount < DataSource.ItemCount) -// { -// //Move top cell to bottom -// posY = _cellPool[bottomMostCellIndex].anchoredPosition.y - _cellPool[bottomMostCellIndex].sizeDelta.y; -// _cellPool[topMostCellIndex].anchoredPosition = new Vector2(_cellPool[topMostCellIndex].anchoredPosition.x, posY); - -// //Cell for row at -// DataSource.SetCell(_cachedCells[topMostCellIndex], currentItemCount); - -// //set new indices -// bottomMostCellIndex = topMostCellIndex; -// topMostCellIndex = (topMostCellIndex + 1) % _cellPool.Count; - -// currentItemCount++; -// n++; -// } - -// //Content anchor position adjustment. -// _cellPool.ForEach((RectTransform cell) => cell.anchoredPosition += n * Vector2.up * _cellPool[topMostCellIndex].sizeDelta.y); -// scrollRect.content.anchoredPosition -= n * Vector2.up * _cellPool[topMostCellIndex].sizeDelta.y; -// _recycling = false; -// return -new Vector2(0, n * _cellPool[topMostCellIndex].sizeDelta.y); -// } - -// /// -// /// Recycles cells from bottom to top in the List heirarchy -// /// -// private Vector2 RecycleBottomToTop() -// { -// _recycling = true; - -// int n = 0; -// float posY = 0; - -// //to determine if content size needs to be updated -// //Recycle until cell at bottom is avaiable and current item count is greater than cellpool size -// while (_cellPool[bottomMostCellIndex].MaxY() < _recyclableViewBounds.min.y && currentItemCount > _cellPool.Count) -// { -// //Move bottom cell to top -// posY = _cellPool[topMostCellIndex].anchoredPosition.y + _cellPool[topMostCellIndex].sizeDelta.y; -// _cellPool[bottomMostCellIndex].anchoredPosition = new Vector2(_cellPool[bottomMostCellIndex].anchoredPosition.x, posY); -// n++; - -// currentItemCount--; - -// //Cell for row at -// DataSource.SetCell(_cachedCells[bottomMostCellIndex], currentItemCount - _cellPool.Count); - -// //set new indices -// topMostCellIndex = bottomMostCellIndex; -// bottomMostCellIndex = (bottomMostCellIndex - 1 + _cellPool.Count) % _cellPool.Count; -// } - -// _cellPool.ForEach((RectTransform cell) => cell.anchoredPosition -= n * Vector2.up * _cellPool[topMostCellIndex].sizeDelta.y); -// scrollRect.content.anchoredPosition += n * Vector2.up * _cellPool[topMostCellIndex].sizeDelta.y; -// _recycling = false; -// return new Vector2(0, n * _cellPool[topMostCellIndex].sizeDelta.y); -// } - -// #endregion - -// #region HELPERS - -// /// -// /// Anchoring cell and content rect transforms to top preset. Makes repositioning easy. -// /// -// /// -// private void SetTopAnchor(RectTransform rectTransform) -// { -// //Saving to reapply after anchoring. Width and height changes if anchoring is change. -// float width = rectTransform.rect.width; -// float height = rectTransform.rect.height; - -// //Setting top anchor -// rectTransform.anchorMin = new Vector2(0.5f, 1); -// rectTransform.anchorMax = new Vector2(0.5f, 1); -// rectTransform.pivot = new Vector2(0.5f, 1); - -// //Reapply size -// rectTransform.sizeDelta = new Vector2(width, height); -// } - -// #endregion -// } -//}