//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, September 11, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using EnhancedUI.EnhancedScroller; namespace Snxxz.UI { //功能预告面板 public enum FeatureNoticeEnum { Pet = 6,//灵宠 Horse = 8,//坐骑 Wing = 97,//翅膀 GossipFurnace = 143,//八卦炉 } public class FeatureNoticeWin : Window { [SerializeField] Text m_TextAdvanceName;//功能名 [SerializeField] Image m_FeaturesImage;//功能图标 [SerializeField] Text m_Text_ShowA;//显示内容1 [SerializeField] Text m_TextShowB;//显示内容2 [SerializeField] Text m_TextShowC;//显示内容3 [SerializeField] Text m_TextShowD;//显示内容4 [SerializeField] ScrollerController m_ScrollerController; [SerializeField] Button m_CloseButton; [SerializeField] Text m_TextTurnedOn;//已开启 [SerializeField] Text m_TextUnopened;//未开启 [SerializeField] Text m_Textschedule;//进度 [SerializeField] Button m_ButtonGoto; [SerializeField] RawImage m_RawImage1; [SerializeField] RawImage m_RawImage2; [SerializeField] RawImage m_RawImage3; [SerializeField] RawImage m_RawImage4; [SerializeField] Text m_keyName; [SerializeField] FeatureNoticeTip m_FeatureNoticeTip; [SerializeField] ScaleTween m_ScaleTween; [SerializeField] Transform m_Tran; public int Offset = 0;//偏移 TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel(); } } FeatureNoticeModel featureNoticeModel { get { return ModelCenter.Instance.GetModel(); } } private bool IsJump = false; #region Built-in private int ClickFuncID = 0; protected override void BindController() { } protected override void AddListeners() { m_CloseButton.AddListener(OnClickBtn); m_ScrollerController.OnRefreshCell += OnRefreshGridCell; } protected override void OnPreOpen() { m_ScaleTween.SetStartState(); IsJump = WindowJumpMgr.Instance.IsJumpState; if (!IsJump)//是否经历跳转打开 { DefaultSelection();//获取默认选择 } m_FeatureNoticeTip.Init(); OnCreateGridLineCell(m_ScrollerController); ContentDisplay(); } protected override void OnActived() { var offset = 0f; m_ScrollerController.JumpIndex(JumpIndex(), ref offset); m_ScrollerController.JumpIndex(Offset + offset, 0, EnhancedScroller.TweenType.immediate); } protected override void OnAfterOpen() { FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; PlayerDatas.Instance.PlayerDataRefreshInfoEvent += OnPlayersUpLV; treasureModel.treasureStateChangeEvent += treasureStateChangeEvent; treasureModel.treasureStageUpEvent += treasureStageUpEvent; if (!IsJump)//是否经历跳转打开 { m_ScaleTween.Play(false, IsOpen); } else { m_ScaleTween.SetEndState(); } } protected override void OnPreClose() { UI3DModelExhibition.Instance.StopShow(); UI3DModelExhibition.Instance.StopShow(); UI3DModelExhibition.Instance.StopShow(); UI3DTreasureExhibition.Instance.StopShow(); } protected override void OnAfterClose() { PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= OnPlayersUpLV; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; treasureModel.treasureStateChangeEvent -= treasureStateChangeEvent; treasureModel.treasureStageUpEvent -= treasureStageUpEvent; if (featureNoticeModel.redPointStre1.state == RedPointState.Simple) { featureNoticeModel.redPointStre1.state = RedPointState.None; } WindowCenter.Instance.Open(); } private void treasureStageUpEvent(int obj) { ContentDisplay(); m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见 } private void treasureStateChangeEvent(int obj) { ContentDisplay(); m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见 } private void OnFuncStateChangeEvent(int obj) { ContentDisplay(); m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见 } private void OnPlayersUpLV(PlayerDataRefresh obj) { if (obj == PlayerDataRefresh.LV) { ContentDisplay(); m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见 } } void OnCreateGridLineCell(ScrollerController gridCtrl) { gridCtrl.Refresh(); for (int i = 0; i < featureNoticeModel.FunctionList.Count; i++) { if (i == 0) { gridCtrl.AddCell(ScrollerDataType.Header, featureNoticeModel.FunctionList[i].FuncId); } else { gridCtrl.AddCell(ScrollerDataType.Normal, featureNoticeModel.FunctionList[i].FuncId); } } gridCtrl.Restart(); } private void OnRefreshGridCell(ScrollerDataType type, CellView cell) { int funcId = cell.index; if (type == ScrollerDataType.Header) { FeaturesType1 featuresType1 = cell.GetComponent(); featuresType1.GetTheFeatureID(funcId); if (funcId == ClickFuncID) { featuresType1.ImageSelected.SetActive(true); } else { featuresType1.ImageSelected.SetActive(false); } featuresType1.Button.SetListener(() => { if (funcId != ClickFuncID) { ClickFuncID = funcId; ContentDisplay(); m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见 } }); } else if (type == ScrollerDataType.Normal) { FeaturesType2 featuresType2 = cell.GetComponent(); featuresType2.GetTheFeatureID(funcId); if (funcId == ClickFuncID) { featuresType2.ImageSelected.SetActive(true); } else { featuresType2.ImageSelected.SetActive(false); } featuresType2.Button.SetListener(() => { if (funcId != ClickFuncID) { ClickFuncID = funcId; ContentDisplay(); m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见 } }); } } #endregion private List configs = new List(); private void DefaultSelection()//获取默认选择 { if (configs.Count <= 0) { configs= FunctionForecastConfig.GetValues(); } //var configs = FunctionForecastConfig.GetValues(); foreach (var config in configs) { int openTag = config.FuncId; if (!FuncOpen.Instance.IsFuncOpen(openTag)) { ClickFuncID = openTag; featureNoticeModel.FunctionForecastIndex = config.OpenNumber; return; } } if (ClickFuncID == 0) { ClickFuncID = featureNoticeModel.FunctionList[0].FuncId; } } private int JumpIndex()//Jump选中 { int Index = 0; Index = featureNoticeModel.FunctionList.FindIndex((x) => { return x.FuncId == ClickFuncID; }); return Index; } private void ContentDisplay()//内容显示 { var functionForecastConfig = FunctionForecastConfig.Get(ClickFuncID); if (functionForecastConfig == null) { return; } bool Type = false; int NeedLv = 0; int playerLv = PlayerDatas.Instance.baseData.LV; if (functionForecastConfig.OpenNumber - 2 >= featureNoticeModel.FunctionForecastIndex) { Type = true; NeedLv = featureNoticeModel.GetOpenLv(functionForecastConfig.OpenNumber - 2); } if (!FuncOpen.Instance.IsFuncOpen(ClickFuncID) && Type && NeedLv > playerLv) { m_Text_ShowA.gameObject.SetActive(false); m_TextShowB.gameObject.SetActive(false); m_TextShowC.gameObject.SetActive(false); m_TextShowD.gameObject.SetActive(false); m_TextAdvanceName.text = "?"; } else { m_Text_ShowA.gameObject.SetActive(true); m_TextShowB.gameObject.SetActive(true); m_TextShowC.gameObject.SetActive(true); m_TextShowD.gameObject.SetActive(true); m_TextAdvanceName.text = functionForecastConfig.FuncName; } DisplayIcon(ClickFuncID); string[] StrList = ConfigParse.GetMultipleStr(functionForecastConfig.Content); if (StrList.Length > 0) { m_Text_ShowA.text = StrList[0]; m_TextShowB.text = StrList[1]; m_TextShowC.text = StrList[2]; m_TextShowD.text = StrList[3]; } if (FuncOpen.Instance.IsFuncOpen(ClickFuncID)) { m_TextTurnedOn.gameObject.SetActive(true); m_TextUnopened.gameObject.SetActive(false); m_Textschedule.gameObject.SetActive(false); m_ButtonGoto.gameObject.SetActive(false); } else { TrailerClassification(ClickFuncID); } } private void DisplayIcon(int funcID)//显示图标或者模型 { m_RawImage1.gameObject.SetActive(false); m_RawImage2.gameObject.SetActive(false); m_RawImage3.gameObject.SetActive(false); m_RawImage4.gameObject.SetActive(false); m_FeaturesImage.gameObject.SetActive(false); UI3DModelExhibition.Instance.StopShow(); UI3DModelExhibition.Instance.StopShow(); UI3DModelExhibition.Instance.StopShow(); UI3DTreasureExhibition.Instance.StopShow(); var functionForecastConfig = FunctionForecastConfig.Get(ClickFuncID); bool Type = false; int NeedLv = 0; int playerLv = PlayerDatas.Instance.baseData.LV; if (functionForecastConfig.OpenNumber - 2 >= featureNoticeModel.FunctionForecastIndex) { Type = true; NeedLv = featureNoticeModel.GetOpenLv(functionForecastConfig.OpenNumber - 2); } if (!FuncOpen.Instance.IsFuncOpen(ClickFuncID) && Type && NeedLv > playerLv) { m_FeaturesImage.gameObject.SetActive(true); m_FeaturesImage.SetSprite("YGWENHAO"); m_FeaturesImage.SetNativeSize(); return; } switch (funcID) { case (int)FeatureNoticeEnum.Pet: m_RawImage1.gameObject.SetActive(true); var npcConfig = NPCConfig.Get(50106001); UI3DModelExhibition.Instance.ShowNPC(50106001, npcConfig.UIModeLOffset, npcConfig.UIModelRotation, m_RawImage1); break; case (int)FeatureNoticeEnum.Horse: m_RawImage2.gameObject.SetActive(true); HorseConfig _model = HorseConfig.Get(100); UI3DModelExhibition.Instance.ShowHourse(_model.Model, m_RawImage2); break; case (int)FeatureNoticeEnum.Wing: m_RawImage3.gameObject.SetActive(true); var vec3 = new Vector3(0, 90, -90); int job = PlayerDatas.Instance.baseData.Job; if (job == 1) { var config = WingRefineExpConfig.Get(3711); int _modelID = config.Model; UI3DModelExhibition.Instance.ShowWing(_modelID, vec3, m_RawImage3); } else if (job == 2) { var config = WingRefineExpConfig.Get(3721); int _modelID = config.Model; UI3DModelExhibition.Instance.ShowWing(_modelID, vec3, m_RawImage3); } break; case (int)FeatureNoticeEnum.GossipFurnace: m_RawImage4.gameObject.SetActive(true); UI3DTreasureExhibition.Instance.BeginShowTreasure(301, m_RawImage4); break; default: m_FeaturesImage.gameObject.SetActive(true); m_FeaturesImage.SetSprite(functionForecastConfig.Icon); m_FeaturesImage.SetNativeSize(); break; } } List functionForecastValue = new List(); void TrailerClassification(int funcID)//预告分类 { m_TextTurnedOn.gameObject.SetActive(false); m_TextUnopened.gameObject.SetActive(false); m_Textschedule.gameObject.SetActive(false); m_ButtonGoto.gameObject.SetActive(false); FuncOpenLVConfig funcoPenConfig = FuncOpenLVConfig.Get(funcID); var functionForecastConfig = FunctionForecastConfig.Get(ClickFuncID); bool Type = false; int NeedLv = 0; int playerLv = PlayerDatas.Instance.baseData.LV; if (functionForecastConfig.OpenNumber - 2 >= featureNoticeModel.FunctionForecastIndex) { Type = true; NeedLv = featureNoticeModel.GetOpenLv(functionForecastConfig.OpenNumber - 2); } if (!FuncOpen.Instance.IsFuncOpen(ClickFuncID) && Type && NeedLv > playerLv) { if (functionForecastValue.Count <= 0) { functionForecastValue= FunctionForecastConfig.GetValues(); } // var functionForecastValue = FunctionForecastConfig.GetValues(); string StrNanme = string.Empty; foreach (var value in functionForecastValue) { if (value.OpenNumber == functionForecastConfig.OpenNumber - 2) { StrNanme = value.FuncName; } } m_TextUnopened.gameObject.SetActive(true); m_TextUnopened.text = string.Format(Language.Get("NextYGLimit"), NeedLv); return; } if (funcoPenConfig.LimitMagicWeapon != 0 || funcoPenConfig.LimitMissionID != 0) { if (funcoPenConfig.LimitMagicWeapon != 0)//法宝 { int faBaoID = funcoPenConfig.LimitMagicWeapon / 100; MagicWeapon(faBaoID); } else if (funcoPenConfig.LimitMissionID != 0)//任务 { m_TextUnopened.gameObject.SetActive(true); if (PlayerDatas.Instance.baseData.LV >= funcoPenConfig.LimitLV) { m_TextUnopened.text = string.Format(Language.Get("YGTaskDone"), funcoPenConfig.LimitLV, PlayerDatas.Instance.baseData.LV, funcoPenConfig.LimitLV); } else { m_TextUnopened.text = string.Format(Language.Get("YGTask"), funcoPenConfig.LimitLV, PlayerDatas.Instance.baseData.LV, funcoPenConfig.LimitLV); } return; } } else//等级 { m_TextUnopened.gameObject.SetActive(true); m_TextUnopened.text = string.Format(Language.Get("YGFuncLevel"), funcoPenConfig.LimitLV, PlayerDatas.Instance.baseData.LV, funcoPenConfig.LimitLV); return; } } private void MagicWeapon(int fabaoID) { m_Textschedule.gameObject.SetActive(true); m_ButtonGoto.gameObject.SetActive(true); Treasure treasure; TreasureConfig _treasure = TreasureConfig.Get(fabaoID); m_ButtonGoto.SetListener(() => { var config = TreasureConfig.Get(fabaoID); treasureModel.selectedTreasure = fabaoID; treasureModel.currentCategory = (TreasureCategory)config.Category; WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.TreasureCollectSoul); }); if (treasureModel.TryGetTreasure(fabaoID, out treasure) && treasure.state == TreasureState.Collected) { m_keyName.text = Language.Get("YGQWJX"); var list = treasure.treasureStages; var funcStage = 0; for (int i = 0; i < list.Count; i++) { if (list[i].unlockType == TreasureStageUnlock.Func && list[i].func == ClickFuncID) { funcStage = i; break; } } if (treasure.stage < funcStage) { if (treasure.stage == funcStage - 1 || funcStage == 0) { if (treasure.exp >= treasure.treasureStages[funcStage].exp) { m_Textschedule.text = string.Format(Language.Get("YGYouFBDone"), "100%"); } else { double dou = Math.Round((double)treasure.exp / treasure.treasureStages[funcStage].exp, 2); string str = dou * 100 + "%"; m_Textschedule.text = string.Format(Language.Get("YGYouFB"), str); } } else { m_Textschedule.text = string.Format(Language.Get("YGYouFB"), "0%"); } } } else { m_keyName.text = Language.Get("YGHQFB"); m_Textschedule.text = string.Format(Language.Get("YGNoFB"), _treasure.Name); } } private void OnClickBtn() { if (!WindowJumpMgr.Instance.IsJumpState)//是否经历跳 { m_FeatureNoticeTip.FeatureNoticeTipObj.SetActive(true); m_ScaleTween.Play(true, IsClose); } else { Close(); } } private void IsOpen() { m_FeatureNoticeTip.FeatureNoticeTipObj.SetActive(false); } private void IsClose() { Close(); } } }