//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Tuesday, September 11, 2018
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
using TableConfig;
|
using EnhancedUI.EnhancedScroller;
|
|
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;
|
[SerializeField] FeatureNoticeTip m_FeatureNoticeTip;
|
[SerializeField] ScaleTween m_ScaleTween;
|
[SerializeField] Transform m_Tran;
|
public int Offset = 0;//偏移
|
TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
|
FeatureNoticeModel featureNoticeModel { get { return ModelCenter.Instance.GetModel<FeatureNoticeModel>(); } }
|
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.StopShowNPC();
|
UI3DModelExhibition.Instance.StopShowHourse();
|
UI3DModelExhibition.Instance.StopShowWing();
|
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<MainInterfaceWin>();
|
}
|
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>();
|
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>();
|
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<FunctionForecastConfig>();
|
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 = Config.Instance.Get<FunctionForecastConfig>(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);
|
}
|
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.StopShowNPC();
|
UI3DModelExhibition.Instance.StopShowHourse();
|
UI3DModelExhibition.Instance.StopShowWing();
|
UI3DTreasureExhibition.Instance.StopShow();
|
var functionForecastConfig = Config.Instance.Get<FunctionForecastConfig>(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 = Config.Instance.Get<NPCConfig>(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<HorseConfig>(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<WingRefineExpConfig>(3711);
|
int _modelID = config.Model;
|
UI3DModelExhibition.Instance.BeginShowWing(_modelID, vec3, m_RawImage3);
|
}
|
else if (job == 2)
|
{
|
var config = Config.Instance.Get<WingRefineExpConfig>(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<FuncOpenLVConfig>(funcID);
|
var functionForecastConfig = Config.Instance.Get<FunctionForecastConfig>(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)
|
{
|
var functionForecastValue = Config.Instance.GetAllValues<FunctionForecastConfig>();
|
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, functionForecastConfig.FuncName);
|
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 = Config.Instance.Get<TreasureConfig>(fabaoID);
|
m_ButtonGoto.SetListener(() =>
|
{
|
var config = Config.Instance.Get<TreasureConfig>(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();
|
}
|
}
|
|
}
|