//-------------------------------------------------------- // [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 _list = new List();//用来控制进行排序 TreasureModel m_Model; TreasureModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } PlayerTaskDatas m_TaskModel; PlayerTaskDatas taskmodel { get { return m_TaskModel ?? (m_TaskModel = ModelCenter.Instance.GetModel()); } } PlayerPackModel _playerPack; PlayerPackModel playerPack { get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel()); } } PlayerMainDate m_MainModel; PlayerMainDate mainModel { get { return m_MainModel ?? (m_MainModel = ModelCenter.Instance.GetModel()); } } List RenzhuTaskIDList = new List();//法宝任务数组ID List ListSort = new List();//用于排列顺序(未卡级) List ListSort1 = new List();//用于排序(卡级) 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("TaskSortType"); var RenzhuTaskID = Config.Instance.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]); } } if (RenzhuTaskIDList.Count <= 0) { int[] RenzhuTaskID1 = ConfigParse.GetMultipleStr(RenzhuTaskID.Numerical1); for (int i = 0; i < RenzhuTaskID1.Length; i++) { RenzhuTaskIDList.Add(RenzhuTaskID1[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; playerPack.RefreshItemCountAct += RefreshItemCountAct; playerPack.ItemCntReduceAct += ItemCntReduceAct; 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;//卡级任务修改 playerPack.RefreshItemCountAct -= RefreshItemCountAct; playerPack.ItemCntReduceAct -= ItemCntReduceAct; } private void ItemCntReduceAct(PackType arg1, int arg2, int arg3) { if (arg1 == PackType.rptItem && arg3== mainModel.ItemID) { foreach (var key in taskmodel.SideQuestsDic.Keys) { if (mainModel.TaskId_Skill1.Contains(key)) { TaskIdUpdate(key); } } } } private void RefreshItemCountAct(PackType arg1, int arg2, int arg3) { if (arg1 == PackType.rptItem && arg3 == mainModel.ItemID) { foreach (var key in taskmodel.SideQuestsDic.Keys) { if (mainModel.TaskId_Skill1.Contains(key)) { TaskIdUpdate(key); } } } } 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(); if (childObj.activeSelf && childObjTaskType.TaskID == taskId) { childObj.GetComponent().FlyingShoes_Task(taskId); } } } private void MainCardLevelChange(int _id) { TaskScheduling(); bool IsDefault = true; var State = taskmodel.GetTaskStatus(_id); if (State == PlayerTaskDatas.TaskStatus.CardLevel || (State == PlayerTaskDatas.TaskStatus.TreasureCardLevel && !RenzhuTaskIDList.Contains(_id))) { IsDefault = false; } if (IsDefault) { foreach (var key in taskmodel.MainTaskDic.Keys) { if (taskmodel.MainTaskDic[key].MissionState != 3) { taskmodel.GetNowTaskID = key; } } } else { if (_list.Count > 0) { taskmodel.GetNowTaskID = _list[0]; } } TheTaskToGenerate(); } 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; 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)//添加任务 { TaskScheduling(); var inDungeon = IsDungeon(); if (WindowCenter.Instance.CheckOpen() && !inDungeon) { TaskAddAndDelete(); } TaskJump(); } void LodingDelTask(int TaskID) { int LengChild = Content.childCount; for (int i = 0; i < LengChild; i++) { TaskType taskType = Content.GetChild(i).GetComponent(); FlyingShoesTask flyingShoesTask = Content.GetChild(i).GetComponent(); 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(); 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 { if (childObj.activeSelf) { childObj.SetActive(false); } } childObj.GetComponent().ImgSelected.SetActive(false); } SetLength(); } void TaskRefreshes(int MissionID)//任务的刷新 2 { TaskScheduling(); for (int i = 0; i < _list.Count; i++) { GameObject childObj = Content.GetChild(i).gameObject; TaskType 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(); TaskJump(); } void OnTaskToDelete(int _IdTask)//任务的删除 { var inDungeon = IsDungeon(); if (WindowCenter.Instance.CheckOpen() && !inDungeon) { LodingDelTask(_IdTask); } TaskScheduling(); } void TaskInformation(int _Taskid, Dictionary> _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(); 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.MainTaskDic.Keys) { var State = taskmodel.GetTaskStatus(key); if (State == PlayerTaskDatas.TaskStatus.CardLevel || (State == PlayerTaskDatas.TaskStatus.TreasureCardLevel && !RenzhuTaskIDList.Contains(key))) { 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(mapId); return mapConfig != null && mapConfig.MapFBType != 0; } private void TaskJump() { int type = _list.IndexOf(taskmodel.GetNowTaskID); 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)); } } } }