using FairyGUI; using UI.CommonGame; using UI.Main; using System.Collections.Generic; using UnityEngine; using System.Collections; namespace GFGGame { public class StoryChapterView : BaseView { private UI_StoryChapterUI _ui; private int _chapterID; private GComponent _compChapter; private ValueBarController _valueBarController; private GObject _unPasslevelItem; private GObject _endLevelItem; private EffectUI _effectUI1; private GComponent _comEff; private int currentDifficulty; public override void Dispose() { if (_comEff != null) { _comEff.RemoveFromParent(); _comEff.Dispose(); } if (_valueBarController != null) { _valueBarController.Dispose(); _valueBarController = null; } EffectUIPool.Recycle(_effectUI1); _effectUI1 = null; if (_ui != null) { _ui.Dispose(); _ui = null; } base.Dispose(); } protected override void Init() { base.Init(); _ui = UI_StoryChapterUI.Create(); viewCom = _ui.target; isfullScreen = true; } protected override void OnInit() { base.OnInit(); _valueBarController = new ValueBarController(_ui.m_valueBar); _ui.m_btnBack.onClick.Add(OnClickBtnBack); _ui.m_btnHome.onClick.Add(OnClickBtnHome); _ui.m_chapter.m_compChapterScroll.m_imgBegin.onClick.Add(OnClickNext); _ui.m_bonusBox1.target.onClick.Add(() => { OnClickBonusBox(_ui.m_bonusBox1, 0); }); _ui.m_bonusBox2.target.onClick.Add(() => { OnClickBonusBox(_ui.m_bonusBox2, 1); }); _ui.m_bonusBox3.target.onClick.Add(() => { OnClickBonusBox(_ui.m_bonusBox3, 2); }); _ui.m_loaBg.url = ResPathUtil.GetBgImgPath("zxian_bg3"); _comEff = new GComponent(); _comEff = UIPackage.CreateObject(UI_MainUI.PACKAGE_NAME, "ComEff").asCom; _effectUI1 = EffectUIPool.CreateEffectUI(_comEff.GetChild("holder").asGraph, "ui_gk", "ui_gk_sg"); } protected override void AddEventListener() { EventAgent.AddEventListener(ConstMessage.NOTICE_MAINSTORY_BOXBONUS_STATE, UpdateBonusBox); } protected override void OnShown() { base.OnShown(); _ui.target.touchable = false; MusicManager.Instance.Play(ResPathUtil.GetMusicPath(ConstMusicName.DEFAULT)); if ((this.viewData as object[]) != null) { _chapterID = (int)(this.viewData as object[])[0]; currentDifficulty = (int)(this.viewData as object[])[1]; } else { _chapterID = (int)this.viewData; } MainStoryDataManager.currentChapterCfgId = _chapterID; Timers.inst.StartCoroutine(InitChapter()); _valueBarController.OnShown(); _ui.target.touchable = true; Timers.inst.AddUpdate(CheckGuide); int chapterNum = StoryChapterCfgArray.Instance.GetCfgsBysubType(currentDifficulty).Count; if (MainStoryDataManager.CurrentChapterOrder == chapterNum) { _ui.m_chapter.m_compChapterScroll.m_imgBegin.visible = false; } else { _ui.m_chapter.m_compChapterScroll.m_imgBegin.visible = true; } } protected override void OnHide() { base.OnHide(); _unPasslevelItem = null; _endLevelItem = null; // _ui.m_chapter.RemoveChildren(0, 0, true); _valueBarController.OnHide(); Timers.inst.Remove(CheckGuide); } protected override void RemoveEventListener() { base.RemoveEventListener(); EventAgent.RemoveEventListener(ConstMessage.NOTICE_MAINSTORY_BOXBONUS_STATE, UpdateBonusBox); } private void OnClickBtnBack() { ViewManager.GoBackFrom(typeof(StoryChapterView).FullName); } private void OnClickBtnHome() { GameController.GoBackToMainView(); } private void OnClickNext() { if (MainStoryDataManager.CheckChapterUnlock(_chapterID+1)) { ViewManager.Show(new object[] { _chapterID+1, currentDifficulty }, new object[] { typeof(StoryChapterListView).FullName, new object[] { currentDifficulty } }); } else { PromptController.Instance.ShowFloatTextPrompt("需通关前置关卡"); } } private IEnumerator InitChapter() { StoryChapterCfg chapterCfg = StoryChapterCfgArray.Instance.GetCfg(_chapterID); _ui.m_txtChapterName0.text = chapterCfg.name.Length > 0 ? chapterCfg.name[0].ToString() : ""; _ui.m_txtChapterName1.text = chapterCfg.name.Length > 1 ? chapterCfg.name[1].ToString() : ""; _ui.m_txtChapterName2.text = chapterCfg.name.Length > 2 ? chapterCfg.name[2].ToString() : ""; _ui.m_txtChapterName3.text = chapterCfg.name.Length > 3 ? chapterCfg.name[3].ToString() : ""; _ui.m_txtChapterName4.text = chapterCfg.name.Length > 4 ? chapterCfg.name[4].ToString() : ""; int order = StoryUtil.GetChapterOrder(chapterCfg.id); _ui.m_txtChapter.text = order < 10 ? "0" + order : order.ToString(); int starCountChapter = InstanceZonesDataManager.GetChapterStarCount(_chapterID, chapterCfg.type, chapterCfg.subType); _ui.m_txtStarCount.text = "" + starCountChapter + "/" + chapterCfg.bonusStar3; UpdateBonusBoxName(_ui.m_bonusBox1, "" + chapterCfg.bonusStar1); UpdateBonusBoxName(_ui.m_bonusBox2, "" + chapterCfg.bonusStar2); UpdateBonusBoxName(_ui.m_bonusBox3, "" + chapterCfg.bonusStar3); UpdateBonusBox(); var list = StoryLevelCfgArray.Instance.GetCfgsBytypeAndsubTypeAndchapterId(chapterCfg.type, chapterCfg.subType, chapterCfg.id); int endLevel = 0; int UnlockCount = 0; _compChapter = _ui.m_chapter.m_compChapterScroll.target; float starPosY = _ui.m_chapter.m_compChapterScroll.m_imgBegin.y; int lineGap = 4500 / list.Count; _comEff.visible = false; for (int i = 0; i < 20; i++) { GObject obj = _ui.m_chapter.m_compChapterScroll.target.GetChild("g" + (19 - i + 1)); obj.SetPosition(obj.x, starPosY - lineGap * i - 300, 0); ; StoryLevelCfg levelCfg = i < list.Count ? list[i] : null; UI_CompStoryLevelItem levelItem = UI_CompStoryLevelItem.Proxy(obj); if (levelCfg != null && MainStoryDataManager.CheckLevelUnlock(levelCfg.id)) { UnlockCount++; levelItem.target.data = levelCfg.id; levelItem.target.visible = true; levelItem.target.onClick.Clear(); levelItem.target.onClick.Add(OnClickLevelItem); string showId = StoryUtil.GetChapterOrder(_chapterID) + "-" + levelCfg.order; levelItem.m_txtDialogOrder.text = showId; levelItem.m_txtFightOrder.text = showId; if (levelCfg.fightID.Length > 0) { levelItem.m_c1.selectedIndex = 1; int score = InstanceZonesDataManager.GetScoreHighest(levelCfg.id); if (score <= 0) { levelItem.m_flower.target.visible = false; } else { levelItem.m_flower.target.visible = true; int starCount = InstanceZonesDataManager.GetStarCountHistory(levelCfg.id); StoryUtil.UpdateStar(starCount, levelItem.m_flower.target); } } else { levelItem.m_c1.selectedIndex = 0; levelItem.m_flower.target.visible = false; levelItem.m_txtName.text = levelCfg.name; levelItem.m_comDialogBg.m_loabg.url = ResPathUtil.GetBgImgPath(chapterCfg.bgRes); levelItem.m_comDialogBg.m_loaIcon.url = ResPathUtil.GetChapterGuideIconPath(chapterCfg.bgRes); levelItem.m_comDialogBg.m_c1.selectedIndex = Random.Range(0, 10); } //根据困难程度选择显示图片 if (currentDifficulty == 1) { levelItem.m_loaDialogBg.url = "ui://Main/zxian_btn_jq_jy"; levelItem.m_fightBg.url = "ui://Main/zxian_btn_zd_jy"; levelItem.m_txtFightOrder.text = string.Format("{0}", StringUtil.GetColorText(showId.ToString(), "#E3F8FF")); levelItem.m_fightIconA.alpha = 0; levelItem.m_fightIconB.alpha = 0; _ui.m_txtBg.url = "ui://Main/zxian_chapter_dec_jy"; _ui.m_txtChapterName0.strokeColor = new Color(0.592f, 0.773f, 0.961f, 1.000f); _ui.m_txtChapterName1.strokeColor = new Color(0.592f, 0.773f, 0.961f, 1.000f); _ui.m_txtChapterName2.strokeColor = new Color(0.592f, 0.773f, 0.961f, 1.000f); _ui.m_txtChapterName3.strokeColor = new Color(0.592f, 0.773f, 0.961f, 1.000f); _ui.m_txtChapterName4.strokeColor = new Color(0.592f, 0.773f, 0.961f, 1.000f); _ui.m_txtChapter.strokeColor = new Color(0.592f, 0.773f, 0.961f, 1.000f); } else { levelItem.m_loaDialogBg.url = "ui://Main/zxian_btn_jq"; levelItem.m_fightBg.url = "ui://Main/zxian_btn_zd"; levelItem.m_txtFightOrder.text = string.Format("{0}", StringUtil.GetColorText(showId.ToString(), "#FFEABF")); levelItem.m_fightIconA.alpha = 0; levelItem.m_fightIconB.alpha = 0; _ui.m_txtBg.url = "ui://Main/zxian_chapter_dec"; _ui.m_txtChapterName0.strokeColor = new Color(1.000f, 0.686f, 0.318f, 1.000f); _ui.m_txtChapterName1.strokeColor = new Color(1.000f, 0.686f, 0.318f, 1.000f); _ui.m_txtChapterName2.strokeColor = new Color(1.000f, 0.686f, 0.318f, 1.000f); _ui.m_txtChapterName3.strokeColor = new Color(1.000f, 0.686f, 0.318f, 1.000f); _ui.m_txtChapterName4.strokeColor = new Color(1.000f, 0.686f, 0.318f, 1.000f); _ui.m_txtChapter.strokeColor = new Color(1.000f, 0.686f, 0.318f, 1.000f); } levelItem.m_holder.visible = !InstanceZonesDataManager.CheckLevelPass(levelCfg.id); if (!InstanceZonesDataManager.CheckLevelPass(levelCfg.id)) { //设置为解锁关卡 MainStoryDataManager.currentLevelCfgId = levelCfg.id; _unPasslevelItem = levelItem.target; levelItem.target.AddChild(_comEff); _comEff.visible = true; } if (levelCfg.order > endLevel) { endLevel = levelCfg.order; _endLevelItem = levelItem.target; } } else { levelItem.target.visible = false; } UI_CompStoryLevelItem.ProxyEnd(); } yield return new WaitForEndOfFrame(); _ui.m_chapter.m_compChapterScroll.target.y = Mathf.Max(0, _ui.m_chapter.target.height - _ui.m_chapter.m_compChapterScroll.target.height); } private void OnClickLevelItem(EventContext context) { UI_CompStoryLevelItem levelItem = UI_CompStoryLevelItem.Proxy(context.sender as GObject); int levelCfgId = (int)levelItem.target.data; UI_CompStoryLevelItem.ProxyEnd(); StoryController.ShowLevelView(levelCfgId); TryCompleteGuide(); } private void UpdateBonusBoxName(UI_CompBonusBox bonusBox, string name) { bonusBox.m_txtName.text = name; } private void UpdateBonusBox() { UpdateBonusBoxStatus(_ui.m_bonusBox1, 0); UpdateBonusBoxStatus(_ui.m_bonusBox2, 1); UpdateBonusBoxStatus(_ui.m_bonusBox3, 2); } private void UpdateBonusBoxStatus(UI_CompBonusBox bonusBox, int index) { int status = MainStoryDataManager.GetChapterBonusStatus(MainStoryDataManager.currentChapterCfgId, index); bonusBox.m_iconActive.visible = status == ConstBonusStatus.CAN_GET; // bonusBox.m_ComRewardEffect.visible = status == ConstBonusStatus.CAN_GET; if (status == ConstBonusStatus.GOT) { bonusBox.m_icon.url = "ui://Main/zxian_gift_get"; } else { bonusBox.m_icon.url = "ui://Main/zxian_gift_unget"; } bonusBox.target.data = status; } private async void OnClickBonusBox(UI_CompBonusBox bonusBox, int index) { int status = (int)bonusBox.target.data; if (status == ConstBonusStatus.CAN_GET) { bool got = await MainStorySProxy.GetMainStoryBoxBonus(MainStoryDataManager.currentChapterCfgId, index); if (got) { List bonusList = MainStoryDataManager.GetChapterBonus(MainStoryDataManager.currentChapterCfgId, index); if (bonusList != null && bonusList.Count > 0) { BonusController.TryShowBonusList(bonusList); } UpdateBonusBoxStatus(bonusBox, index); } } // else if (status == ConstBonusStatus.GOT) // { // PromptController.Instance.ShowFloatTextPrompt("这个宝箱已经被领取过了"); // } else { List rewards = StoryBonusDataCache.GetChapterBonusList(_chapterID, index); int star = StoryBonusDataCache.GetChapterBonusStar(_chapterID, index); ViewManager.Show(new object[] { rewards, "宝箱奖励", string.Format("本章达成{0}星可领取", star) }); // PromptController.Instance.ShowFloatTextPrompt("关卡总分不足,继续加油吧。"); } } private void CheckGuide(object param) { if (GuideDataManager.IsGuideFinish(ConstGuideId.START_FIGHT) <= 0 || GuideDataManager.IsGuideFinish(ConstGuideId.FREEDOM_DRESS) <= 0 || GuideDataManager.IsGuideFinish(ConstGuideId.ENTER_CHAPTER) <= 0 || GuideDataManager.IsGuideFinish(ConstGuideId.BUY_CLOTHING) <= 0 || GuideDataManager.IsGuideFinish(ConstGuideId.UP_CARD_LV) <= 0 || GuideDataManager.IsGuideFinish(ConstGuideId.ENTER_CHAPTER_1) <= 0 || GuideDataManager.IsGuideFinish(ConstGuideId.ENTER_CHAPTER_2) <= 0 || GuideDataManager.IsGuideFinish(ConstGuideId.ENTER_CHAPTER_3) <= 0 || GuideDataManager.IsGuideFinish(ConstGuideId.ENTER_CHAPTER_4) <= 0 || GuideDataManager.IsGuideFinish(ConstGuideId.ENTER_CHAPTER_5) <= 0 || GuideDataManager.IsGuideFinish(ConstGuideId.UP_CARD_STAR) <= 0 || GuideDataManager.IsGuideFinish(ConstGuideId.ARENA_OPEN) <= 0 || GuideDataManager.IsGuideFinish(ConstGuideId.CLOTHING_DECOMPOSE) <= 0) { UpdateToCheckGuide(null); } else { Timers.inst.Remove(CheckGuide); } } protected override void UpdateToCheckGuide(object param) { if (!ViewManager.CheckIsTopView(this.viewCom)) return; GComponent unPasslevelCom = _unPasslevelItem == null ? null : _unPasslevelItem.asCom; bool isGuide0 = GuideController.TryGuide(unPasslevelCom, ConstGuideId.START_FIGHT, 1, "尝试换上一套衣服吧。"); bool isGuide1 = GuideController.TryGuide(_ui.m_btnHome, ConstGuideId.FREEDOM_DRESS, 1, "获得的服饰随时可以查看和试穿。"); bool isGuide2 = GuideController.TryGuide(unPasslevelCom, ConstGuideId.ENTER_CHAPTER, 5, "来继续我们的旅程吧。"); GuideController.TryCompleteGuide(ConstGuideId.ENTER_CHAPTER, 5); bool isGuide3 = GuideController.TryGuide(unPasslevelCom, ConstGuideId.ENTER_CHAPTER_1, 4, "来继续我们的旅程吧。"); GuideController.TryCompleteGuide(ConstGuideId.ENTER_CHAPTER_1, 4); bool isGuide4 = GuideController.TryGuide(unPasslevelCom, ConstGuideId.BUY_CLOTHING, 1, "衣服被弄脏了,到机场更衣室换身衣服吧。"); bool isGuide5 = GuideController.TryGuide(_ui.m_btnHome, ConstGuideId.UP_CARD_LV, 1, "点击返回主界面。"); bool isGuide6 = GuideController.TryGuide(_ui.m_btnHome, ConstGuideId.CLOTHING_DECOMPOSE, 1, "点击返回主界面。"); bool isGuide7 = GuideController.TryGuide(unPasslevelCom, ConstGuideId.ENTER_CHAPTER_2, 4, "来继续我们的旅程吧。"); GuideController.TryCompleteGuide(ConstGuideId.ENTER_CHAPTER_2, 4); bool isGuide8 = GuideController.TryGuide(unPasslevelCom, ConstGuideId.ENTER_CHAPTER_3, 3, "来继续我们的旅程吧。"); GuideController.TryCompleteGuide(ConstGuideId.ENTER_CHAPTER_3, 3); bool isGuide10 = GuideController.TryGuide(unPasslevelCom, ConstGuideId.ENTER_CHAPTER_4, 4, "来继续我们的旅程吧。"); GuideController.TryCompleteGuide(ConstGuideId.ENTER_CHAPTER_4, 4); bool isGuide11 = GuideController.TryGuide(unPasslevelCom, ConstGuideId.ENTER_CHAPTER_5, 4, "来继续我们的旅程吧。"); GuideController.TryCompleteGuide(ConstGuideId.ENTER_CHAPTER_5, 4); bool isGuide9 = GuideController.TryGuide(_ui.m_btnHome, ConstGuideId.UP_CARD_STAR, 1, "点击返回主界面。"); bool isGuide12 = GuideController.TryGuide(_ui.m_btnHome, ConstGuideId.ARENA_OPEN, 1, "点击返回主界面。"); _ui.m_chapter.target.scrollPane.touchEffect = !isGuide0 && !isGuide1 && !isGuide2 && !isGuide3 && !isGuide4 && !isGuide5 && !isGuide6 && !isGuide7 && !isGuide8 && !isGuide9 && !isGuide10; } protected override void TryCompleteGuide() { base.TryCompleteGuide(); // GuideCfg cfg = GuideCfgArray.Instance.GetCfg(ConstGuideId.ENTER_CHAPTER); GuideController.TryCompleteGuideIndex(ConstGuideId.ENTER_CHAPTER, 5); GuideController.TryCompleteGuide(ConstGuideId.ENTER_CHAPTER, 5); // GuideCfg cfg1 = GuideCfgArray.Instance.GetCfg(ConstGuideId.ENTER_CHAPTER_1); GuideController.TryCompleteGuideIndex(ConstGuideId.ENTER_CHAPTER_1, 4); GuideController.TryCompleteGuide(ConstGuideId.ENTER_CHAPTER_1, 4); // GuideCfg cfg2 = GuideCfgArray.Instance.GetCfg(ConstGuideId.ENTER_CHAPTER_2); GuideController.TryCompleteGuideIndex(ConstGuideId.ENTER_CHAPTER_2, 4); GuideController.TryCompleteGuide(ConstGuideId.ENTER_CHAPTER_2, 4); // GuideCfg cfg3 = GuideCfgArray.Instance.GetCfg(ConstGuideId.ENTER_CHAPTER_3); GuideController.TryCompleteGuideIndex(ConstGuideId.ENTER_CHAPTER_3, 3); GuideController.TryCompleteGuide(ConstGuideId.ENTER_CHAPTER_3, 3); // GuideCfg cfg4 = GuideCfgArray.Instance.GetCfg(ConstGuideId.ENTER_CHAPTER_4); GuideController.TryCompleteGuideIndex(ConstGuideId.ENTER_CHAPTER_4, 4); GuideController.TryCompleteGuide(ConstGuideId.ENTER_CHAPTER_4, 4); // GuideCfg cfg5 = GuideCfgArray.Instance.GetCfg(ConstGuideId.ENTER_CHAPTER_5); GuideController.TryCompleteGuideIndex(ConstGuideId.ENTER_CHAPTER_5, 4); GuideController.TryCompleteGuide(ConstGuideId.ENTER_CHAPTER_5, 4); } } }