//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Wednesday, September 13, 2017
|
//--------------------------------------------------------
|
using DG.Tweening;
|
using UnityEngine;
|
using System.Collections;
|
using UnityEngine.UI;
|
|
using UnityEngine.EventSystems;
|
using System.Collections.Generic;
|
using System;
|
using Snxxz.UI;
|
|
//任务系统
|
|
namespace Snxxz.UI
|
{
|
[XLua.Hotfix]
|
public class TaskListTip : MonoBehaviour
|
{
|
public float ParentPosition = 74;
|
public float TaskScrollViewTaskScrollView = 230f;
|
public float m_SizeHeight = 72f;//单条任务的宽度
|
|
[SerializeField] TreasureCollectBriefInfoBehaviour m_HumanTreasure;//人族法宝
|
[SerializeField] Transform Content;//任务条父节点
|
[SerializeField] ScrollRect m_ScrollRect;
|
|
public int TaskId = 0;//任务ID
|
List<int> _list = new List<int>();//用来控制进行排序
|
TreasureModel model { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
|
TaskModel taskmodel { get { return ModelCenter.Instance.GetModel<TaskModel>(); } }
|
ReikiRootModel reikiRootModel { get { return ModelCenter.Instance.GetModel<ReikiRootModel>(); } }
|
|
List<int> ListSort = new List<int>();//用于排列顺序(未卡级)
|
List<int> ListSort1 = new List<int>();//用于排序(卡级)
|
|
public void Init()//初始化
|
{
|
var TaskSortType = FuncConfigConfig.Get("TaskSortType");
|
var RenzhuTaskID = FuncConfigConfig.Get("RenzhuTaskID");
|
if (ListSort.Count <= 0)
|
{
|
int[] TaskSortType1 = ConfigParse.GetMultipleStr<int>(TaskSortType.Numerical1);
|
for (int i = 0; i < TaskSortType1.Length; i++)
|
{
|
ListSort.Add(TaskSortType1[i]);
|
}
|
}
|
if (ListSort1.Count <= 0)
|
{
|
int[] TaskSortType2 = ConfigParse.GetMultipleStr<int>(TaskSortType.Numerical2);
|
for (int i = 0; i < TaskSortType2.Length; i++)
|
{
|
ListSort1.Add(TaskSortType2[i]);
|
}
|
}
|
|
TaskModel.Event_TaskToAdd += TaskToAdd;//任务的添加
|
TaskModel.Event_TaskRefreshes += TaskRefreshes;//任务的刷新
|
TaskModel.Event_TaskToDelete += OnTaskToDelete;//任务的删除
|
TaskModel.Event_TaskInformation += TaskInformation;//任务字典信息
|
TaskModel.CardLevelChange += CardLevelChangeEvent;//卡级任务状态改变
|
model.collectingTreasureChangeEvent += OnCollectingTreasureChangeEvent;
|
FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
|
TreasureNewGotWin.CloseTreasureNewGotWinEvent += CloseTreasureNewGotWinEvent;
|
PlayerDatas.Instance.playerDataRefreshEvent += Updatefighting;//数据的刷新(h0418)
|
reikiRootModel.onReikiRootPointRefresh += RefreshTaskContent;
|
TaskFeedbackFuncWin.onSelectTask += OnSelectTask;
|
OnCollectingTreasureChangeEvent(TreasureCategory.Human);
|
TaskScheduling();//任务排序
|
Selected();//任务选择
|
TheTaskToGenerate();//任务生成
|
TaskJump();
|
|
}
|
|
private void CloseTreasureNewGotWinEvent()
|
{
|
DisplayTreasure(model.collectingHuman);
|
}
|
|
private void OnCollectingTreasureChangeEvent(TreasureCategory _category)
|
{
|
DisplayTreasure(model.collectingHuman);
|
}
|
|
void DisplayTreasure(int _treasureIdHuman)
|
{
|
if (model.newGotTreasureId != TreasureModel.TREASURE_GUIDE_ID)
|
{
|
m_HumanTreasure.gameObject.SetActive(true);
|
m_HumanTreasure.Display();
|
}
|
else
|
{
|
m_HumanTreasure.gameObject.SetActive(false);
|
m_HumanTreasure.Dispose();
|
}
|
}
|
|
private void OnFuncStateChangeEvent(int obj)
|
{
|
OnCollectingTreasureChangeEvent(TreasureCategory.Human);
|
}
|
|
public void UnInit()
|
{
|
m_HumanTreasure.Dispose();
|
model.collectingTreasureChangeEvent -= OnCollectingTreasureChangeEvent;
|
TaskModel.Event_TaskRefreshes -= TaskRefreshes;//任务的刷新
|
TaskModel.Event_TaskToAdd -= TaskToAdd;//任务的添加
|
TaskModel.Event_TaskToDelete -= OnTaskToDelete;//任务的删除
|
TaskModel.Event_TaskInformation -= TaskInformation;//任务字典信息
|
FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
|
TaskModel.CardLevelChange -= CardLevelChangeEvent;//卡级任务状态改变
|
TreasureNewGotWin.CloseTreasureNewGotWinEvent -= CloseTreasureNewGotWinEvent;
|
PlayerDatas.Instance.playerDataRefreshEvent -= Updatefighting;//数据的刷新(h0418)
|
reikiRootModel.onReikiRootPointRefresh -= RefreshTaskContent;
|
TaskFeedbackFuncWin.onSelectTask -= OnSelectTask;
|
StopAllCoroutines();
|
}
|
|
private void OnSelectTask(int _taskId)
|
{
|
TaskJump(_taskId);
|
}
|
|
private void RefreshTaskContent()
|
{
|
foreach (var key in taskmodel.allMissionDict.Keys)
|
{
|
int leng = Content.childCount;
|
for (int i = 0; i < leng; i++)
|
{
|
var childObj = Content.GetChild(i).gameObject;
|
var childObjTaskType = Content.GetChild(i).gameObject.GetComponent<TaskType>();
|
if (childObj.activeSelf && childObjTaskType.TaskID == key)
|
{
|
childObj.GetComponent<FlyingShoesTask>().FlyingShoes_Task(key);
|
}
|
}
|
}
|
}
|
|
private void Updatefighting(PlayerDataType obj)//等级刷新
|
{
|
if (obj == PlayerDataType.FightPower)
|
{
|
RefreshTaskContent();
|
}
|
}
|
|
private void CardLevelChangeEvent(int taskID)//卡级状态改变
|
{
|
if (taskmodel.allMissionDict.ContainsKey(taskID) && taskmodel.allMissionDict[taskID].Type == 3)
|
{
|
TaskScheduling();
|
ChangeSort();
|
TaskJump(taskID);
|
}
|
}
|
|
private void SetLength()
|
{
|
if (_list.Count >= 12)
|
{
|
(Content as RectTransform).sizeDelta = (Content as RectTransform).sizeDelta.SetY(m_SizeHeight * 12);
|
}
|
else
|
{
|
(Content as RectTransform).sizeDelta = (Content as RectTransform).sizeDelta.SetY(m_SizeHeight * _list.Count);
|
}
|
}
|
|
void TheTaskToGenerate()//任务生成
|
{
|
int leng = Content.childCount;
|
for (int i = 0; i < leng; i++)
|
{
|
var childObj = Content.GetChild(i).gameObject;
|
var childObjTaskType = Content.GetChild(i).gameObject.GetComponent<TaskType>();
|
childObjTaskType.ClearTaskName();
|
if (childObj.activeSelf)
|
{
|
childObj.SetActive(!childObj.activeSelf);
|
}
|
}
|
SetLength();
|
for (int i = 0; i < _list.Count; i++)
|
{
|
if (i >= Content.childCount)
|
{
|
continue;
|
}
|
TaskType childObjTaskType = Content.GetChild(i).gameObject.GetComponent<TaskType>();
|
childObjTaskType.TaskID = _list[i];
|
childObjTaskType.IsGameObjectName(_list[i]);
|
childObjTaskType.IsMysteriousTask();
|
GameObject childObj = Content.GetChild(i).gameObject;
|
childObj.SetActive(true);
|
childObj.GetComponent<FlyingShoesTask>().FlyingShoes_Task(_list[i]);
|
}
|
}
|
|
void TaskToAdd(int MissionID, int MissionState, int DiscriptionIndex)//添加任务
|
{
|
if (MissionID == 2000 || MissionID == 3000 || MissionState == 3 || MissionState == 0)
|
{
|
return;
|
}
|
|
if (gameObject.activeInHierarchy)
|
{
|
StartCoroutine(WaitAddTask(MissionID, MissionState));
|
}
|
}
|
|
IEnumerator WaitAddTask(int MissionID, int MissionState)
|
{
|
yield return WaitingForSecondConst.WaitMS300;//缓冲0.3秒再进行
|
var inDungeon = IsDungeon();
|
TaskScheduling();
|
if (WindowCenter.Instance.IsOpen<MainInterfaceWin>() && !inDungeon)
|
{
|
if (MissionState != 0 && MissionID != 1 && _list.Contains(MissionID))
|
{
|
Selected();//选中逻辑
|
TaskAddAndDelete(MissionID);
|
if (NewBieCenter.Instance.inGuiding || ModelCenter.Instance.GetModel<TreasureModel>().newGotShowing)
|
{
|
yield break;
|
}
|
TaskJump(taskmodel.GetNowTaskID);
|
yield break;
|
}
|
}
|
}
|
|
private void TaskAddAndDelete(int TaskID)
|
{
|
for (int i = 0; i < Content.childCount; i++)
|
{
|
var childObj = Content.GetChild(i).gameObject;
|
var childObjTaskType = Content.GetChild(i).gameObject.GetComponent<TaskType>();
|
if (i < _list.Count)
|
{
|
if (!childObj.activeSelf)
|
{
|
childObj.SetActive(true);
|
}
|
childObjTaskType.TaskID = _list[i];
|
childObjTaskType.IsGameObjectName(_list[i]);
|
childObjTaskType.IsMysteriousTask();
|
childObj.GetComponent<FlyingShoesTask>().FlyingShoes_Task(_list[i]);
|
}
|
else
|
{
|
childObjTaskType.ClearTaskName();
|
if (childObj.activeSelf)
|
{
|
childObj.SetActive(false);
|
}
|
}
|
|
}
|
ChangeSort();//关于任务变更排序
|
SetLength();
|
}
|
|
void TaskRefreshes(int MissionID)//任务的刷新 2
|
{
|
if (MissionID == 2000 || MissionID == 3000)
|
{
|
return;
|
}
|
TaskScheduling();
|
bool _isBool = false;
|
for (int i = 0; i < _list.Count; i++)
|
{
|
if (taskmodel.SideQuestState(_list[i]) == 2)
|
{
|
_isBool = true;
|
}
|
}
|
if (_isBool)
|
{
|
TheTaskToGenerate();
|
return;
|
}
|
for (int i = 0; i < _list.Count; i++)
|
{
|
if (i <= Content.childCount - 1)
|
{
|
var childObj = Content.GetChild(i).gameObject;
|
var childObjTaskType = Content.GetChild(i).gameObject.GetComponent<TaskType>();
|
if (childObj.activeSelf && childObjTaskType.TaskID == MissionID)
|
{
|
if (childObjTaskType.m_TypeBool)
|
{
|
childObj.GetComponent<StoryMissions>().FlyingShoes_Task(MissionID);
|
}
|
else
|
{
|
childObj.GetComponent<FlyingShoesTask>().FlyingShoes_Task(MissionID);
|
}
|
}
|
}
|
|
}
|
SetLength();
|
if (NewBieCenter.Instance.inGuiding || ModelCenter.Instance.GetModel<TreasureModel>().newGotShowing)
|
{
|
return;
|
}
|
TaskJump();
|
}
|
|
void OnTaskToDelete(int _IdTask)//任务的删除
|
{
|
var inDungeon = IsDungeon();
|
TaskScheduling();
|
if (WindowCenter.Instance.IsOpen<MainInterfaceWin>() && !inDungeon)
|
{
|
DeleteSort(_IdTask);
|
}
|
TaskJump();
|
}
|
|
private void DeleteSort(int taskID)//关于任务删除
|
{
|
for (int i = 0; i < Content.childCount; i++)
|
{
|
var obj = Content.GetChild(i).gameObject;
|
var taskType = obj.GetComponent<TaskType>();
|
if (obj.activeSelf && taskType.TaskID == taskID)
|
{
|
taskType.TaskID = 0;
|
taskType.ClearTaskName();
|
obj.SetActive(false);
|
obj.transform.SetAsLastSibling();
|
return;
|
}
|
}
|
}
|
|
private void ChangeSort()//关于任务变更排序
|
{
|
for (int i = 0; i < _list.Count; i++)
|
{
|
for (int j = 0; j < Content.childCount; j++)
|
{
|
var obj = Content.GetChild(j).gameObject;
|
var taskType = obj.GetComponent<TaskType>();
|
if (taskType.TaskID != 0 && taskType.TaskID == _list[i])
|
{
|
int Inedx = _list.IndexOf(taskType.TaskID);
|
obj.transform.SetSiblingIndex(Inedx);
|
}
|
}
|
}
|
}
|
|
|
void TaskInformation(int _Taskid, Dictionary<int, Dictionary<string, string>> _Dic)//任务字典信息
|
{
|
int leng = Content.childCount;
|
for (int i = 0; i < leng; i++)
|
{
|
var childObj = Content.GetChild(i).gameObject;
|
var childObjTaskType = Content.GetChild(i).gameObject.GetComponent<TaskType>();
|
if (childObj.activeSelf && childObjTaskType.TaskID == _Taskid)
|
{
|
childObj.GetComponent<FlyingShoesTask>().FlyingShoes_Task(_Taskid);
|
}
|
}
|
}
|
void TaskScheduling()//任务排序
|
{
|
_list.Clear();
|
foreach (var key in taskmodel.allMissionDict.Keys)
|
{
|
//过滤未接任务和可完成任务
|
if (taskmodel.allMissionDict[key].MissionState != 0 && taskmodel.allMissionDict[key].MissionState != 3
|
&& taskmodel.allMissionDict[key].Type != 13 && taskmodel.allMissionDict[key].Type != 14
|
&& taskmodel.allMissionDict[key].Type != 16)
|
{
|
_list.Add(key);
|
}
|
}
|
bool IsDefault = true;
|
|
foreach (var key in taskmodel.SideQuestsDic.Keys)
|
{
|
var State = taskmodel.GetTaskStatus(key);
|
if (State == TaskModel.TaskStatus.CardLevel)
|
{
|
IsDefault = false;
|
}
|
}
|
if (IsDefault)
|
{
|
_list.Sort(Compare);//默认的排序
|
}
|
else
|
{
|
_list.Sort(Compare1);//卡级排序
|
}
|
}
|
|
int Compare(int x, int y)//默认排序(无卡级)
|
{
|
var xPack = taskmodel.allMissionDict[x];
|
var yPack = taskmodel.allMissionDict[y];
|
var IsMainTaskx = xPack.Type == 0;
|
var IsMainTasky = yPack.Type == 0;
|
if (IsMainTaskx.CompareTo(IsMainTasky) != 0)//优先主线
|
{
|
return -IsMainTaskx.CompareTo(IsMainTasky);
|
}
|
var IsStateTaskx = xPack.MissionState == 2;
|
var IsStateTasky = yPack.MissionState == 2;
|
if (IsStateTaskx.CompareTo(IsStateTasky) != 0)//优先可领取
|
{
|
return -IsStateTaskx.CompareTo(IsStateTasky);
|
}
|
|
var _index0 = ListSort.IndexOf(xPack.Type);
|
var _index1 = ListSort.IndexOf(yPack.Type);
|
if (_index0.CompareTo(_index1) != 0)
|
{
|
return _index0.CompareTo(_index1);
|
}
|
if (xPack.LV.CompareTo(yPack.LV) != 0)
|
{
|
return -xPack.LV.CompareTo(yPack.LV);
|
}
|
if (xPack.ColorLV != yPack.ColorLV)
|
{
|
return xPack.ColorLV.CompareTo(yPack.ColorLV);
|
}
|
return 1;
|
}
|
|
int Compare1(int x, int y)//排序有卡级
|
{
|
var xPack = taskmodel.allMissionDict[x];
|
var yPack = taskmodel.allMissionDict[y];
|
var IsMainTaskx = xPack.Type == 0;
|
var IsMainTasky = yPack.Type == 0;
|
if (IsMainTaskx.CompareTo(IsMainTasky) != 0)//优先主线
|
{
|
return -IsMainTaskx.CompareTo(IsMainTasky);
|
}
|
var IsStateTaskx = xPack.MissionState == 2;
|
var IsStateTasky = yPack.MissionState == 2;
|
if (IsStateTaskx.CompareTo(IsStateTasky) != 0)//优先可领取
|
{
|
return -IsStateTaskx.CompareTo(IsStateTasky);
|
}
|
var _index0 = ListSort1.IndexOf(xPack.Type);
|
var _index1 = ListSort1.IndexOf(yPack.Type);
|
if (_index0.CompareTo(_index1) != 0)
|
{
|
return _index0.CompareTo(_index1);
|
}
|
if (xPack.LV.CompareTo(yPack.LV) != 0)
|
{
|
return -xPack.LV.CompareTo(yPack.LV);
|
}
|
if (xPack.ColorLV != yPack.ColorLV)
|
{
|
return xPack.ColorLV.CompareTo(yPack.ColorLV);
|
}
|
return 1;
|
}
|
|
private bool IsDungeon()//判断是否在副本中
|
{
|
var mapId = PlayerDatas.Instance.baseData.MapID;
|
var mapConfig = MapConfig.Get(mapId);
|
return mapConfig != null && mapConfig.MapFBType != 0;
|
}
|
|
private void TaskJump(int jumpTask = 0)
|
{
|
int type = 0;
|
if (jumpTask == 0)//跳到默认选中
|
{
|
if (taskmodel.GetNowTaskID != taskmodel.TaskupToDate)//默认的和最新选中的不一致时
|
{
|
if (_list.Contains(taskmodel.TaskupToDate))
|
{
|
type = _list.IndexOf(taskmodel.TaskupToDate);
|
}
|
taskmodel.TaskupToDate = taskmodel.GetNowTaskID;
|
}
|
else
|
{
|
if (_list.Contains(taskmodel.GetNowTaskID))
|
{
|
type = _list.IndexOf(taskmodel.GetNowTaskID);
|
}
|
}
|
}
|
else
|
{
|
if (_list.Contains(jumpTask))//跳到最新添加
|
{
|
type = _list.IndexOf(jumpTask);
|
}
|
|
}
|
if (_list.Count <= 2 || type <= 0)
|
{
|
m_ScrollRect.verticalNormalizedPosition = 1;
|
}
|
else
|
{
|
float _position = 0f;
|
if (_list.Count >= 12)
|
{
|
_position = (12 - type) * m_SizeHeight + (12 - type - 1) * 2;
|
}
|
else
|
{
|
_position = (_list.Count - type) * m_SizeHeight + (_list.Count - type - 1) * 2;
|
}
|
_position -= 196;
|
m_ScrollRect.verticalNormalizedPosition = Mathf.Clamp01(_position / ((Content as RectTransform).sizeDelta.y - 196));
|
}
|
}
|
|
private void Selected()//选中逻辑修改
|
{
|
if (taskmodel.GetTaskStatus(taskmodel.GetNowTaskID) == TaskModel.TaskStatus.CardLevel)
|
{
|
bool _IsBool = false;
|
var taskList = TaskListConfig.Get(taskmodel.GetNowTaskID);
|
if (taskList != null)
|
{
|
_IsBool = true;
|
}
|
for (int i = 0; i < _list.Count; i++)
|
{
|
if (taskmodel.GetTaskStatus(_list[i]) != TaskModel.TaskStatus.CardLevel)
|
{
|
if (_IsBool)//主线卡级
|
{
|
var task_List = TaskListConfig.Get(_list[i]);
|
if (task_List == null)
|
{
|
taskmodel.GetNowTaskID = _list[i];
|
return;
|
}
|
}
|
else//非主线卡级
|
{
|
taskmodel.GetNowTaskID = _list[i];
|
return;
|
}
|
}
|
}
|
}
|
}
|
|
}
|
}
|
|
|
|