// *********************************************************************** // Assembly : Game // Author : Kimch // Created : 2020-09-12 // Description : // Last Modified By : // Last Modified On : // *********************************************************************** // // // *********************************************************************** using PureMVC.Interfaces; using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; namespace G.UI { /// /// /// partial class KungfuPanel : KUIWidget { #region Field #pragma warning disable CS0649 // 从未对字段赋值,字段将一直保持其默认值 null [KUIFlag] KUIToggleGroup _goPages; [KUIFlag] Toggle _tgShow; [KUIFlag] GameObject _goBookShow; [KUIFlag] GameObject _goPanel1; [KUIFlag] ScrollRect _goScroll; [KUIFlag] KUIList __listGroup; [KUIFlag] Button _btnStudy; [KUIFlag] Button _btnTips; [KUIFlag] Button _btnL; [KUIFlag] Button _btnR; [KUIFlag] GameObject __goStudyCost; [KUIFlag] GameObject __goStudyCost2; [KUIFlag] GameObject _goStudy; [KUIFlag] GameObject _goLocked; [KUIFlag] GameObject _goMaxGrade; [KUIFlag] TextMeshProUGUI _tmpLocked; [KUIFlag] GameObject _goAttributes; [KUIFlag] TextMeshProUGUI _tmpDetailName; [KUIFlag] TextMeshProUGUI _tmpDetailAttributes; [KUIFlag] Button _btnDetail; //panel2 [KUIFlag] GameObject _goPanel2; [KUIFlag] TextMeshProUGUI _tmpBookGroupName; [KUIFlag] TextMeshProUGUI _tmpBookGroupDescription; [KUIFlag] TextMeshProUGUI _tmpBookGroupPointer; [KUIFlag] TextMeshProUGUI _tmpBookGroupProgress; [KUIFlag] Slider _sldBookGroupProgress; [KUIFlag] KUIList __listBooks; #pragma warning restore CS0649 // 从未对字段赋值,字段将一直保持其默认值 null CostWidget _priceItem; CostWidget _priceItem2; int _curGroupIndex = 0; int _maxGroupIndex = 0; int _lastBookGroupIndex = 0; List _groupItems = new List(); int _showPage = 0; #endregion #region Method public override void Refresh() { if (_showPage == 0) ShowKunfu(); else ShowBook(); } public void ShowPage(int index) { if (_showPage != index) { _showPage = index; Refresh(); } } void ShowKunfu() { _goPanel1.SetActive(true); _goPanel2.SetActive(false); _goAttributes.SetActive(false); _btnStudy.interactable = true; _curGroupIndex = 0; var groups = KungfuProxy.Instance.GetKungfuGroups(); __listGroup.Clear(); _groupItems.Clear(); var groupItem = __listGroup.GetItem(); //groupItem.SetData(group); _groupItems.Add(groupItem); foreach (var group in groups) { //var groupItem = __listGroup.GetItem(); //groupItem.SetData(group); //_groupItems.Add(groupItem); if (group.isMaxGrade) _curGroupIndex += 1; } _maxGroupIndex = groups.Count - 1; SetGroupIndex(_curGroupIndex, false); } void ShowBook() { _goPanel1.SetActive(false); _goPanel2.SetActive(true); var groups = BookProxy.Instance.GetBookGroups(); if (_lastBookGroupIndex > 0) { _curGroupIndex = _lastBookGroupIndex; } else { _curGroupIndex = 0; foreach (var group in groups) { if (group.isActive) _curGroupIndex += 1; } } _maxGroupIndex = groups.Count - 1; SetGroupIndex(_curGroupIndex, false); } void ShowDetailKungfu(ItemKungfu kungfu) { if (kungfu.grade > 0) { _goAttributes.SetActive(true); _tmpDetailName.text = kungfu.name + $"({kungfu.grade}级)"; _tmpDetailAttributes.text = kungfu.ToString2(); } } void OnStudyBtnClick() { StartCoroutine(StudyAnimCO()); //var book = KungfuProxy.Instance.Study(_curGroupIndex); //if (book != null) //{ // _groupItems[_curGroupIndex].ShowStudyFx(book); //} SoundProxy.PlayFxAsync(GlobalDefine.BUTTON_CLICK_SOUND); } private IEnumerator StudyAnimCO() { var group = KungfuProxy.Instance.GetKungfuGroupByIndex(_curGroupIndex); if (group != null) { var book = group.GetRndStudy(); var price = group.curUpgradeCost; var notEnoughId = MoneyProxy.Instance.CheckMoney2(price); if (notEnoughId != 0) { AdMoneyBox.ShowAdMoney(notEnoughId, true); } else { _goAttributes.SetActive(false); _btnStudy.interactable = false; yield return _groupItems[0].StudyAnimCO(book); //yield return _groupItems[_curGroupIndex].StudyAnimCO(book); KungfuProxy.Instance.Study(group, book); _btnStudy.interactable = true; ShowDetailKungfu(book); } } } private void OnTipsBtnClick() { MessageBox.ShowMessage(KLocalization.GetLocalString(54), KLocalization.GetLocalString(55)); } private void OnBGBtnClick() { _goAttributes.SetActive(false); SoundProxy.PlayFxAsync(GlobalDefine.BUTTON_CLICK_SOUND); } //private int _scroll; //private float _scrollTarget; private void OnLBtnClick() { if (_curGroupIndex > 0) { SetGroupIndex(_curGroupIndex - 1); } SoundProxy.PlayFxAsync(GlobalDefine.BUTTON_CLICK_SOUND); } private void OnRBtnClick() { if (_curGroupIndex < _maxGroupIndex) { SetGroupIndex(_curGroupIndex + 1); } SoundProxy.PlayFxAsync(GlobalDefine.BUTTON_CLICK_SOUND); } private void SetGroupIndex(int index, bool anim = true) { _curGroupIndex = Mathf.Clamp(index, 0, _maxGroupIndex); if (_showPage == 0) { var groups = KungfuProxy.Instance.GetKungfuGroups(); var kungfuGroup = groups[_curGroupIndex]; _groupItems[0].SetData(kungfuGroup); if (_curGroupIndex == 0 || (kungfuGroup.unlockLevel <= LevelProxy.Instance.currentCompletedLevel && groups[_curGroupIndex - 1].isMaxGrade)) { _goLocked.SetActive(false); if (kungfuGroup.isMaxGrade) { _goStudy.SetActive(false); _goMaxGrade.SetActive(true); } else { _goMaxGrade.SetActive(false); _goStudy.SetActive(true); var upgradeCost = groups[_curGroupIndex].curUpgradeCost; if (upgradeCost.Length == 1) { _priceItem.SetPrice(upgradeCost[0], MoneyProxy.Instance.CheckMoney(upgradeCost[0])); _priceItem2.gameObject.SetActive(false); } else if (upgradeCost.Length == 2) { _priceItem.SetPrice(upgradeCost[0], MoneyProxy.Instance.CheckMoney(upgradeCost[0])); _priceItem2.gameObject.SetActive(true); _priceItem2.SetPrice(upgradeCost[1], MoneyProxy.Instance.CheckMoney(upgradeCost[1])); } } } else { _goMaxGrade.SetActive(false); _goStudy.SetActive(false); _goLocked.SetActive(true); var levelItem = ItemProxy.Instance.GetStaticItem(kungfuGroup.unlockLevel); if (levelItem != null) { var unlockStr = $"第{levelItem.id}关"; _tmpLocked.text = string.Format(KLocalization.GetLocalString(70), unlockStr); } else { _tmpLocked.text = "暂未开放"; } } } else { _lastBookGroupIndex = index; var groups = BookProxy.Instance.GetBookGroups(); var bookGroup = groups[_curGroupIndex]; _tmpBookGroupName.text = bookGroup.name; _tmpBookGroupDescription.text = bookGroup.description; int activeCount = bookGroup.activeBookCount; int maxCount = bookGroup.maxBookCount; _tmpBookGroupProgress.text = $"{activeCount}/{maxCount}"; _sldBookGroupProgress.value = activeCount / (float)maxCount; var chapter = ItemProxy.Instance.GetStaticItem(bookGroup.id); if (chapter != null) _tmpBookGroupPointer.text = string.Format(KLocalization.GetLocalString(30), chapter.name); __listBooks.Clear(); for (int i = 0; i < bookGroup.books.Length; i++) { var bookId = bookGroup.books[i]; __listBooks.GetItem().SetData(ItemProxy.Instance.GetStaticItem(bookId)); } } _btnL.gameObject.SetActive(_curGroupIndex != 0); _btnR.gameObject.SetActive(_curGroupIndex != _maxGroupIndex); //_scrollTarget = _curGroupIndex / (float)_maxGroupIndex; //if (anim) //{ // _scroll = 1; //} //else //{ // _scroll = 2; // _goScroll.horizontalNormalizedPosition = _scrollTarget; //} } private void OnShowToggleClick(bool tg) { if (tg) { ShowPage(0); _goBookShow.SetActive(true); } else { var function = FunctionProxy.Instance.GetFunction(FunctionProxy.FunctionId.文学); if (function != null) { if (function.IsUnlock()) { ShowPage(1); _goBookShow.SetActive(false); } else { _tgShow.isOn = true; ToastBox.ShowText(function.lockTips); } } } SoundProxy.PlayFxAsync(GlobalDefine.BUTTON_CLICK_SOUND); } private void OnToggleSelected(int index) { if (index == 0) { ShowPage(0); } else { var function = FunctionProxy.Instance.GetFunction(FunctionProxy.FunctionId.文学); if (function != null) { if (function.IsUnlock()) { ShowPage(1); } else { _goPages.toggles[0].isOn = true; ToastBox.ShowText(function.lockTips); } } } SoundProxy.PlayFxAsync(GlobalDefine.BUTTON_CLICK_SOUND); } #endregion #region Mediator private readonly int[] _notificationInterests = new int[] { GlobalDefine.EVENT_KUNGFU_STUDY, GlobalDefine.EVENT_KUNGFU_DETAIL, }; public override IList ListNotificationInterests() { return _notificationInterests; } public override void HandleNotification(INotification notification) { if (notification.Name == GlobalDefine.EVENT_KUNGFU_STUDY) Refresh(); else if (notification.Name == GlobalDefine.EVENT_KUNGFU_DETAIL) ShowDetailKungfu(notification.Body as ItemKungfu); } #endregion #region Unity /// /// /// private void Awake() { SetViewData(); _priceItem = __goStudyCost.AddComponent(); _priceItem2 = __goStudyCost2.AddComponent(); __listGroup.AddTemplate(true); _btnStudy.onClick.AddListener(this.OnStudyBtnClick); //_btnTips.onClick.AddListener(this.OnTipsBtnClick); _btnL.onClick.AddListener(this.OnLBtnClick); _btnR.onClick.AddListener(this.OnRBtnClick); _btnDetail.onClick.AddListener(this.OnBGBtnClick); //_goScroll.onValueChanged.AddListener(this.OnScrollValueChanged); _goPages.onToggleSelected.AddListener(this.OnToggleSelected); _tgShow.onValueChanged.AddListener(this.OnShowToggleClick); __listBooks.AddTemplate(true); } private void OnEnable() { RegisterThis(); Refresh(); PostNotification(GlobalDefine.EVENT_WINDOW_OPENED, 1, ""); } private void OnDisable() { UnregisterThis(); } private void LateUpdate() { //if (_scroll == 0 && !Input.anyKey) //{ // if (_goScroll.horizontalNormalizedPosition < 0.5f) // { // if (_goScroll.horizontalNormalizedPosition > 0f) // _goScroll.horizontalNormalizedPosition -= Time.deltaTime; // } // else // { // if (_goScroll.horizontalNormalizedPosition < 1f) // _goScroll.horizontalNormalizedPosition += Time.deltaTime; // } //} //if (_scroll == 1) //{ // float diff = _goScroll.horizontalNormalizedPosition - _scrollTarget; // if (Mathf.Abs(diff) < 0.1f) // { // _scroll = 0; // _goScroll.horizontalNormalizedPosition = _scrollTarget; // } // else // { // if (diff > 0) // { // _goScroll.horizontalNormalizedPosition -= Time.deltaTime * 2f; // } // else // { // _goScroll.horizontalNormalizedPosition += Time.deltaTime * 2f; // } // } //} //else if (_scroll == 2) //{ // _scroll = 0; // _goScroll.horizontalNormalizedPosition = _scrollTarget; //} } #endregion } }