//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, September 11, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TableConfig; namespace Snxxz.UI { //功能预告面板 public enum FeatureNoticeEnum { Pet=6,//灵宠 Horse=8,//坐骑 Wing=97,//翅膀 GossipFurnace=87,//八卦炉 } 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; TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel(); } } FeatureNoticeModel featureNoticeModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in private int ClickFuncID = 0; protected override void BindController() { } protected override void AddListeners() { m_CloseButton.AddListener(()=> { Close(); }); } protected override void OnPreOpen() { if (!WindowJumpMgr.Instance.IsJumpState)//是否经历跳转打开 { DefaultSelection();//获取默认选择 } m_ScrollerController.OnRefreshCell += OnRefreshGridCell; OnCreateGridLineCell(m_ScrollerController); ContentDisplay(); m_ScrollerController.JumpIndex(JumpIndex()); } protected override void OnAfterOpen() { FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; PlayerDatas.Instance.PlayerDataRefreshInfoEvent += OnPlayersUpLV; treasureModel.treasureStateChangeEvent += treasureStateChangeEvent; treasureModel.treasureStageUpEvent += treasureStageUpEvent; } protected override void OnPreClose() { UI3DModelExhibition.Instance.StopShowNPC(); UI3DModelExhibition.Instance.StopShowHourse(); UI3DModelExhibition.Instance.StopShowWing(); UI3DTreasureExhibition.Instance.StopShow(); } protected override void OnAfterClose() { PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= OnPlayersUpLV; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; m_ScrollerController.OnRefreshCell -= OnRefreshGridCell; treasureModel.treasureStateChangeEvent -= treasureStateChangeEvent; treasureModel.treasureStageUpEvent -= treasureStageUpEvent; if (featureNoticeModel.redPointStre1.state == RedPointState.Simple) { featureNoticeModel.redPointStre1.state = RedPointState.None; } } 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 void DefaultSelection()//获取默认选择 { var configs = Config.Instance.GetAllValues(); foreach (var config in configs) { int openTag = config.FuncId; if (!FuncOpen.Instance.IsFuncOpen(openTag)) { ClickFuncID = openTag; 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 = Config.Instance.Get(ClickFuncID); if (functionForecastConfig == null) { return; } 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.StopShowNPC(); UI3DModelExhibition.Instance.StopShowHourse(); UI3DModelExhibition.Instance.StopShowWing(); UI3DTreasureExhibition.Instance.StopShow(); var functionForecastConfig = Config.Instance.Get(ClickFuncID); switch (funcID) { case (int)FeatureNoticeEnum.Pet: m_RawImage1.gameObject.SetActive(true); var npcConfig = Config.Instance.Get(50106001); UI3DModelExhibition.Instance.BeginShowNPC(50106001, npcConfig.UIModeLOffset, npcConfig.UIModelRotation, m_RawImage1); break; case (int)FeatureNoticeEnum.Horse: m_RawImage2.gameObject.SetActive(true); HorseConfig _model = Config.Instance.Get(100); UI3DModelExhibition.Instance.BeginShowHourse(_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 = Config.Instance.Get(3711); int _modelID = config.Model; UI3DModelExhibition.Instance.BeginShowWing(_modelID, vec3, m_RawImage3); } else if (job == 2) { var config = Config.Instance.Get(3721); int _modelID = config.Model; UI3DModelExhibition.Instance.BeginShowWing(_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; } } 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 = Config.Instance.Get(funcID); 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 = Config.Instance.Get(fabaoID); m_ButtonGoto.SetListener(()=> { var config = Config.Instance.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 { string str = ((float)treasure.exp / treasure.treasureStages[funcStage].exp) * 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); } } } }