//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Wednesday, September 13, 2017
|
//--------------------------------------------------------
|
using DG.Tweening;
|
using UnityEngine;
|
using System.Collections;
|
using UnityEngine.UI;
|
using TableConfig;
|
using UnityEngine.EventSystems;
|
using System.Collections.Generic;
|
using System;
|
using Snxxz.UI;
|
|
//任务系统
|
|
namespace Snxxz.UI
|
{
|
|
public class TaskListTip : MonoBehaviour
|
{
|
public float ParentPosition = 74;
|
public float TaskScrollViewTaskScrollView = 230f;
|
public float m_SizeHeight = 72f;//单条任务的宽度
|
[SerializeField] Transform Parent;//父级
|
[SerializeField] TreasureCollectBriefInfoBehaviour m_HumanTreasure;//人族法宝
|
[SerializeField] Transform TaskScrollView;//任务条位置
|
[SerializeField] Transform Content;//任务条父节点
|
[SerializeField] ScrollRect m_ScrollRect;
|
public int TaskId = 0;//任务ID
|
List<int> _list = new List<int>();//用来控制进行排序
|
TreasureModel m_Model;
|
TreasureModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<TreasureModel>()); } }
|
PlayerTaskDatas m_TaskModel;
|
PlayerTaskDatas taskmodel { get { return m_TaskModel ?? (m_TaskModel = ModelCenter.Instance.GetModel<PlayerTaskDatas>()); } }
|
PlayerPackModel _playerPack;
|
PlayerPackModel playerPack { get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PlayerPackModel>()); } }
|
PlayerMainDate m_MainModel;
|
PlayerMainDate mainModel { get { return m_MainModel ?? (m_MainModel = ModelCenter.Instance.GetModel<PlayerMainDate>()); } }
|
List<int> ListSort = new List<int>();//用于排列顺序(未卡级)
|
List<int> ListSort1 = new List<int>();//用于排序(卡级)
|
private void Start()
|
{
|
|
|
}
|
|
void DisplayTreasure(int _treasureIdHuman)
|
{
|
if (FuncOpen.Instance.IsFuncOpen(106) && model.newGotTreasureId != TreasureModel.TREASURE_GUIDE_ID)
|
{
|
m_HumanTreasure.gameObject.SetActive(true);
|
m_HumanTreasure.Display();
|
}
|
else
|
{
|
m_HumanTreasure.gameObject.SetActive(false);
|
m_HumanTreasure.Dispose();
|
}
|
}
|
|
void UpdateControllerPosition()//更新控件位置
|
{
|
if (m_HumanTreasure.gameObject.activeSelf)
|
{
|
(Parent as RectTransform).sizeDelta = (Parent as RectTransform).sizeDelta.SetY(ParentPosition);
|
(TaskScrollView as RectTransform).sizeDelta = (TaskScrollView as RectTransform).sizeDelta.SetY(TaskScrollViewTaskScrollView - ParentPosition);
|
}
|
else
|
{
|
(Parent as RectTransform).sizeDelta = (Parent as RectTransform).sizeDelta.SetY(0);
|
(TaskScrollView as RectTransform).sizeDelta = (TaskScrollView as RectTransform).sizeDelta.SetY(TaskScrollViewTaskScrollView);
|
}
|
}
|
|
public void Init()//初始化
|
{
|
|
var TaskSortType = Config.Instance.Get<FuncConfigConfig>("TaskSortType");
|
var RenzhuTaskID = Config.Instance.Get<FuncConfigConfig>("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]);
|
}
|
}
|
PlayerTaskDatas.Event_TaskToAdd += TaskToAdd;//任务的添加
|
PlayerTaskDatas.Event_TaskRefreshes += TaskRefreshes;//任务的刷新
|
PlayerTaskDatas.Event_TaskToDelete += OnTaskToDelete;//任务的删除
|
PlayerTaskDatas.Event_TaskInformation += TaskInformation;//任务字典信息
|
PlayerTaskDatas.MainCardLevelChange += MainCardLevelChange;//卡级任务修改
|
model.collectingTreasureChangeEvent += OnCollectingTreasureChangeEvent;
|
FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
|
TreasureNewGotWin.CloseTreasureNewGotWinEvent += CloseTreasureNewGotWinEvent;
|
PlayerDatas.Instance.PlayerDataRefreshInfoEvent += Updatefighting;//数据的刷新(h0418)
|
OnCollectingTreasureChangeEvent(TreasureCategory.Human);
|
TaskScheduling();//任务排序 1
|
TheTaskToGenerate();//任务生成
|
TaskJump();
|
|
}
|
|
private void CloseTreasureNewGotWinEvent()
|
{
|
DisplayTreasure(model.collectingHuman);
|
UpdateControllerPosition();
|
}
|
|
private void OnFuncStateChangeEvent(int obj)
|
{
|
OnCollectingTreasureChangeEvent(TreasureCategory.Human);
|
}
|
|
public void UnInit()
|
{
|
m_HumanTreasure.Dispose();
|
model.collectingTreasureChangeEvent -= OnCollectingTreasureChangeEvent;
|
PlayerTaskDatas.Event_TaskRefreshes -= TaskRefreshes;//任务的刷新
|
PlayerTaskDatas.Event_TaskToAdd -= TaskToAdd;//任务的添加
|
PlayerTaskDatas.Event_TaskToDelete -= OnTaskToDelete;//任务的删除
|
PlayerTaskDatas.Event_TaskInformation -= TaskInformation;//任务字典信息
|
FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
|
TreasureNewGotWin.CloseTreasureNewGotWinEvent -= CloseTreasureNewGotWinEvent;
|
PlayerTaskDatas.MainCardLevelChange -= MainCardLevelChange;//卡级任务修改
|
PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= Updatefighting;//数据的刷新(h0418)
|
}
|
|
private void Updatefighting(PlayerDataRefresh obj)//等级刷新
|
{
|
|
}
|
private void TaskIdUpdate(int taskId)
|
{
|
int leng = Content.childCount;
|
for (int i = 0; i < leng; i++)
|
{
|
GameObject childObj = Content.GetChild(i).gameObject;
|
TaskType childObjTaskType = Content.GetChild(i).gameObject.GetComponent<TaskType>();
|
if (childObj.activeSelf && childObjTaskType.TaskID == taskId)
|
{
|
childObj.GetComponent<FlyingShoesTask>().FlyingShoes_Task(taskId);
|
}
|
}
|
}
|
|
private void MainCardLevelChange(int _id)
|
{
|
TaskScheduling();
|
TheTaskToGenerate();
|
TaskJump(_id);
|
}
|
|
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++)
|
{
|
GameObject childObj = Content.GetChild(i).gameObject;
|
TaskType 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)//添加任务
|
{
|
TaskScheduling();
|
var inDungeon = IsDungeon();
|
if (WindowCenter.Instance.CheckOpen<MainInterfaceWin>() && !inDungeon)
|
{
|
TaskAddAndDelete();
|
}
|
TaskJump(MissionID);
|
}
|
|
void LodingDelTask(int TaskID)
|
{
|
int LengChild = Content.childCount;
|
for (int i = 0; i < LengChild; i++)
|
{
|
TaskType taskType = Content.GetChild(i).GetComponent<TaskType>();
|
FlyingShoesTask flyingShoesTask = Content.GetChild(i).GetComponent<FlyingShoesTask>();
|
if (taskType.TaskID == TaskID && taskType.gameObject.activeSelf)
|
{
|
taskType.gameObject.SetActive(false);
|
if (TaskID != taskmodel.GetNowTaskID && flyingShoesTask.ImgSelected.activeSelf)
|
{
|
flyingShoesTask.ImgSelected.SetActive(false);
|
}
|
flyingShoesTask.UIEffect.Play();
|
}
|
}
|
SetLength();
|
}
|
private void TaskAddAndDelete()
|
{
|
for (int i = 0; i < Content.childCount; i++)
|
{
|
GameObject childObj = Content.GetChild(i).gameObject;
|
TaskType 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);
|
}
|
}
|
|
}
|
SetLength();
|
}
|
|
void TaskRefreshes(int MissionID)//任务的刷新 2
|
{
|
TaskScheduling();
|
for (int i = 0; i < _list.Count; i++)
|
{
|
if (i <= Content.childCount-1)
|
{
|
GameObject childObj = Content.GetChild(i).gameObject;
|
TaskType 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();
|
TaskJump();
|
}
|
|
void OnTaskToDelete(int _IdTask)//任务的删除
|
{
|
var inDungeon = IsDungeon();
|
TaskScheduling();
|
if (WindowCenter.Instance.CheckOpen<MainInterfaceWin>() && !inDungeon)
|
{
|
DeleteSort(_IdTask);
|
}
|
|
}
|
|
private void DeleteSort(int taskID)//关于任务删除
|
{
|
for (int i = 0; i < Content.childCount; i++)
|
{
|
GameObject obj = Content.GetChild(i).gameObject;
|
TaskType taskType = obj.GetComponent<TaskType>();
|
if (obj.activeSelf && taskType.TaskID == taskID)
|
{
|
taskType.TaskID = 0;
|
taskType.ClearTaskName();
|
obj.SetActive(false);
|
obj.transform.SetAsLastSibling();
|
}
|
}
|
}
|
|
void TaskInformation(int _Taskid, Dictionary<int, Dictionary<string, string>> _Dic)//任务字典信息
|
{
|
int leng = Content.childCount;
|
for (int i = 0; i < leng; i++)
|
{
|
GameObject childObj = Content.GetChild(i).gameObject;
|
TaskType 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.MainTaskDic.Keys)
|
{
|
var State = taskmodel.GetTaskStatus(key);
|
if (State == PlayerTaskDatas.TaskStatus.CardLevel)
|
{
|
IsDefault = false;
|
}
|
}
|
if (IsDefault)
|
{
|
_list.Sort(Compare);//默认的排序
|
}
|
else
|
{
|
_list.Sort(Compare1);//卡级排序
|
}
|
}
|
int Compare(int x, int y)//默认排序(无卡级)
|
{
|
MissionDetailDates xPack = taskmodel.allMissionDict[x];
|
MissionDetailDates yPack = taskmodel.allMissionDict[y];
|
var _index0 = ListSort.IndexOf(xPack.Type);
|
var _index1 = ListSort.IndexOf(yPack.Type);
|
if (_index0.CompareTo(_index1) != 0)
|
{
|
return _index0.CompareTo(_index1);
|
}
|
return 1;
|
}
|
|
int Compare1(int x, int y)//排序有卡级
|
{
|
MissionDetailDates xPack = taskmodel.allMissionDict[x];
|
MissionDetailDates yPack = taskmodel.allMissionDict[y];
|
var _index0 = ListSort1.IndexOf(xPack.Type);
|
var _index1 = ListSort1.IndexOf(yPack.Type);
|
if (_index0.CompareTo(_index1) != 0)
|
{
|
return _index0.CompareTo(_index1);
|
}
|
return 1;
|
}
|
|
private void OnCollectingTreasureChangeEvent(TreasureCategory _category)
|
{
|
DisplayTreasure(model.collectingHuman);
|
UpdateControllerPosition();
|
}
|
|
private bool IsDungeon()//判断是否在副本中
|
{
|
var mapId = PlayerDatas.Instance.baseData.MapID;
|
var mapConfig = Config.Instance.Get<MapConfig>(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
|
{
|
var _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));
|
}
|
}
|
}
|
}
|
|
|
|