//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Wednesday, October 11, 2017
|
//--------------------------------------------------------
|
using UnityEngine;
|
using System.Collections;
|
using UnityEngine.UI;
|
|
using System.Collections.Generic;
|
using UnityEngine.EventSystems;
|
//剧情任务面板
|
namespace Snxxz.UI
|
{
|
|
public class StoryTask : MonoBehaviour
|
{
|
[SerializeField] ScrollerController _TaskRamusList;
|
//右侧面板
|
[SerializeField] Text _Text_TaskName;//任务名
|
[SerializeField] RichText _Text_TaskDescribe;//任务描述
|
[SerializeField] RichText _Text_TaskTarget;//任务目标
|
[SerializeField] Transform _Grid;//任务奖励生成的节点
|
|
[SerializeField] Button _Btn_Forward;//剧情面板按钮
|
[SerializeField] Text _Text_Forward;//按钮文字
|
private List<RewardAnalysis.RewardInfo> rewardList = new List<RewardAnalysis.RewardInfo>();
|
Dictionary<int, Dictionary<string, string>> _DicTaskInforma = new Dictionary<int, Dictionary<string, string>>();//任务字典的信息
|
private Dictionary<int, MissionDetailDates> _MainTaskDic = new Dictionary<int, MissionDetailDates>();//主线任务字典
|
private Dictionary<int, string> chapterDic = new Dictionary<int, string>();//用来存储主线任务章节
|
private List<int> listTask = new List<int>();//储存当前章节的任务个数
|
private int mainTaskID = 0;//获取当前正在进行任务的ID
|
private int mainTaaskChapter = 1;//获取当前任务的章节
|
|
private int MainTaaskChapterNow = 1;//获取当前选中的选中章节数
|
private int MainTaskIDNow = 0;//当前选中的任务ID
|
private bool _IsOpenbool = true;
|
TaskModel m_TaskModel;
|
TaskModel taskmodel { get { return m_TaskModel ?? (m_TaskModel = ModelCenter.Instance.GetModel<TaskModel>()); } }
|
|
private void Awake()
|
{
|
_TaskRamusList.OnRefreshCell += OnRefreshGridCell;
|
SaveChapter();
|
}
|
private void OnEnable()
|
{
|
_IsOpenbool = true;
|
TaskModel.Event_TaskInformation += TaskInformation;//任务字典信息
|
_DicTaskInforma = taskmodel._DicTaskInformation;
|
_MainTaskDic = taskmodel.MainTaskDic;
|
GetMainIDAndMainTaskChapter();
|
MainTaaskChapterNow = mainTaaskChapter;
|
ListTask(MainTaaskChapterNow);
|
MainTaskIDNow = mainTaskID;
|
OnCreateGridLineCell(_TaskRamusList);//创建赋值
|
StartCoroutine("Delay");
|
}
|
IEnumerator Delay()
|
{
|
|
yield return null;
|
_TaskRamusList.JumpIndex(JunpIndex() - 1);
|
|
}
|
private void Start()
|
{
|
_Btn_Forward.onClick.AddListener(ForwardButton);
|
}
|
private void OnDisable()
|
{
|
StopCoroutine("Delay");
|
TaskModel.Event_TaskInformation -= TaskInformation;//任务字典信息
|
}
|
|
void OnCreateGridLineCell(ScrollerController gridCtrl)//任务预制体创建
|
{
|
gridCtrl.Refresh();
|
|
foreach (int key in chapterDic.Keys)
|
{
|
if (key <= mainTaaskChapter)
|
{
|
gridCtrl.AddCell(ScrollerDataType.Header, key);
|
if (key == MainTaaskChapterNow && _IsOpenbool)
|
{
|
for (int i = 0; i < listTask.Count; i++)
|
{
|
gridCtrl.AddCell(ScrollerDataType.Normal, listTask[i]);
|
}
|
}
|
}
|
}
|
gridCtrl.Restart();
|
|
}
|
|
void OnRefreshGridCell(ScrollerDataType type, CellView cell)
|
{
|
int taskID = cell.index;
|
if (type == ScrollerDataType.Header)
|
{
|
TaskTitleBtton taskTitleBtton = cell.GetComponent<TaskTitleBtton>();
|
if (MainTaaskChapterNow == taskID)
|
{
|
taskTitleBtton.PitchOnImage.SetActive(true);
|
}
|
else
|
{
|
taskTitleBtton.PitchOnImage.SetActive(false);
|
}
|
taskTitleBtton.TitleName.text = chapterDic[taskID];
|
taskTitleBtton.TitleBtton.RemoveAllListeners();
|
taskTitleBtton.TitleBtton.AddListener(() =>
|
{
|
if (taskID != MainTaaskChapterNow)
|
{
|
MainTaaskChapterNow = taskID;
|
ListTask(MainTaaskChapterNow);
|
_IsOpenbool = true;
|
OnCreateGridLineCell(_TaskRamusList);
|
}
|
else
|
{
|
MainTaaskChapterNow = 0;
|
_IsOpenbool = false;
|
OnCreateGridLineCell(_TaskRamusList);
|
}
|
});
|
}
|
if (type == ScrollerDataType.Normal)
|
{
|
|
MainTaskButton mainTaskButton = cell.GetComponent<MainTaskButton>();
|
TaskListConfig tasklistmodel = TaskListConfig.Get(taskID);
|
|
mainTaskButton.LightUpTheState.SetActive(false);//是否选中状态
|
if (taskID < mainTaskID)
|
{
|
mainTaskButton.Text_RamusName.text = TASKINFOConfig.Get(tasklistmodel.TaskName).show_writing;
|
mainTaskButton.Text_RamusState.gameObject.SetActive(false);
|
mainTaskButton.m_Img_Finish.SetActive(true);
|
}
|
else if (taskID == mainTaskID)
|
{
|
mainTaskButton.Text_RamusName.text = TASKINFOConfig.Get(tasklistmodel.TaskName).show_writing;
|
mainTaskButton.Text_RamusState.gameObject.SetActive(true);
|
mainTaskButton.Text_RamusState.text = GegionalTaskStatus(_MainTaskDic[taskID].MissionState);
|
mainTaskButton.m_Img_Finish.SetActive(false);
|
}
|
else if (taskID > mainTaskID)
|
{
|
mainTaskButton.Text_RamusName.text = TASKINFOConfig.Get(tasklistmodel.TaskName).show_writing;
|
mainTaskButton.Text_RamusState.gameObject.SetActive(true);
|
mainTaskButton.Text_RamusState.text = Language.Get("NotPickedUp_Z");
|
mainTaskButton.m_Img_Finish.SetActive(false);
|
}
|
if (taskID <= mainTaskID)
|
{
|
mainTaskButton.MainTaskBtn.interactable = true;
|
mainTaskButton.LightUpThe.color = new Color(1, 1, 1, 1);
|
if (taskID == MainTaskIDNow)
|
{
|
mainTaskButton.LightUpTheState.SetActive(true);
|
if (taskID == mainTaskID)
|
{
|
_Btn_Forward.gameObject.SetActive(true);
|
Information(taskID);
|
}
|
else
|
{
|
_Btn_Forward.gameObject.SetActive(false);
|
MissionsTask(taskID);
|
}
|
}
|
mainTaskButton.MainTaskBtn.RemoveAllListeners();
|
mainTaskButton.MainTaskBtn.AddListener(() =>
|
{
|
MainTaskIDNow = taskID;
|
_TaskRamusList.m_Scorller.RefreshActiveCellViews();//刷新当前可见
|
});
|
}
|
else
|
{
|
mainTaskButton.MainTaskBtn.interactable = false;
|
mainTaskButton.LightUpThe.color = new Color(1, 1, 1, 0.5f);
|
}
|
}
|
}
|
|
|
void ForwardButton()//剧情任务按钮
|
{
|
if (CrossServerUtility.IsCrossServerBoss())
|
{
|
SysNotifyMgr.Instance.ShowTip("CrossMap10");
|
return;
|
}
|
_Text_TaskTarget.ExcuteHref();
|
WindowCenter.Instance.Close<TaskWin>();
|
WindowCenter.Instance.Open<MainInterfaceWin>();
|
|
}
|
|
void Information(int taskID)
|
{
|
_Text_TaskName.text = TASKINFOConfig.Get(_MainTaskDic[taskID].Name).show_writing;//任务名
|
_Text_TaskDescribe.text = TASKINFOConfig.Get(_MainTaskDic[taskID].Desclist).show_writing;//任务描述
|
string strINfor = _MainTaskDic[taskID].InforList;
|
string str= TASKINFOConfig.Get(strINfor).show_writing;
|
//str= WordAnalysis.Color_Start_Regex.Replace(str, string.Empty);
|
//str = WordAnalysis.Color_End_Regex.Replace(str, string.Empty);
|
_Text_TaskTarget.text = str;//任务目标
|
_Text_Forward.text = TaskStatus(_MainTaskDic[taskID].MissionState);
|
if (_DicTaskInforma.ContainsKey(taskID))
|
{
|
_Text_TaskTarget.SetReplaceInfo(_DicTaskInforma[taskID]);
|
}
|
string _RewardStr = TASKINFOConfig.Get(_MainTaskDic[taskID].RewardList).show_writing;
|
RewardAnalysis.Inst.GetReward(_RewardStr, ref rewardList);
|
RewardInformationDisplay(rewardList);
|
}
|
|
void MissionsTask(int taskID)
|
{
|
TaskListConfig taskListModel = TaskListConfig.Get(taskID);
|
_Text_TaskName.text = TASKINFOConfig.Get(taskListModel.TaskName).show_writing;//任务名
|
_Text_TaskDescribe.text = TASKINFOConfig.Get(taskListModel.TaskDescribe).show_writing;//任务描述
|
var taskconfig = TASKINFOConfig.Get(taskListModel.TaskTarget);
|
if (taskconfig == null)
|
{
|
DebugEx.LogError("告诉TT任务目标没有这条数据(TASKINFO)" + taskListModel.TaskTarget);
|
return;
|
}
|
string str = TASKINFOConfig.Get(taskListModel.TaskTarget).show_writing;
|
//str = WordAnalysis.Color_Start_Regex.Replace(str, string.Empty);
|
//str = WordAnalysis.Color_End_Regex.Replace(str, string.Empty);
|
_Text_TaskTarget.text = str;//任务目标
|
string _RewardStr = TASKINFOConfig.Get(taskListModel.TaskRewards).show_writing;
|
RewardAnalysis.Inst.GetReward(_RewardStr, ref rewardList);
|
RewardInformationDisplay(rewardList);
|
}
|
|
|
string TaskStatus(int _index)//获取主线任务状态
|
{
|
switch (_index)
|
{
|
case 0:
|
return Language.Get("Z1075");
|
case 1:
|
return Language.Get("Z1074");
|
case 2:
|
return Language.Get("Z1076");
|
}
|
return string.Empty;
|
}
|
|
string GegionalTaskStatus(int _index)//任务状态
|
{
|
switch (_index)
|
{
|
case 0:
|
return Language.Get("Z1072");
|
case 1:
|
return Language.Get("Z1071");
|
case 2:
|
return Language.Get("Z1073");
|
}
|
return string.Empty;
|
}
|
void RewardInformationDisplay(List<RewardAnalysis.RewardInfo> rewardList)//奖励信息
|
{
|
if (_Grid.childCount != 0)
|
{
|
for (int i = 0; i < _Grid.childCount; i++)
|
{
|
DestroyObject(_Grid.GetChild(i).gameObject);
|
}
|
}
|
if (rewardList.Count == 0)
|
return;
|
for (int i = 0; i < rewardList.Count; i++)
|
{
|
GameObject go = GameObject.Instantiate(UILoader.LoadPrefab("ItemCell"));
|
ItemCell itemcell = go.GetComponent<ItemCell>();
|
go.transform.SetParent(_Grid);
|
go.transform.localScale = Vector3.one;
|
Vector3 pos = go.transform.localPosition;
|
go.transform.localPosition = pos.SetZ(0);
|
ItemCellModel cellModel = new ItemCellModel(rewardList[i].itemCfg.ID, true, (ulong)rewardList[i].num);
|
itemcell.Init(cellModel);
|
itemcell.button.RemoveAllListeners();
|
int tab = i;
|
itemcell.button.AddListener(() =>
|
{
|
ItemTipUtility.Show(rewardList[tab].itemCfg.ID);
|
});
|
}
|
}
|
void TaskInformation(int _Taskid, Dictionary<int, Dictionary<string, string>> _Dic)//任务字典信息
|
{
|
_DicTaskInforma = taskmodel._DicTaskInformation;
|
if (_DicTaskInforma.ContainsKey(_Taskid))
|
{
|
_Text_TaskTarget.SetReplaceInfo(_DicTaskInforma[_Taskid]);
|
}
|
}
|
List<TaskListConfig> configs = new List<TaskListConfig>();
|
void SaveChapter()//获取主线任务章节
|
{
|
if (configs.Count <= 0)
|
{
|
configs = TaskListConfig.GetValues();
|
}
|
// var configs = TaskListConfig.GetValues();
|
foreach (var value in configs)
|
{
|
if (!chapterDic.ContainsKey(value.ChapterID))
|
{
|
chapterDic.Add(value.ChapterID, value.ChapterName);
|
|
}
|
}
|
}
|
|
void GetMainIDAndMainTaskChapter()//获取正在进行的任务ID和章节数
|
{
|
|
foreach (int key in _MainTaskDic.Keys)
|
{
|
if (_MainTaskDic[key].MissionState != 0 && _MainTaskDic[key].MissionState != 3)
|
{
|
mainTaskID = key;
|
mainTaaskChapter = TaskListConfig.Get(key).ChapterID;
|
|
}
|
}
|
}
|
|
|
private void ListTask(int ChapterID)
|
{
|
listTask.Clear();
|
if (configs.Count <= 0)
|
{
|
configs = TaskListConfig.GetValues();
|
}
|
// var configs = TaskListConfig.GetValues();
|
foreach (var value in configs)
|
{
|
if (value.ChapterID == ChapterID && value.TaskID<= mainTaskID)
|
{
|
listTask.Add(value.TaskID);
|
}
|
}
|
}
|
|
private int JunpIndex()
|
{
|
int Index = 0;
|
Index += mainTaaskChapter;
|
for (int i = 0; i < listTask.Count; i++)
|
{
|
Index += 1;
|
if (listTask[i] == mainTaskID)
|
{
|
return Index;
|
|
}
|
}
|
return 0;
|
}
|
}
|
|
|
|
}
|
|
|
|
|
|
|