using UnityEngine; using System; using System.Linq; using System.Collections; using System.Collections.Generic; using Newtonsoft.Json.Linq; /// /// 任务卡扩展 /// public static class TaskCardExtension { /// /// 从集合中提取指定类型的任务卡. /// /// /// /// 类型:1:主线;2:日程;3:圣哲;4:商店 default(0) /// public static List GetSubTypes(this IEnumerable source, int subtype = 0) where T : TaskCardVo { return subtype == 0 ? new List() { } : source.Where(t => t.mo.type == subtype).ToList(); } } public class GameCollectTaskCard { /// /// 玩家收集的英雄数据集合 /// public Dictionary collectTaskCardDic = new Dictionary(); /// /// 初始化玩家的圈养的英雄列表 /// /// public void InitData(JObject data) { collectTaskCardDic.Clear(); foreach (JProperty ele in (data["taskcards"] as JObject).Properties()) { TaskCardVo vo = (ele.Value as JObject).ToObject(); collectTaskCardDic.Add(vo.uid, vo); } } /// /// 获得背包中所有任务卡 /// /// public List GetAllCards() { return collectTaskCardDic.Values.ToList(); } /// /// 获取已完成,未领奖的任务卡 /// /// public List GetFinishedCards() { return collectTaskCardDic.Values.Where(t => t.state == Enum_TaskCardStateType.finish).ToList(); // 已完成 } /// /// 筛选出来存在尚未执行startAction的任务卡. /// /// public List GetTaskCardVosThatStartActionUndone() { return collectTaskCardDic.Values.Where(t => { foreach (var stp in t.curSteps) { if (stp.ShouldDoStartAction()) { return true; } } return false; }).ToList(); } /// /// 筛选出来存在尚未执行finishAction的任务卡 /// /// public List GetTaskCardVosThatFinishActionUndone() { return collectTaskCardDic.Values.Where(t => { foreach (var stp in t.curSteps) { if (stp.ShouldDoFinishAction()) { return true; } } return false; }).ToList(); } /// /// 获取正在进行中的任务卡(含未领奖的) 【主线任务】/【日常任务】/【学院任务】/【悬赏任务】 /// /// public List GetActivingCards() { List list = collectTaskCardDic.Values.Where(t => t.state == Enum_TaskCardStateType.ing || t.state == Enum_TaskCardStateType.finish).ToList(); // 未完成 List mainlist = new List(); List daliylist = new List(); List collegelist = new List(); List shoplist = new List(); List allList = new List(); foreach (TaskCardVo vo in list) { if (vo.mo.type == (int)Enum_TaskCardType.Main) { mainlist.Add(vo); } else if (vo.mo.type == (int)Enum_TaskCardType.Daily) { daliylist.Add(vo); } else if(vo.mo.type == (int)Enum_TaskCardType.School) { collegelist.Add(vo); } else if (vo.mo.type == (int)Enum_TaskCardType.Shoop) { shoplist.Add(vo); } } allList.AddRange(mainlist); allList.AddRange(daliylist); allList.AddRange(collegelist); allList.AddRange(shoplist); return allList; //return collectTaskCardDic.Values.Where(t => t.state == Enum_TaskCardStateType.ing //|| t.state == Enum_TaskCardStateType.finish).ToList(); // 未完成 } }