Files
JJBB/Assets/Project/Script/GUI/SkillBar/SkillProgressLogic.cs

182 lines
4.7 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
using GCGame.Table;
using Module.Log;
using UnityEngine;
using UnityEngine.UI;
public class SkillProgressLogic : MonoBehaviour
{
public enum ProgressModel
{
INVALD_TYPE = -1,
ORDERMODEL,
REVERSEDMODE
}
private static SkillProgressLogic _instance;
private static ProgressBarLoadingState state = ProgressBarLoadingState.NotLoad;
private static int _handleId;
private static float _duration;
private static float _startTime;
private static ProgressModel _playModel;
private static string _skillName;
private static bool _needDotAnim; // 是否需要显示 "......." 的动画
public GameObject _SkillNameGO;
public Text dotAnim;
public float dotAnimInternal;
public int dotCount = 6;
public int dotIndex;
private float passedTime;
public Slider progressSlider;
public Text skillNameText;
public static void PlayProcess(ProgressModel playModel, float fContinTime, string skillName = default(string),
int handleId = 0)
{
_startTime = Time.time;
_duration = fContinTime;
_handleId = handleId;
_playModel = playModel;
_skillName = skillName;
var str = StrDictionary.GetClientDictionaryString("#{4753}");
if (_skillName.IndexOf(str) != -1)
_needDotAnim = true;
else
_needDotAnim = false;
if (state == ProgressBarLoadingState.NotLoad)
{
state = ProgressBarLoadingState.Loading;
UIManager.ShowUI(UIInfo.SkillProgress, ShowUiOver);
}
else if (state == ProgressBarLoadingState.Loaded || _instance != null)
{
PlayProgress();
}
}
private static void ShowUiOver(bool bSuccess, object param)
{
if (bSuccess)
{
state = ProgressBarLoadingState.Loaded;
PlayProgress();
}
else
{
state = ProgressBarLoadingState.NotLoad;
LogModule.ErrorLog(string.Format("{0}加载结束,但预制物不存在!", UIInfo.SkillProgress));
}
}
private static void PlayProgress()
{
if (_instance == null)
LogModule.ErrorLog(string.Format("{0}已经加载但是_instance不存在", UIInfo.SkillProgress));
else
_instance.PlaySkillProgress();
}
public static void StopProcess(int handleId)
{
//LogModule.ErrorLog(Time.frameCount + " StopProcess : " + handleId);
if (_handleId == handleId)
if (_instance != null)
{
_instance.progressSlider.value = 0f;
_instance.CloseWindow();
}
}
private void Awake()
{
_instance = this;
//gameObject.SetActive(false);
}
private void OnDestroy()
{
state = ProgressBarLoadingState.NotLoad;
_instance = null;
}
public void PlaySkillProgress()
{
if (_needDotAnim)
{
dotAnim.gameObject.SetActive(true);
dotAnim.text = "";
}
else
{
dotAnim.gameObject.SetActive(false);
}
gameObject.SetActive(true);
if (string.IsNullOrEmpty(_skillName))
{
_SkillNameGO.SetActive(false);
}
else
{
skillNameText.text = _skillName;
_SkillNameGO.SetActive(true);
}
}
// Update is called once per frame
private void Update()
{
if (_startTime + _duration > Time.time)
{
var ratio = (Time.time - _startTime) / _duration;
if (_playModel == ProgressModel.REVERSEDMODE)
ratio = 1 - ratio;
progressSlider.value = ratio;
if (_needDotAnim)
{
passedTime += Time.deltaTime;
if (passedTime > dotAnimInternal)
{
if (dotIndex < 6)
{
if (dotIndex == 3)
dotAnim.text += " .";
else
dotAnim.text += ".";
++dotIndex;
}
else
{
dotIndex = 0;
dotAnim.text = "";
}
passedTime -= dotAnimInternal;
}
}
}
else
{
CloseWindow();
}
}
public void CloseWindow()
{
_handleId = 0;
gameObject.SetActive(false);
state = ProgressBarLoadingState.Loaded;
}
private enum ProgressBarLoadingState
{
NotLoad,
Loading,
Loaded
}
}