wangguan
2020-12-04 9f2d1de6643eefe5467cac9c9f540a79d50b1ba7
Assets/Scripts/UI/FinalPanel/FinalPanel.cs
@@ -1,4 +1,5 @@
using System.Collections;
using System.Collections.Generic;
using System.Collections;
using UnityEngine.UI;
using UnityEngine;
using EnhancedUI;
@@ -8,42 +9,43 @@
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";
    private string endlessGameScene = "Endless2D";
    private string loadingScene = "LoadingScene";
    // Start is called before the first frame update
    void Start()
    {
        transform.Find("BackGround").GetComponent<Button>().onClick.AddListener(() =>
        closeBtn = transform.Find("BackGround").GetComponent<Button>();
        closeBtn.onClick.AddListener(() =>
        {
            gameObject.SetActive(false);
            GameConfig.NextSceneName = endlessGameScene;
            SceneManager.LoadScene(loadingScene);
        });
        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>
    /// 设置播放胜利特效
@@ -54,54 +56,247 @@
        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>
@@ -110,7 +305,7 @@
    protected void StartLoadLargeData()
    {
        scoreText.gameObject.SetActive(true);
        LoadLargeData(hScore);
        StartCoroutine(PlayerItemDoTween());
    }
@@ -120,19 +315,11 @@
    /// <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;
@@ -153,42 +340,18 @@
        {
            playEffectAC();
        }
        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
@@ -227,10 +390,106 @@
    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
@@ -238,12 +497,7 @@
public class FinalPanelItemData
{
    public string playerName;
    public int score;
    public HttpGetInfo httpInfo;
    public int index;
    public Sprite spriteIcon;
    public Sprite spriteBackGround;
}