using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace Snxxz.UI
|
{
|
public class RealmPoolBehaviour : MonoBehaviour
|
{
|
[SerializeField] ImageEx m_Bottom;
|
[SerializeField] ImageEx m_Word;
|
[SerializeField] WaterWaveSlider m_WaterSlider;
|
[SerializeField] Transform m_Lock;
|
[SerializeField] Text m_Progress;
|
[SerializeField] Button m_TakeExp;
|
[SerializeField] UIEffect m_CollectEffect;
|
[SerializeField] UIEffect m_FullEffect;
|
|
int realmLevel = 0;
|
|
RealmModel model { get { return ModelCenter.Instance.GetModel<RealmModel>(); } }
|
|
private void Awake()
|
{
|
m_TakeExp.AddListener(TakeExp);
|
}
|
|
public void Display(int realmLevel)
|
{
|
this.realmLevel = realmLevel;
|
var config = RealmConfig.Get(realmLevel);
|
var isOpen = config.expRate != 0;
|
m_Bottom.gray = !isOpen;
|
m_Word.gray = !isOpen;
|
m_Lock.SetActive(!isOpen);
|
m_Progress.SetActive(isOpen);
|
m_WaterSlider.SetActive(isOpen);
|
|
if (isOpen)
|
{
|
DisplayProgress();
|
}
|
|
DisplayEffect();
|
|
model.realmExpRefresh -= RealmExpRefresh;
|
model.realmExpRefresh += RealmExpRefresh;
|
|
GlobalTimeEvent.Instance.secondEvent -= PerSecond;
|
GlobalTimeEvent.Instance.secondEvent += PerSecond;
|
|
}
|
|
public void DisplayProgress()
|
{
|
var config = RealmConfig.Get(realmLevel);
|
if (config.expRate == 0)
|
{
|
return;
|
}
|
var progress = Mathf.Clamp01((float)model.totalExp / config.expLimit);
|
progress *= 100;
|
m_Progress.text = StringUtility.Contact(progress.ToString("0.#"), "%");
|
DisplayWave();
|
DisplayEffect();
|
}
|
|
public void DisplayWave()
|
{
|
var config = RealmConfig.Get(realmLevel);
|
var progress = Mathf.Clamp01((float)model.totalExp / config.expLimit);
|
m_WaterSlider.progress = progress;
|
}
|
|
private void TakeExp()
|
{
|
var config = RealmConfig.Get(realmLevel);
|
var isOpen = config.expRate != 0;
|
if (isOpen)
|
{
|
WindowCenter.Instance.Open<RealmTakeExpWin>();
|
}
|
else
|
{
|
SysNotifyMgr.Instance.ShowTip("RealmPoolOpenLimit", UIHelper.GetRealmName(model.realmPoolOpenLevel));
|
}
|
}
|
|
void DisplayEffect()
|
{
|
var config = RealmConfig.Get(realmLevel);
|
var isOpen = config.expRate != 0;
|
var isFull = model.totalExp >= config.expLimit;
|
if (!isOpen)
|
{
|
StopEffect(m_FullEffect);
|
}
|
else
|
{
|
if (isFull)
|
{
|
StopEffect(m_CollectEffect);
|
PlayEffect(m_FullEffect);
|
}
|
else
|
{
|
StopEffect(m_FullEffect);
|
PlayEffect(m_CollectEffect);
|
}
|
}
|
}
|
|
void StopEffect(UIEffect effect)
|
{
|
if (effect.IsPlaying)
|
{
|
effect.StopImediatly();
|
}
|
}
|
|
void PlayEffect(UIEffect effect)
|
{
|
if (!effect.IsPlaying)
|
{
|
effect.Play();
|
}
|
}
|
|
private void PerSecond()
|
{
|
DisplayProgress();
|
}
|
|
private void RealmExpRefresh()
|
{
|
DisplayProgress();
|
}
|
|
private void LateUpdate()
|
{
|
DisplayWave();
|
}
|
|
public void Dispose()
|
{
|
model.realmExpRefresh -= RealmExpRefresh;
|
GlobalTimeEvent.Instance.secondEvent -= PerSecond;
|
}
|
}
|
}
|
|