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<ExpertSkillConditionCell> m_ConditionCells;
|
[SerializeField] float m_Elasticity = 0.1f;
|
|
float speed = 10f;
|
bool autoLerp = false;
|
|
float targetNormalizedY = 0f;
|
TreasureSkillModel model { get { return ModelCenter.Instance.GetModel<TreasureSkillModel>(); } }
|
|
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<ExpertSkillSelectWin>();
|
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<ExpertSkillConditionCell>();
|
go.transform.SetParentEx(m_Content, Vector3.zero, Quaternion.identity, Vector3.one);
|
m_ConditionCells.Add(instance);
|
}
|
}
|
}
|
}
|
}
|
|