//-------------------------------------------------------- // [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 vnxbqy.UI; //任务系统 namespace vnxbqy.UI { 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 _list = new List();//用来控制进行排序 TreasureModel model { get { return ModelCenter.Instance.GetModel(); } } TaskModel taskmodel { get { return ModelCenter.Instance.GetModel(); } } ReikiRootModel reikiRootModel { get { return ModelCenter.Instance.GetModel(); } } List ListSort = new List();//用于排列顺序(未卡级) List ListSort1 = new List();//用于排序(卡级) public void Init()//初始化 { var TaskSortType = FuncConfigConfig.Get("TaskSortType"); var RenzhuTaskID = FuncConfigConfig.Get("RenzhuTaskID"); if (ListSort.Count <= 0) { int[] TaskSortType1 = ConfigParse.GetMultipleStr(TaskSortType.Numerical1); for (int i = 0; i < TaskSortType1.Length; i++) { ListSort.Add(TaskSortType1[i]); } } if (ListSort1.Count <= 0) { int[] TaskSortType2 = ConfigParse.GetMultipleStr(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; taskmodel.OnJumpTask += Taskmodel_OnJumpTask; OnCollectingTreasureChangeEvent(TreasureCategory.Human); TaskScheduling();//任务排序 Selected();//任务选择 TheTaskToGenerate();//任务生成 TaskJump(); } private void Taskmodel_OnJumpTask() { if (taskmodel.jumpTaskID == 0) { m_ScrollRect.verticalNormalizedPosition = 1; } else { TaskJump(taskmodel.jumpTaskID); } } 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.SetActive(true); m_HumanTreasure.Display(); } else { m_HumanTreasure.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(); if (childObj.activeSelf && childObjTaskType.TaskID == key) { childObj.GetComponent().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(); 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(); childObjTaskType.TaskID = _list[i]; childObjTaskType.IsGameObjectName(_list[i]); childObjTaskType.IsMysteriousTask(); GameObject childObj = Content.GetChild(i).gameObject; childObj.SetActive(true); childObj.GetComponent().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() && !inDungeon) { if (MissionState != 0 && MissionID != 1 && _list.Contains(MissionID)) { Selected();//选中逻辑 TaskAddAndDelete(MissionID); if (NewBieCenter.Instance.inGuiding || ModelCenter.Instance.GetModel().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(); if (i < _list.Count) { if (!childObj.activeSelf) { childObj.SetActive(true); } childObjTaskType.TaskID = _list[i]; childObjTaskType.IsGameObjectName(_list[i]); childObjTaskType.IsMysteriousTask(); childObj.GetComponent().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(); if (childObj.activeSelf && childObjTaskType.TaskID == MissionID) { if (childObjTaskType.m_TypeBool) { childObj.GetComponent().FlyingShoes_Task(MissionID); } else { childObj.GetComponent().FlyingShoes_Task(MissionID); } } } } SetLength(); if (NewBieCenter.Instance.inGuiding || ModelCenter.Instance.GetModel().newGotShowing) { return; } TaskJump(); } void OnTaskToDelete(int _IdTask)//任务的删除 { var inDungeon = IsDungeon(); TaskScheduling(); if (WindowCenter.Instance.IsOpen() && !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(); 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(); if (taskType.TaskID != 0 && taskType.TaskID == _list[i]) { int Inedx = _list.IndexOf(taskType.TaskID); obj.transform.SetSiblingIndex(Inedx); } } } } void TaskInformation(int _Taskid, Dictionary> _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(); if (childObj.activeSelf && childObjTaskType.TaskID == _Taskid) { childObj.GetComponent().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()//判断是否在副本中, boss之家暂时视为同非副本 { var mapId = PlayerDatas.Instance.baseData.MapID; var mapConfig = MapConfig.Get(mapId); return mapConfig != null && mapConfig.MapFBType != 0 && mapId != 31020; } 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; } } } } } } }