| | |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using System.Collections; |
| | | using UnityEngine.UI; |
| | | using UnityEngine; |
| | | using EnhancedUI; |
| | |
| | | using KTGMGemClient; |
| | | using DG.Tweening; |
| | | using System; |
| | | using System.Linq; |
| | | |
| | | public class FinalPanel : MonoBehaviour, IEnhancedScrollerDelegate |
| | | { |
| | | //无限滚动相关 |
| | | private EnhancedScroller scroller; |
| | | |
| | | private SmallList<FinalPanelItemData> _data; |
| | | |
| | | public EnhancedScrollerCellView cellViewPrefab; |
| | | [SerializeField] |
| | | private Sprite rank_di_0, rank_di_1, rank_di_2, rank_di_03; |
| | | [SerializeField] |
| | | private Sprite rank_icon_0, rank_icon_1, rank_icon_2; |
| | | |
| | | public string endlessGameScene = "Endless"; |
| | | |
| | | public string loadingScene = "LoadingScene"; |
| | | Button closeBtn; |
| | | private string endlessGameScene = "Endless2D"; |
| | | private string loadingScene = "LoadingScene"; |
| | | // Start is called before the first frame update |
| | | void Start() |
| | | { |
| | |
| | | }); |
| | | closeBtn.interactable = false; |
| | | } |
| | | Button closeBtn; |
| | | Text waveText; |
| | | GameObject image_HScore; |
| | | Text scoreText; |
| | | GameObject image_NewRecord; |
| | | bool isNewH = false; |
| | | int hScore; |
| | | //string hwaveInfo; |
| | | |
| | | CanvasGroup scrollerCanvasGroup; |
| | | CanvasGroup itemCanvasGroup; |
| | | |
| | | Action playEffectAC = null; |
| | | |
| | | |
| | | /// <summary> |
| | | /// 设置播放胜利特效 |
| | |
| | | playEffectAC = ac; |
| | | } |
| | | |
| | | string playerPrefs_HScore = "GemBattleHScore"; |
| | | //string playerPrefs_HWaveInfo = "GemBattleHWaveInfo"; |
| | | |
| | | string playerPrefs_NickName = "GemBattlePlayerNickName"; |
| | | |
| | | string _waveInfo; |
| | | int _myScore;//本次 |
| | | FinalHttp finalHttp; |
| | | string playerNickName; |
| | | int _limit; |
| | | int _limitUp; |
| | | |
| | | FinalPanelItem itemFirst;//第一 |
| | | FinalPanelItem itemSecond;//第二 |
| | | FinalPanelItem itemThird;//第三 |
| | | Text txt_Name, txt_Wave; |
| | | TextMeshProUGUI txt_HScore, txt_Index; |
| | | /// <summary> |
| | | /// 入口函数 |
| | | /// </summary> |
| | | /// <param name="waveInfo">成绩 25关 3波</param> |
| | | /// <param name="waveInfo">25关 3波</param> |
| | | /// <param name="myScore">789220</param> |
| | | public void SetData(string waveInfo, int myScore) |
| | | { |
| | | hScore = PlayerPrefs.GetInt("GemBattleHScore"); |
| | | _waveInfo = waveInfo; |
| | | _myScore = myScore; |
| | | _data = new SmallList<FinalPanelItemData>(); |
| | | Debug.Log($"_myScore:{_myScore} _waveInfo:{_waveInfo}"); |
| | | |
| | | hScore = PlayerPrefs.GetInt(playerPrefs_HScore); |
| | | //hwaveInfo = PlayerPrefs.GetString(playerPrefs_HWaveInfo); |
| | | scrollerCanvasGroup = transform.Find("Scroller").GetComponent<CanvasGroup>(); |
| | | if (myScore > hScore) |
| | | scrollerCanvasGroup.alpha = 0; |
| | | itemCanvasGroup = transform.Find("ItemPanel").GetComponent<CanvasGroup>(); |
| | | itemCanvasGroup.alpha = 0; |
| | | |
| | | if (myScore > hScore)//得分比记录的高 |
| | | { |
| | | PlayerPrefs.SetInt("GemBattleHScore", myScore); |
| | | PlayerPrefs.SetInt(playerPrefs_HScore, myScore); |
| | | //PlayerPrefs.SetString(playerPrefs_HWaveInfo, waveInfo); |
| | | hScore = myScore; |
| | | //hwaveInfo = waveInfo; |
| | | isNewH = true; |
| | | } |
| | | |
| | | txt_Name = transform.Find("Image_HScore/Text_Name").GetComponent<Text>(); |
| | | txt_Wave = transform.Find("Image_HScore/Text_Wave").GetComponent<Text>(); |
| | | txt_HScore = transform.Find("Image_HScore/Text_HScore").GetComponent<TextMeshProUGUI>(); |
| | | txt_Index = transform.Find("Image_HScore/Text_Index").GetComponent<TextMeshProUGUI>(); |
| | | |
| | | |
| | | transform.Find("Image_HScore/Text_HScore").GetComponent<TextMeshProUGUI>().text = hScore.ToString(); |
| | | image_HScore = transform.Find("Image_HScore").gameObject; |
| | | image_HScore.SetActive(false); |
| | | |
| | | |
| | | waveText = transform.Find("Text_Wave").GetComponent<Text>(); |
| | | scoreText = transform.Find("Text_Score").GetComponent<Text>(); |
| | | scoreText.text = ""; |
| | | waveText.text = ""; |
| | | waveText.gameObject.SetActive(false); |
| | | scoreText.gameObject.SetActive(false); |
| | | |
| | | image_NewRecord = transform.Find("Image_NewRecord").gameObject; |
| | | image_NewRecord.SetActive(false); |
| | | |
| | | Transform ts = transform.Find("Images"); |
| | | finalHttp = GetComponent<FinalHttp>(); |
| | | _limit = 100; |
| | | _limitUp = 100; |
| | | finalHttp.Init(GetHttpData, _limit);//重置状态,设置回调和拉取的所有数据 |
| | | |
| | | itemFirst = transform.Find("ItemPanel/FinalPanelItemFirst").GetComponent<FinalPanelItem>(); |
| | | itemSecond = transform.Find("ItemPanel/FinalPanelItemSecond").GetComponent<FinalPanelItem>(); |
| | | itemThird = transform.Find("ItemPanel/FinalPanelItemThird").GetComponent<FinalPanelItem>(); |
| | | |
| | | httpCountDownPanel = transform.Find("HttpCountDownPanel").gameObject; |
| | | countDownReplayBtn = transform.Find("HttpCountDownPanel/ReplayBtn").GetComponent<Button>(); |
| | | countDownTxt = transform.Find("HttpCountDownPanel/WarningTxt").GetComponent<Text>(); |
| | | httpCountDownPanel.SetActive(false); |
| | | |
| | | //PlayerPrefs.DeleteKey("GemBattlePlayerNickName"); |
| | | |
| | | playerNickName = PlayerPrefs.GetString(playerPrefs_NickName); |
| | | if (playerNickName == "") |
| | | { |
| | | GameObject go = Instantiate(Resources.Load<GameObject>("UI/Final/InputNamePanel"), transform); |
| | | go.GetComponent<InputNamePanel>().Init(LoadName); |
| | | } |
| | | else |
| | | { |
| | | StartHttp(); |
| | | } |
| | | |
| | | } |
| | | |
| | | private void LoadName(string nickName) |
| | | { |
| | | playerNickName = nickName; |
| | | PlayerPrefs.SetString(playerPrefs_NickName, playerNickName); |
| | | StartHttp(); |
| | | } |
| | | |
| | | private void StartHttp() |
| | | { |
| | | //OpenHttpCountDown(true); |
| | | |
| | | Debug.Log($"_myScore:{_myScore} _waveInfo:{_waveInfo}"); |
| | | finalHttp.SendPost(playerNickName, _myScore, 1, _waveInfo); |
| | | } |
| | | |
| | | #region 联网倒计时判断 |
| | | bool isSending; |
| | | int sendCount; |
| | | GameObject httpCountDownPanel; |
| | | Button countDownReplayBtn; |
| | | Text countDownTxt; |
| | | private void OpenHttpCountDown(bool isOn) |
| | | { |
| | | if (isOn) |
| | | { |
| | | isSending = true; |
| | | sendCount = 0; |
| | | StartCoroutine("HttpCountDown"); |
| | | } |
| | | else |
| | | { |
| | | isSending = false; |
| | | StopCoroutine("HttpCountDown"); |
| | | } |
| | | } |
| | | IEnumerator HttpCountDown() |
| | | { |
| | | while (isSending) |
| | | { |
| | | yield return new WaitForSeconds(1.0f); |
| | | sendCount++; |
| | | Debug.Log($"等待了{sendCount}秒"); |
| | | if (sendCount == 3) |
| | | { |
| | | if (!httpCountDownPanel.activeSelf) httpCountDownPanel.SetActive(true); |
| | | if (countDownReplayBtn.gameObject.activeSelf) countDownReplayBtn.gameObject.SetActive(false); |
| | | } |
| | | else if (sendCount > 10) |
| | | { |
| | | Debug.Log("等了10秒了,连接失败"); |
| | | isSending = false; |
| | | countDownTxt.text = "等了10秒了,连接失败"; |
| | | if (!countDownReplayBtn.gameObject.activeSelf) countDownReplayBtn.gameObject.SetActive(true); |
| | | |
| | | countDownReplayBtn.onClick.AddListener(Close); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | |
| | | private void Close() |
| | | { |
| | | gameObject.SetActive(false); |
| | | GameConfig.NextSceneName = endlessGameScene; |
| | | SceneManager.LoadScene(loadingScene); |
| | | } |
| | | |
| | | private void GetHttpData(List<HttpGetInfo> allHttpGetInfoLis, int myrank) |
| | | { |
| | | scroller = transform.Find("Scroller").GetComponent<EnhancedScroller>(); |
| | | scroller.Delegate = this; |
| | | |
| | | RefreshHttpData(allHttpGetInfoLis, myrank); |
| | | |
| | | if (allHttpGetInfoLis == null) return; |
| | | |
| | | HttpGetInfo tmpData = allHttpGetInfoLis[myrank - 1]; |
| | | |
| | | txt_Name.text = tmpData.nickname; |
| | | txt_HScore.text = tmpData.score.ToString(); |
| | | txt_Wave.text = tmpData.waveInfo; |
| | | |
| | | if (myrank > 3000) |
| | | { |
| | | txt_Index.text = "3000+"; |
| | | } |
| | | else |
| | | { |
| | | txt_Index.text = myrank.ToString(); |
| | | } |
| | | |
| | | PlayDoTween(); |
| | | } |
| | | |
| | | private void PlayDoTween() |
| | | { |
| | | Sequence agentTweenSeq = DOTween.Sequence(); |
| | | //先出现 |
| | | Image tsTiele = transform.Find("Image_Tiele").GetComponent<Image>(); |
| | | agentTweenSeq.Append(tsTiele.transform.DOScale(Vector3.one, 0.2f));//变化图片大小 |
| | | agentTweenSeq.Join(tsTiele.DOFade(1, 0.3f)); |
| | | |
| | | agentTweenSeq.Append(ts.DOScale(Vector3.one, 0.2f));//变化图片大小 |
| | | Image Image1 = transform.Find("Image1").GetComponent<Image>(); |
| | | agentTweenSeq.Append(Image1.transform.DOScale(Vector3.one, 0.2f));//变化图片大小 |
| | | agentTweenSeq.Join(Image1.DOFade(1, 0.2f)); |
| | | agentTweenSeq.Join(waveText.DOText(_waveInfo, 0.2f)); |
| | | |
| | | agentTweenSeq.Append(ts.DOScale(new Vector3(1.7f, 1.7f, 1.7f), 0.2f));//变化图片大小 |
| | | agentTweenSeq.Append(ts.DOScale(Vector3.one, 0.2f));//变化图片大小 |
| | | agentTweenSeq.Append(ts.DOScale(new Vector3(1.2f, 1.2f, 1.2f), 0.2f));//变化图片大小 |
| | | agentTweenSeq.Append(ts.DOScale(Vector3.one, 0.2f));//变化图片大小 |
| | | Image Image2 = transform.Find("Image2").GetComponent<Image>(); |
| | | agentTweenSeq.Append(Image2.transform.DOScale(Vector3.one, 0.2f));//变化图片大小 |
| | | agentTweenSeq.Join(Image2.DOFade(1, 0.2f)); |
| | | |
| | | agentTweenSeq.AppendCallback(StartLoadLargeData); |
| | | agentTweenSeq.Append(DOTween.To(delegate (float value) |
| | | |
| | | Image Image3 = transform.Find("Image3").GetComponent<Image>(); |
| | | agentTweenSeq.Append(Image3.transform.DOScale(Vector3.one, 0.2f));//变化图片大小 |
| | | agentTweenSeq.Join(Image3.DOFade(1, 0.2f)); |
| | | agentTweenSeq.Join(DOTween.To(delegate (float value) |
| | | { |
| | | var temp = Math.Floor(value); |
| | | scoreText.text = temp + ""; |
| | | }, 0, myScore, 3.0f)); |
| | | }, 0, _myScore, 1.0f)); |
| | | |
| | | tsLight = transform.Find("ImageLight"); |
| | | Image ImageLight = tsLight.GetComponent<Image>(); |
| | | agentTweenSeq.Join(ImageLight.transform.DOScale(Vector3.one, 0.2f));//变化图片大小 |
| | | agentTweenSeq.Join(ImageLight.DOFade(1, 0.2f).OnComplete(RotateLight)); |
| | | //agentTweenSeq.AppendCallback(RotateLight); |
| | | |
| | | agentTweenSeq.AppendCallback(TextDoTweenFinish); |
| | | agentTweenSeq.Append(waveText.DOText(waveInfo, 0.2f)); |
| | | } |
| | | |
| | | bool isRotate = false; |
| | | float offect = 0; |
| | | /// <summary> |
| | | /// LateUpdate is called every frame, if the Behaviour is enabled. |
| | | /// It is called after all Update functions have been called. |
| | | /// </summary> |
| | | void LateUpdate() |
| | | { |
| | | if (isRotate) |
| | | { |
| | | offect += Time.deltaTime; |
| | | tsLight.localRotation = Quaternion.Euler(0, 0, offect * 30); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | protected void StartLoadLargeData() |
| | | { |
| | | scoreText.gameObject.SetActive(true); |
| | | LoadLargeData(hScore); |
| | | |
| | | StartCoroutine(PlayerItemDoTween()); |
| | | } |
| | | |
| | |
| | | /// <returns></returns> |
| | | IEnumerator PlayerItemDoTween() |
| | | { |
| | | yield return 1f; |
| | | FinalPanelItem[] allItems = transform.Find("Scroller/Container").GetComponentsInChildren<FinalPanelItem>(); |
| | | for (int i = 0; i < allItems.Length; i++) |
| | | { |
| | | allItems[i].SetPos(); |
| | | } |
| | | |
| | | yield return new WaitForEndOfFrame(); |
| | | scrollerCanvasGroup.alpha = 1; |
| | | for (int i = 0; i < allItems.Length; i++) |
| | | { |
| | | allItems[i].PlayDoTween(0.1f); |
| | | yield return new WaitForSeconds(0.1f); |
| | | } |
| | | itemCanvasGroup.alpha = 1; |
| | | |
| | | image_HScore.SetActive(true); |
| | | |
| | | yield break; |
| | |
| | | closeBtn.interactable = true; |
| | | } |
| | | |
| | | Transform tsLight; |
| | | /// <summary> |
| | | /// 生成假排行榜 |
| | | /// 光出现后开始旋转 |
| | | /// </summary> |
| | | /// <param name="hScore">自身分数</param> |
| | | private void LoadLargeData(int hScore) |
| | | protected void RotateLight() |
| | | { |
| | | scroller = transform.Find("Scroller").GetComponent<EnhancedScroller>(); |
| | | scroller.Delegate = this; |
| | | _data = new SmallList<FinalPanelItemData>(); |
| | | FinalPanelItemData data; |
| | | int score = 101; |
| | | for (var i = 0; i < 100; i++) |
| | | { |
| | | data = new FinalPanelItemData(); |
| | | data.score = score - i; |
| | | data.index = i + 1; |
| | | data.playerName = "游客" + i.ToString(); |
| | | data.spriteIcon = null; |
| | | data.spriteBackGround = rank_di_03; |
| | | _data.Add(data); |
| | | } |
| | | |
| | | _data[0].playerName = "自己"; |
| | | _data[0].score = hScore; |
| | | _data[0].spriteIcon = rank_icon_0; |
| | | _data[0].spriteBackGround = rank_di_0; |
| | | |
| | | _data[1].spriteIcon = rank_icon_1; |
| | | _data[1].spriteBackGround = rank_di_1; |
| | | |
| | | _data[2].spriteIcon = rank_icon_2; |
| | | _data[2].spriteBackGround = rank_di_2; |
| | | // tell the scroller to reload now that we have the data |
| | | scroller.ReloadData(); |
| | | isRotate = true; |
| | | offect = 0; |
| | | } |
| | | |
| | | #region EnhancedScroller Handlers |
| | |
| | | public EnhancedScrollerCellView GetCellView(EnhancedScroller scroller, int dataIndex, int cellIndex) |
| | | { |
| | | FinalPanelItem cellView = scroller.GetCellView(cellViewPrefab) as FinalPanelItem; |
| | | |
| | | cellView.SetData(_data[dataIndex]); |
| | | |
| | | if (dataIndex == _data.Count - 2) |
| | | { |
| | | Debug.Log("是否可以刷新新列表了"); |
| | | |
| | | if (_limit >= 3000) |
| | | { |
| | | Debug.Log("数据下载量最大3000"); |
| | | } |
| | | else if (_limit >= _data.Count) |
| | | { |
| | | Debug.Log("当前服务器没有那么多数据"); |
| | | } |
| | | else |
| | | { |
| | | _limit += _limitUp; |
| | | Debug.Log("刷新新列表了,下载了 " + _limit + " 个数据:"); |
| | | finalHttp.Init(RefreshHttpData, _limit);//重置状态,设置回调和拉取的所有数据 |
| | | StartHttp(); |
| | | } |
| | | } |
| | | return cellView; |
| | | } |
| | | |
| | | private void RefreshHttpData(List<HttpGetInfo> allHttpGetInfoLis, int myrank) |
| | | { |
| | | if (allHttpGetInfoLis == null) |
| | | { |
| | | httpCountDownPanel.SetActive(true); |
| | | countDownTxt.text = "获取排行榜失败"; |
| | | countDownReplayBtn.onClick.AddListener(Close); |
| | | return; |
| | | } |
| | | |
| | | // if (isSending) |
| | | // { |
| | | // OpenHttpCountDown(false); |
| | | // } |
| | | |
| | | FinalPanelItemData data; |
| | | |
| | | if (allHttpGetInfoLis.Count > 0) |
| | | { |
| | | if (allHttpGetInfoLis.Count >= 1) |
| | | { |
| | | data = new FinalPanelItemData(); |
| | | data.httpInfo = allHttpGetInfoLis[0]; |
| | | data.index = 1; |
| | | itemFirst.gameObject.SetActive(true); |
| | | itemFirst.SetData(data); |
| | | } |
| | | else |
| | | { |
| | | itemFirst.gameObject.SetActive(false); |
| | | itemSecond.gameObject.SetActive(false); |
| | | itemThird.gameObject.SetActive(false); |
| | | return; |
| | | } |
| | | if (allHttpGetInfoLis.Count >= 2) |
| | | { |
| | | data = new FinalPanelItemData(); |
| | | data.httpInfo = allHttpGetInfoLis[1]; |
| | | data.index = 2; |
| | | itemSecond.gameObject.SetActive(true); |
| | | itemSecond.SetData(data); |
| | | } |
| | | else |
| | | { |
| | | itemSecond.gameObject.SetActive(false); |
| | | itemThird.gameObject.SetActive(false); |
| | | return; |
| | | } |
| | | if (allHttpGetInfoLis.Count > 2) |
| | | { |
| | | data = new FinalPanelItemData(); |
| | | data.httpInfo = allHttpGetInfoLis[2]; |
| | | data.index = 3; |
| | | itemThird.gameObject.SetActive(true); |
| | | itemThird.SetData(data); |
| | | } |
| | | else |
| | | { |
| | | itemThird.gameObject.SetActive(false); |
| | | return; |
| | | } |
| | | if (allHttpGetInfoLis.Count > 3) |
| | | { |
| | | for (int i = 3; i < allHttpGetInfoLis.Count; i++) |
| | | { |
| | | data = new FinalPanelItemData(); |
| | | data.httpInfo = allHttpGetInfoLis[i]; |
| | | data.index = i + 1; |
| | | _data.Add(data); |
| | | } |
| | | scroller.ReloadData(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |
| | |
| | | |
| | | public class FinalPanelItemData |
| | | { |
| | | public string playerName; |
| | | public int score; |
| | | public HttpGetInfo httpInfo; |
| | | public int index; |
| | | |
| | | public Sprite spriteIcon; |
| | | public Sprite spriteBackGround; |
| | | |
| | | } |
| | | |