Files
JJBB/Assets/Project/Script/GUI/Other/ExpLogic.cs

263 lines
7.8 KiB
C#
Raw Permalink Normal View History

2024-08-23 15:49:34 +08:00
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using GCGame.Table;
using Games.LogicObj;
using System.Collections.Generic;
using GCGame;
using Module.Log;
public class ExpLogic : MonoBehaviour {
private static ExpLogic m_Instance = null;
public static ExpLogic Instance()
{
return m_Instance;
}
public GameObject m_FirstChild;
public Slider m_ExpProgress;
public Image m_ExpBackground;
public Image m_ExpSprite;
public Text m_ExpLabel;
public Slider m_OffLineExpProgress;
//public List<TweenAlpha> m_FoldTween;
//private bool m_bExpAni = false;
private long m_CurExpBuffer = 0;
private long m_MaxExpBuffer = 0;
private long m_CurExp = 0;
private long m_MaxExp = 0;
//当前离线经验以及离线经验上限
private long m_CurOffLineExp = 0;
private long m_MaxOffLineExp = 0;
private int m_PlayerLevelBuffer = 0;
public float AddExpRatio = 0.005f; // 经验值条每帧增长比例
void Awake()
{
m_Instance = this;
transform.localPosition = new Vector3(0, -339, 0);
}
// Use this for initialization
void Start () {
m_FirstChild.SetActive(true);
// if (Screen.width % 1136 == 0)
// {
// m_ExpProgress.transform.localPosition = new Vector3(-666, 8, 0);
// m_ExpBackground.GetComponent<UIWidget>().width = 1332;
// m_ExpSprite.GetComponent<UIWidget>().width = 1305;
// }
UpdateExp();
UpdateOffLineExp();
//InitPlayerExp();
}
void OnDestroy()
{
m_Instance = null;
}
public void UpdateExp()
{
Obj_MainPlayer mainPlayer = Singleton<ObjManager>.Instance.MainPlayer;
if(null == mainPlayer)
{
return;
}
Tab_LevelUp curTabLevelup = TableManager.GetLevelUpByID(mainPlayer.BaseAttr.Level, 0);
if (null == curTabLevelup)
{
return;
}
m_MaxExp = long.Parse(curTabLevelup.ExpNeed);
m_CurExp = mainPlayer.BaseAttr.Exp;
if (m_MaxExp != 0)
m_ExpProgress.value = (float)m_CurExp / (float)m_MaxExp;
m_ExpLabel.text = m_CurExp.ToString() + "/" + m_MaxExp.ToString();
//m_ExpLabel.text = Utils.ConvertLargeNumToString(m_CurExp) + "/" + Utils.ConvertLargeNumToString(m_MaxExp);
UpdateOffLineProgress();
}
void InitPlayerExp()
{
Obj_MainPlayer mainPlayer = Singleton<ObjManager>.Instance.MainPlayer;
if (null == mainPlayer)
{
return;
}
m_PlayerLevelBuffer = mainPlayer.BaseAttr.Level;
m_CurExp = mainPlayer.BaseAttr.Exp;
Tab_LevelUp curTabLevelup = TableManager.GetLevelUpByID(m_PlayerLevelBuffer, 0);
if (null == curTabLevelup)
{
return;
}
m_MaxExp = long.Parse(curTabLevelup.ExpNeed);
if(m_MaxExp != 0)
{
m_ExpProgress.value = (float)m_CurExp / (float)m_MaxExp;
m_CurExpBuffer = m_CurExp;
m_MaxExpBuffer = m_MaxExp;
m_ExpLabel.text = m_CurExp.ToString() + "/" + m_MaxExp.ToString();
//m_ExpLabel.text = Utils.ConvertLargeNumToString(m_CurExp) + "/" + Utils.ConvertLargeNumToString(m_MaxExp);
//m_bExpAni = true;
}
UpdateOffLineProgress();
}
public void OnLevelChange()
{
Obj_MainPlayer mainPlayer = Singleton<ObjManager>.Instance.MainPlayer;
if (null == mainPlayer)
{
return;
}
Tab_LevelUp curTabLevelup = TableManager.GetLevelUpByID(mainPlayer.BaseAttr.Level, 0);
if (null == curTabLevelup)
{
return;
}
m_MaxExp = long.Parse(curTabLevelup.ExpNeed);
m_CurExp = mainPlayer.BaseAttr.Exp;
if ( m_MaxExp > 0)
{
m_ExpProgress.value = (float)m_CurExp / (float)m_MaxExp;
}
m_ExpLabel.text = m_CurExp.ToString() + "/" + m_MaxExp.ToString();
//m_ExpLabel.text = Utils.ConvertLargeNumToString(m_CurExp) + "/" + Utils.ConvertLargeNumToString(m_MaxExp);
UpdateOffLineExp();
}
public void UpdateOffLineExp()
{
Obj_MainPlayer mainPlayer = Singleton<ObjManager>.Instance.MainPlayer;
if (null == mainPlayer)
{
return;
}
Tab_OffLineExp curTabOffLine = TableManager.GetOffLineExpByID(mainPlayer.BaseAttr.Level, 0);
if (null == curTabOffLine)
{
return;
}
m_MaxOffLineExp = curTabOffLine.OffLineExpLimit;
m_CurOffLineExp = mainPlayer.BaseAttr.OffLineExp;
UpdateOffLineProgress();
}
public void UpdateOffLineProgress()
{
if (null == m_OffLineExpProgress)
{
return;
}
long nRemainLevelUpExp = m_MaxExp - m_CurExp;
if (nRemainLevelUpExp <= 0)
{
m_OffLineExpProgress.value = (float)1.0;
return;
}
if (m_CurOffLineExp <= 0)
{
m_OffLineExpProgress.value = (float)0.0;
return;
}
if (m_MaxExp <= 0)
{
m_OffLineExpProgress.value = (float)0.0;
return;
}
float fGrogressValue = (float)(m_CurOffLineExp + m_CurExp)/(float)(m_MaxExp);
float dExpProgressValue = m_ExpProgress.value;
float dTemp = fGrogressValue - dExpProgressValue;
if (dTemp < 0.01)
{
fGrogressValue = fGrogressValue + (float)0.01;
}
if (fGrogressValue <= 0.03 )
{
fGrogressValue = (float)0.04;
}
fGrogressValue = Mathf.Clamp01(fGrogressValue);
m_OffLineExpProgress.value = (float)fGrogressValue;
}
void UpdateExpAnimation()
{
if (m_CurExpBuffer != m_CurExp || m_MaxExpBuffer != m_MaxExp)
{
// 普通增长经验
if (m_MaxExp == m_MaxExpBuffer)
{
if (m_CurExpBuffer + AddExpRatio * m_MaxExpBuffer >= m_CurExp)
{
// 增长结束
m_CurExpBuffer = m_CurExp;
}
else
{
m_CurExpBuffer += (int)(AddExpRatio * m_MaxExpBuffer);
}
m_ExpProgress.value = (float)m_CurExpBuffer / (float)m_MaxExpBuffer;
m_ExpLabel.text = m_CurExpBuffer.ToString() + "/" + m_MaxExpBuffer.ToString();
//m_ExpLabel.text = Utils.ConvertLargeNumToString(m_CurExpBuffer) + "/" + Utils.ConvertLargeNumToString(m_MaxExpBuffer);
}
// 升级
else if (m_MaxExp > m_MaxExpBuffer)
{
if (m_CurExpBuffer + AddExpRatio * m_MaxExpBuffer >= m_MaxExpBuffer)
{
// 经验满了
m_CurExpBuffer = m_MaxExpBuffer;
// 计算下一级经验
m_PlayerLevelBuffer++;
Tab_LevelUp nextTabLevelup = TableManager.GetLevelUpByID(m_PlayerLevelBuffer, 0);
if (null == nextTabLevelup)
{
return;
}
m_MaxExpBuffer = long.Parse(nextTabLevelup.ExpNeed);
m_CurExpBuffer = 0;
}
else
{
m_CurExpBuffer += (int)(AddExpRatio * m_MaxExpBuffer);
}
m_ExpLabel.text = m_CurExpBuffer.ToString() + "/" + m_MaxExpBuffer.ToString();
//m_ExpLabel.text = Utils.ConvertLargeNumToString(m_CurExpBuffer) + "/" + Utils.ConvertLargeNumToString(m_MaxExpBuffer);
}
}
}
public void PlayTween(bool nDirection)
{
//foreach (TweenAlpha tween in m_FoldTween)
//{
// tween.Play(nDirection);
//}
gameObject.SetActive(!nDirection);
}
}