// *********************************************************************** // Assembly : Game // Author : Kimch // Created : 2020-09-08 // Description : // Last Modified By : // Last Modified On : // *********************************************************************** // // // *********************************************************************** using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using Text = TMPro.TextMeshProUGUI; namespace G.UI { partial class MapPanel { /// /// 关卡组件 /// class LevelWidget : KUIWidget { #region Field #pragma warning disable CS0649 // 从未对字段赋值,字段将一直保持其默认值 null [KUIFlag] GameObject _goMajor; //[KUIFlag] //Image _imgIcon; [KUIFlag] KUIImage _imgState; [KUIFlag] Button _btnOpen; [KUIFlag] Text _tmpName; [KUIFlag] Image _imgFigure; [KUIFlag] GameObject _goMinor; //[KUIFlag] //Image _imgMnOver; //[KUIFlag] //Image _imgMnOpen; //[KUIFlag] //Image _imgMnBeing; [KUIFlag] KUIImage _imgMnIcon; [KUIFlag] GameObject _goUnlock; [KUIFlag] Image _imgUnlockIcon; [KUIFlag] Text _tmpLevel; [KUIFlag] Text _tmpMnLevel; #pragma warning restore CS0649 // 从未对字段赋值,字段将一直保持其默认值 null #endregion #region Method public override void Refresh() { if (this.data is ItemLevel levelItem) { _tmpName.text = levelItem.name; if (!string.IsNullOrEmpty(levelItem.figure)) { SetState(levelItem, true); StartCoroutine(SetFigure(levelItem.chapter.atlas, levelItem.figure)); //var spriteAddr = $"{levelItem.chapter.atlas}[{levelItem.figure}]"; //var spriteAddr = "sa_chapter"; //AssetProxy.Instance.TryGetGlobalAssetAsync(spriteAddr).Completed += (handle) => //{ // if (handle.Status == UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationStatus.Succeeded) // { // _imgFigure.gameObject.SetActive(true); // _imgFigure.overrideSprite = handle.Result.GetSprite(levelItem.figure); // _imgFigure.SetNativeSize(); // } // else // { // _imgFigure.gameObject.SetActive(false); // } //}; } else { SetState(levelItem, false); } } } private IEnumerator SetFigure(string atlas, string figure) { //var spriteAddr = "sa_chapter"; var handle = AssetProxy.Instance.TryGetGlobalAssetAsync(atlas); yield return handle; if (handle.Status == UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationStatus.Succeeded) { _imgFigure.gameObject.SetActive(true); _imgFigure.overrideSprite = handle.Result.GetSprite(figure); _imgFigure.SetNativeSize(); } else { _imgFigure.gameObject.SetActive(false); } } private void SetUnlockSystem(ItemLevel levelItem) { if (GlobalVar.ShowUnlockSystemLevelId == levelItem.id && levelItem.unlockIcon != null && levelItem.unlockIcon.Length > 0) { _goUnlock.SetActive(true); IconProxy.Instance.SetSprite(_imgUnlockIcon, levelItem.unlockIcon); } else { _goUnlock.SetActive(false); } } private void OnUnlockTipsClick() { if (this.data is ItemLevel levelItem) { PostNotification(GlobalDefine.EVENT_LEVEL_TIPS, KLocalization.GetLocalString(levelItem.unlockTips)); } } private void SetState(ItemLevel levelItem, bool major) { _goMajor.SetActive(major); _goMinor.SetActive(!major); if (levelItem.isCompleted) { if (major) { //_imgIcon.gameObject.SetActive(false); _imgState.ShowSprite(2); SetGray(false, true); _goUnlock.SetActive(false); _tmpLevel.text = levelItem.id.ToString(); _tmpLevel.color = new Color32(219, 255, 211, 255); } else { //_imgMnIcon.gameObject.SetActive(false); _tmpMnLevel.text = "";// levelItem.id.ToString(); _imgMnIcon.ShowSprite(2); //_imgMnOver.gameObject.SetActive(true); //_imgMnOpen.gameObject.SetActive(false); //_imgMnBeing.gameObject.SetActive(false); } } else if (levelItem.isUnlock) { if (major) { //_imgIcon.gameObject.SetActive(true); _imgState.ShowSprite(1); SetGray(false, false); SetUnlockSystem(levelItem); _tmpLevel.text = levelItem.id.ToString(); _tmpLevel.color = new Color32(255, 246, 231, 255); } else { _imgMnIcon.ShowSprite(0); //_imgMnIcon.gameObject.SetActive(true); _tmpMnLevel.text = levelItem.id.ToString(); //_imgMnOver.gameObject.SetActive(false); //_imgMnOpen.gameObject.SetActive(true); //_imgMnBeing.gameObject.SetActive(false); } PostNotification(GlobalDefine.EVENT_LEVEL_ITEM_SHOW, this.transform, major ? "major" : "minor"); } else { if (major) { //_imgIcon.gameObject.SetActive(false); _imgState.ShowSprite(0); SetGray(true, false); SetUnlockSystem(levelItem); _tmpLevel.text = levelItem.id.ToString(); _tmpLevel.color = new Color32(187, 200, 206, 255); } else { //_imgMnIcon.gameObject.SetActive(false); _tmpMnLevel.text = levelItem.id.ToString(); _imgMnIcon.ShowSprite(1); //_imgMnOver.gameObject.SetActive(false); //_imgMnOpen.gameObject.SetActive(false); //_imgMnBeing.gameObject.SetActive(true); } } } void SetGray(bool gray, bool completed) { if (gray) { _imgFigure.color = new Color32(179, 196, 200, 255); _tmpName.color = new Color32(151, 165, 172, 255); } else { _imgFigure.color = Color.white; if (completed) _tmpName.color = new Color32(232, 245, 214, 255); else _tmpName.color = new Color32(255, 246, 231, 255); } _imgFigure.GetComponent().ShowGray(gray); } private void OnOpenBtnClick() { SoundProxy.PlayFxAsync(GlobalDefine.BUTTON_CLICK_SOUND); if (this.data is ItemLevel level) { if (!level.isUnlock) { ToastBox.ShowText("关卡未解锁"); return; } if (level.stories != null && level.stories.Length > 0 && level.stories[0] != null && level.stories[0].Length > 0) { if (StoryProxy.Instance.TriggerStory(level.stories[0][0], () => { KUIWindow.OpenWindow(level); })) { return; } } else { KUIWindow.OpenWindow(level); KStatistics.Instance.ReportEvent("show_window", $"{{\"open_page\":\"LevelInfo\",\"level_id\":{level.id}}}"); } } } #endregion #region Unity // Use this for initialization private void Awake() { SetViewData(); _btnOpen.onClick.AddListener(this.OnOpenBtnClick); _imgMnIcon.GetComponent