//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, September 05, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class LaunchWin : Window { [SerializeField] UIAlphaTween m_AlphaTween; [SerializeField] Image m_BackGround; [SerializeField] RectTransform m_AndroidProgressContainer; [SerializeField] SmoothSlider m_PartProgressSlider; [SerializeField] SmoothSlider m_TotalProgressSlider; [SerializeField] Text m_StageDescription; [SerializeField] RectTransform m_IosProgressContainer; [SerializeField] Text m_IosProgressTip; [SerializeField] Text m_BuildTime; [SerializeField] Text m_Version; [SerializeField] Button m_UserHelp; bool assetBuildTimeShowed = false; Launch.LaunchStage showStage = Launch.LaunchStage.None; int showStep = 0; string stepDescription = string.Empty; float backGroundTimer = 0f; int backGroundIndex = 0; List backGrounds = new List(); #region Built-in protected override void BindController() { for (var i = 0; i < 3; i++) { var sprite = BuiltInLoader.LoadSprite(StringUtility.Contact("Launch_", i + 1)); if (sprite != null) { backGrounds.Add(sprite); } } m_BackGround.overrideSprite = backGrounds[0]; } protected override void AddListeners() { if (m_UserHelp) { m_UserHelp.SetListener(OpenUserHelp); } } protected override void OnPreOpen() { backGroundTimer = 0f; backGroundIndex = 0; if (m_TotalProgressSlider != null) { m_TotalProgressSlider.ResetValue(0f); } m_AlphaTween.SetStartState(); m_Version.text = StringUtility.Contact(VersionConfig.Get().version, "_", VersionConfig.Get().buildIndex); m_BuildTime.text = VersionConfig.Get().debugVersion ? VersionConfig.Get().buildTime : ""; if (m_UserHelp) { var appId = VersionConfig.Get().appId; var branch = VersionConfig.Get().branch; m_UserHelp.gameObject.SetActive(ContactConfig.GetConfig(appId, branch) != null); } if (Application.platform == RuntimePlatform.IPhonePlayer) { m_AndroidProgressContainer.gameObject.SetActive(false); m_IosProgressContainer.gameObject.SetActive(true); } else { m_AndroidProgressContainer.gameObject.SetActive(true); m_IosProgressContainer.gameObject.SetActive(false); } if (m_StageDescription != null) { m_StageDescription.text = GetLaunchStageDescription(showStage, showStep); } UpdateProgress(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } protected override void OnActived() { base.OnActived(); if (m_TotalProgressSlider == null) { m_TotalProgressSlider = this.GetComponentInChildren(true); } } #endregion public void FadeOut() { m_AlphaTween.Play(); } string GetLaunchStageDescription(Launch.LaunchStage _stage, int step) { switch (_stage) { case Launch.LaunchStage.SDKInit: return Language.GetFromLocal(36); case Launch.LaunchStage.AssetCopy: return StringUtility.Contact(Language.GetFromLocal(37), "(", step, ")"); case Launch.LaunchStage.AssetDecompress: return StringUtility.Contact(Language.GetFromLocal(38), "(", step, ")"); case Launch.LaunchStage.ClientVersion: return Language.GetFromLocal(39); case Launch.LaunchStage.CheckAsset: return Language.GetFromLocal(40); case Launch.LaunchStage.DownLoad: return Language.GetFromLocal(41); case Launch.LaunchStage.AssetBundleInit: return Language.GetFromLocal(42); case Launch.LaunchStage.ConfigInit: return StringUtility.Contact(Language.GetFromLocal(43), "(", step, ")"); case Launch.LaunchStage.Complete: return Language.GetFromLocal(44); default: return ""; } } protected override void LateUpdate() { base.LateUpdate(); UpdateProgress(); backGroundTimer += Time.deltaTime; if (backGroundTimer >= 3f) { backGroundTimer = 0f; m_BackGround.overrideSprite = backGrounds[(++backGroundIndex) % backGrounds.Count]; } } private void OpenUserHelp() { WindowCenter.Instance.OpenFromLocal(); } private void UpdateProgress() { if (Application.platform == RuntimePlatform.IPhonePlayer) { m_IosProgressContainer.gameObject.SetActive(Launch.progressInfo.stage != Launch.LaunchStage.DownLoad); var remainder = ((int)Time.time) % 3; var dot = remainder == 0 ? "." : remainder == 1 ? ".." : "..."; m_IosProgressTip.text = StringUtility.Contact(Language.GetFromLocal(30), dot); } else { var progressInfo = Launch.progressInfo; if (progressInfo.stage == Launch.LaunchStage.DownLoad) { if (m_PartProgressSlider != null && m_PartProgressSlider.gameObject.activeInHierarchy) { m_PartProgressSlider.gameObject.SetActive(false); } if (m_TotalProgressSlider != null && m_TotalProgressSlider.gameObject.activeInHierarchy) { m_TotalProgressSlider.gameObject.SetActive(false); } } else { if (m_PartProgressSlider != null && !m_PartProgressSlider.gameObject.activeInHierarchy) { m_PartProgressSlider.gameObject.SetActive(true); } if (m_TotalProgressSlider != null && !m_TotalProgressSlider.gameObject.activeInHierarchy) { m_TotalProgressSlider.gameObject.SetActive(true); } if (m_TotalProgressSlider != null) { m_TotalProgressSlider.value = progressInfo.totalProgress; } if (m_PartProgressSlider != null) { m_PartProgressSlider.value = progressInfo.partProgress; } } DisplayStageDescription(progressInfo.stage, progressInfo.step); if (!assetBuildTimeShowed && AssetVersionUtility.assetsBuildTime != DateTime.MinValue) { assetBuildTimeShowed = true; var totalMinute = (int)(AssetVersionUtility.assetsBuildTime - new DateTime(2018, 1, 1)).TotalMinutes; m_Version.text = StringUtility.Contact(VersionConfig.Get().version, "_", VersionConfig.Get().buildIndex, "_", totalMinute.ToString()); } } } private void DisplayStageDescription(Launch.LaunchStage stage, int step) { if (showStage != stage || showStep != step) { showStage = stage; showStep = step; if (m_StageDescription != null) { m_StageDescription.text = GetLaunchStageDescription(stage, step); } } } } }