using System.Collections;
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace Snxxz.UI
|
{
|
public class RealmProgressBehaviour : MonoBehaviour
|
{
|
[SerializeField] RealmStageBehaviour[] m_RealmStages;
|
[SerializeField] SmoothSlider m_ItemSlider;
|
[SerializeField] Text m_RealmPoint;
|
[SerializeField] Text m_OpenRemind;
|
[SerializeField] RectTransform m_ContainerPoint;
|
[SerializeField] float m_StartRealmPositionx;
|
[SerializeField] float m_EndRealmPositionx;
|
[SerializeField] float m_BigRealmBottomWidth;
|
[SerializeField] float m_Spacing;
|
|
[SerializeField] RectTransform m_ContainerRemind;
|
[SerializeField] PropertyBehaviour m_SpecialProperty;
|
[SerializeField] Text m_HurtRemind;
|
|
RealmModel model { get { return ModelCenter.Instance.GetModel<RealmModel>(); } }
|
|
static readonly Vector2 middleLeft = new Vector2(0, 0.5f);
|
static readonly Vector2 middleRight = new Vector2(1, 0.5f);
|
static readonly Vector2 middleCenter = new Vector2(0.5f, 0.5f);
|
|
float leftRatio = 0f;
|
float rightRatio = 0;
|
|
public void Display()
|
{
|
DisplayStages();
|
DisplayProgress();
|
}
|
|
void DisplayStages()
|
{
|
var realmLevel = PlayerDatas.Instance.baseData.realmLevel;
|
int start = 0; int end = 0;
|
model.TryGetRealmStage(realmLevel, out start, out end);
|
var index = 0;
|
|
m_ContainerRemind.gameObject.SetActive(false);
|
|
for (int i = start; i <= realmLevel; i++)
|
{
|
var rect = m_RealmStages[index].transform as RectTransform;
|
rect.anchorMax = middleLeft;
|
rect.anchorMin = middleLeft;
|
rect.pivot = middleLeft;
|
if (i == start)
|
{
|
rect.anchoredPosition = new Vector2(m_StartRealmPositionx, 0);
|
leftRatio = (m_StartRealmPositionx + m_RealmStages[0].GetWidth(i)) / m_ContainerPoint.rect.width;
|
}
|
else
|
{
|
var width = 0f;
|
for (int k = start; k < i; k++)
|
{
|
width += m_RealmStages[0].GetWidth(k);
|
width += m_Spacing;
|
}
|
var positionx = m_StartRealmPositionx + width;
|
rect.anchoredPosition = new Vector2(positionx, 0);
|
if (i == realmLevel)
|
{
|
leftRatio = (positionx + m_RealmStages[0].GetWidth(i)) / m_ContainerPoint.rect.width;
|
}
|
}
|
m_RealmStages[index].gameObject.SetActive(true);
|
m_RealmStages[index].Display(i, false);
|
index++;
|
}
|
end = end == model.realmMaxLevel ? end : (end + 1);
|
for (int i = end; i > realmLevel; i--)
|
{
|
var rect = m_RealmStages[index].transform as RectTransform;
|
rect.anchorMax = middleRight;
|
rect.anchorMin = middleRight;
|
if (i == end)
|
{
|
rect.pivot = middleCenter;
|
rect.anchoredPosition = new Vector2(m_EndRealmPositionx, 0);
|
rightRatio = Mathf.Abs(m_EndRealmPositionx - m_BigRealmBottomWidth / 2 + 30) / m_ContainerPoint.rect.width;
|
}
|
else
|
{
|
var width = 0f;
|
for (int k = end - 1; k > i; k--)
|
{
|
width += m_RealmStages[0].GetWidth(k);
|
width += m_Spacing;
|
}
|
rect.pivot = middleRight;
|
var positionx = m_EndRealmPositionx - m_BigRealmBottomWidth / 2 - m_Spacing - width;
|
rect.anchoredPosition = new Vector2(positionx, 0);
|
if (i == realmLevel + 1)
|
{
|
rightRatio = (Mathf.Abs(positionx) + m_RealmStages[0].GetWidth(i)) / m_ContainerPoint.rect.width;
|
}
|
}
|
m_RealmStages[index].gameObject.SetActive(true);
|
m_RealmStages[index].Display(i, i == end);
|
DisplayRemind(i);
|
index++;
|
}
|
for (int i = index; i < m_RealmStages.Length; i++)
|
{
|
m_RealmStages[i].gameObject.SetActive(false);
|
}
|
}
|
|
public void DisplayProgress(bool anim = false)
|
{
|
var deltaRatio = 1 - leftRatio - rightRatio;
|
var realmPoint = PlayerDatas.Instance.extersion.realmPoint;
|
var config = RealmConfig.Get(PlayerDatas.Instance.baseData.realmLevel);
|
var progress = leftRatio + deltaRatio * (Mathf.Min((float)realmPoint / config.NeedPoint, 1));
|
m_ItemSlider.delay = anim ? 0.2f : 0f;
|
m_ItemSlider.value = progress;
|
|
m_RealmPoint.transform.localPosition = m_RealmPoint.transform.localPosition.SetX(m_ContainerPoint.rect.width * (leftRatio + deltaRatio * 0.5f));
|
m_RealmPoint.text = StringUtility.Contact(UIHelper.AppendStringColor(realmPoint >= config.NeedPoint ? TextColType.Green : TextColType.Red,
|
realmPoint.ToString()), "/", config.NeedPoint);
|
|
m_OpenRemind.text = realmPoint < config.NeedPoint ?
|
UIHelper.ReplaceNewLine(Language.Get("RealmCollectingTab", config.NeedPoint - realmPoint)) : string.Empty;
|
m_OpenRemind.transform.localPosition = m_OpenRemind.transform.localPosition.SetX(m_ContainerPoint.rect.width * (leftRatio + deltaRatio * 0.5f));
|
}
|
|
public void DisplayRemind(int _realmLv)
|
{
|
var config = RealmConfig.Get(_realmLv);
|
if (config.specialProperty != 0)
|
{
|
m_ContainerRemind.gameObject.SetActive(true);
|
var index = 0;
|
for (int i = 0; i < config.AddAttrType.Length; i++)
|
{
|
if (config.AddAttrType[i] == config.specialProperty)
|
{
|
index = i;
|
break;
|
}
|
}
|
m_SpecialProperty.DisplayColon(config.specialProperty, config.AddAttrNum[index]);
|
m_HurtRemind.text = UIHelper.ReplaceNewLine(Language.Get("RealmSuppressHurt", UIHelper.GetRealmName(config.Lv), (float)model.realmSuppressHurt / 100));
|
}
|
}
|
}
|
}
|