using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class ExpertSkillCyclicScroll : MonoBehaviour { [SerializeField] ScrollRect m_Scroller; [SerializeField] RectTransform m_Content; [SerializeField] List m_ConditionCells; [SerializeField] float m_Elasticity = 0.1f; float speed = 10f; bool autoLerp = false; float targetNormalizedY = 0f; TreasureSkillModel model { get { return ModelCenter.Instance.GetModel(); } } int tempHeight = 0; public void Display(int skillId,int maxLevel) { CreateElements(maxLevel); for (int i = 0; i < m_ConditionCells.Count; i++) { m_ConditionCells[i].SetActive(i < maxLevel); if (i < maxLevel) { m_ConditionCells[i].Display(skillId, i + 1); } } tempHeight = (int)m_Content.rect.height; m_Scroller.verticalNormalizedPosition = 1f; } public void MoveToCenter(int index) { var height = 0f; for (int i = 0; i < m_ConditionCells.Count; i++) { if (i < index) { var rect = m_ConditionCells[i].transform as RectTransform; height += rect.rect.height; } } var viewHeight = (m_Scroller.transform as RectTransform).rect.height; var contentHeight = m_Content.rect.height; height -= viewHeight / 3; targetNormalizedY = Mathf.Clamp01(1 - height / (contentHeight - viewHeight)); autoLerp = true; } private void LateUpdate() { if (tempHeight != (int)m_Content.rect.height) { //创建后重刷新位置 m_Scroller.verticalNormalizedPosition = 1f; tempHeight = (int)m_Content.rect.height; } if (autoLerp) { if (Mathf.Abs(m_Scroller.verticalNormalizedPosition - targetNormalizedY) > 0.01f) { m_Scroller.verticalNormalizedPosition = Mathf.SmoothDamp(m_Scroller.verticalNormalizedPosition, targetNormalizedY, ref speed, m_Elasticity); } else { autoLerp = false; } } CloseExpertSkillSelectWin(); } private void CloseExpertSkillSelectWin() { if (model.CloseExpertSkillSelectWinTime != 0 && DateTime.Now.Ticks - model.CloseExpertSkillSelectWinTime > 15000000) { WindowCenter.Instance.Close(); model.CloseExpertSkillSelectWinTime = 0; }; } public void Dispose() { for (int i = 0; i < m_ConditionCells.Count; i++) { m_ConditionCells[i].Dispose(); } } void CreateElements(int count) { if (m_ConditionCells.Count < count) { var delta = count - m_ConditionCells.Count; for (int i = 0; i < delta; i++) { var go = GameObject.Instantiate(m_ConditionCells[0].gameObject); var instance = go.GetComponent(); go.transform.SetParentEx(m_Content, Vector3.zero, Quaternion.identity, Vector3.one); m_ConditionCells.Add(instance); } } } } }