//-------------------------------------------------------- 
 | 
//    [Author]:           玩个游戏 
 | 
//    [  Date ]:           Wednesday, May 23, 2018 
 | 
//-------------------------------------------------------- 
 | 
  
 | 
using System; 
 | 
using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
using UnityEngine.UI; 
 | 
  
 | 
  
 | 
    public class InGameDownLoadWin : UIBase 
 | 
    { 
 | 
        [SerializeField] RectTransform m_RewardGotSign; 
 | 
        // [SerializeField] RewardPreviewGroup m_RewardGroup; 
 | 
        [SerializeField] RectTransform m_ContainerHint; 
 | 
        [SerializeField] RichText m_Content; 
 | 
        [SerializeField] Button m_StartDownLoad; 
 | 
        [SerializeField] Button m_PauseDownLoad; 
 | 
        [SerializeField] Button m_Award; 
 | 
        [SerializeField] Button m_Close; 
 | 
  
 | 
        [SerializeField] Transform m_ContainerProgress; 
 | 
        [SerializeField] SmoothSlider m_ProgressSlider; 
 | 
        [SerializeField] Text m_Progress; 
 | 
        [SerializeField] Text m_DownLoadSpeed; 
 | 
        [SerializeField] ToggleButton downLoadGo; //加速下载 
 | 
        float timer = 1f; 
 | 
  
 | 
        #region Built-in 
 | 
  
 | 
        protected override void InitComponent() 
 | 
        { 
 | 
            m_StartDownLoad.AddListener(StartDownLoad); 
 | 
            m_PauseDownLoad.AddListener(PauseDownLoad); 
 | 
            m_Award.AddListener(Award); 
 | 
            m_Close.AddListener(CloseWindow); 
 | 
            downLoadGo.SetListener(() => { 
 | 
                downLoadGo.isOn = !downLoadGo.isOn; 
 | 
                InGameDownLoad.Instance.downLoadGo = downLoadGo.isOn; 
 | 
                DownloadHotMgr.MaxDownLoadTask = InGameDownLoad.Instance.GetMaxTask(); 
 | 
            }); 
 | 
        } 
 | 
  
 | 
        protected override void OnPreOpen() 
 | 
        { 
 | 
            timer = 1f; 
 | 
            m_RewardGotSign.SetActive(InGameDownLoad.Instance.hasReward); 
 | 
  
 | 
            // var items = new List<Item>(); 
 | 
            // foreach (var reward in InGameDownLoad.Instance.rewards) 
 | 
            // { 
 | 
            //     items.Add(new Item(reward.id, reward.count)); 
 | 
            // } 
 | 
  
 | 
            // m_RewardGroup.Display(items); 
 | 
            OnDownLoadStepChange(InGameDownLoad.Instance.state); 
 | 
            downLoadGo.isOn = InGameDownLoad.Instance.downLoadGo; 
 | 
        } 
 | 
  
 | 
        protected override void OnOpen() 
 | 
        { 
 | 
            InGameDownLoad.Instance.downLoadStateChangeEvent += OnDownLoadStepChange; 
 | 
        } 
 | 
  
 | 
        protected override void OnPreClose() 
 | 
        { 
 | 
            InGameDownLoad.Instance.downLoadStateChangeEvent -= OnDownLoadStepChange; 
 | 
        } 
 | 
  
 | 
        protected override void OnClose() 
 | 
        { 
 | 
        } 
 | 
        #endregion 
 | 
  
 | 
        private void OnDownLoadStepChange(InGameDownLoad.State _step) 
 | 
        { 
 | 
            m_Award.SetActive(_step == InGameDownLoad.State.Award); 
 | 
            m_PauseDownLoad.SetActive(_step == InGameDownLoad.State.DownLoad); 
 | 
            m_StartDownLoad.SetActive(_step == InGameDownLoad.State.Prepared || _step == InGameDownLoad.State.Pause); 
 | 
            m_ContainerProgress.SetActive(_step == InGameDownLoad.State.DownLoad || _step == InGameDownLoad.State.Pause); 
 | 
  
 | 
            if (_step != InGameDownLoad.State.DownLoad) 
 | 
            { 
 | 
                m_DownLoadSpeed.text = string.Empty; 
 | 
            } 
 | 
  
 | 
            if (_step == InGameDownLoad.State.Prepared || _step == InGameDownLoad.State.Award) 
 | 
            { 
 | 
                m_ContainerHint.SetActive(true); 
 | 
                DisplayHintContent(); 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                m_ContainerHint.SetActive(false); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        protected void LateUpdate() 
 | 
        { 
 | 
            var step = InGameDownLoad.Instance.state; 
 | 
            if (step == InGameDownLoad.State.DownLoad) 
 | 
            { 
 | 
                timer += Time.deltaTime; 
 | 
                if (timer > 1f) 
 | 
                { 
 | 
                    timer -= 1f; 
 | 
                    m_ProgressSlider.value = InGameDownLoad.Instance.progress; 
 | 
                    var totalSizeString = ((float)InGameDownLoad.Instance.showTotalSize / InGameDownLoad.BYTE_PER_MILLIONBYTE).ToString("f1"); 
 | 
                    var downLoadedSize = Mathf.Clamp(InGameDownLoad.Instance.showDownLoadedSize, 0, InGameDownLoad.Instance.showTotalSize - 1); 
 | 
                    var downLoadedSizeString = ((float)downLoadedSize / InGameDownLoad.BYTE_PER_MILLIONBYTE).ToString("f1"); 
 | 
                    m_Progress.text = Language.GetFromLocal(13, StringUtility.Contact(downLoadedSizeString, "M", "/", totalSizeString, "M")); 
 | 
  
 | 
                    if (InGameDownLoad.Instance.showDownLoadedSize >= InGameDownLoad.Instance.showTotalSize) 
 | 
                    { 
 | 
                        m_DownLoadSpeed.text = StringUtility.Contact(UnityEngine.Random.Range(5, 10), "KB/S"); 
 | 
                    } 
 | 
                    else 
 | 
                    { 
 | 
                        m_DownLoadSpeed.text = DownloadHotMgr.Instance.SpeedFormat; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        private void DisplayHintContent() 
 | 
        { 
 | 
            var step = InGameDownLoad.Instance.state; 
 | 
  
 | 
            switch (step) 
 | 
            { 
 | 
                case InGameDownLoad.State.Prepared: 
 | 
                    var totalCount = InGameDownLoad.Instance.showTotalCount; 
 | 
                    var totalSize = InGameDownLoad.Instance.showTotalSize; 
 | 
                    if (totalSize > InGameDownLoad.BYTE_PER_MILLIONBYTE) 
 | 
                    { 
 | 
                        var sizeDescription = ((float)totalSize / InGameDownLoad.BYTE_PER_MILLIONBYTE).ToString("f1"); 
 | 
                        m_Content.text = Language.GetFromLocal(19, sizeDescription); 
 | 
                    } 
 | 
                    else 
 | 
                    { 
 | 
                        var sizeDescription = ((float)totalSize / InGameDownLoad.BYTE_PER_KILOBYTE).ToString("f1"); 
 | 
                        m_Content.text = Language.GetFromLocal(20, sizeDescription); 
 | 
                    } 
 | 
                    break; 
 | 
                case InGameDownLoad.State.DownLoad: 
 | 
                    m_Content.text = Language.GetFromLocal(3); 
 | 
                    break; 
 | 
                case InGameDownLoad.State.Pause: 
 | 
                    m_Content.text = Language.GetFromLocal(21); 
 | 
                    break; 
 | 
                case InGameDownLoad.State.Award: 
 | 
                    m_Content.text = Language.GetFromLocal(25); 
 | 
                    break; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        private void StartDownLoad() 
 | 
        { 
 | 
            timer = 1f; 
 | 
            switch (InGameDownLoad.Instance.state) 
 | 
            { 
 | 
                case InGameDownLoad.State.Prepared: 
 | 
                case InGameDownLoad.State.Pause: 
 | 
                    if (Application.internetReachability == NetworkReachability.NotReachable) 
 | 
                    { 
 | 
                        ServerTipDetails.DisplayNormalTip(Language.GetFromLocal(24)); 
 | 
                    } 
 | 
                    else 
 | 
                    { 
 | 
                        InGameDownLoad.Instance.StartDownLoad(); 
 | 
                        CloseWindow(); 
 | 
                    } 
 | 
                    break; 
 | 
                default: 
 | 
                    CloseWindow(); 
 | 
                    break; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        private void PauseDownLoad() 
 | 
        { 
 | 
            timer = 1f; 
 | 
            switch (InGameDownLoad.Instance.state) 
 | 
            { 
 | 
                case InGameDownLoad.State.DownLoad: 
 | 
                    InGameDownLoad.Instance.Pause(); 
 | 
                    break; 
 | 
                default: 
 | 
                    break; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        private void Award() 
 | 
        { 
 | 
            InGameDownLoad.Instance.RequestDownLoadReward(true); 
 | 
            UIManager.Instance.CloseWindow<InGameDownLoadWin>(); 
 | 
        } 
 | 
  
 | 
    } 
 |