GameCollectTaskCard.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. using UnityEngine;
  2. using System;
  3. using System.Linq;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using Newtonsoft.Json.Linq;
  7. /// <summary>
  8. /// 任务卡扩展
  9. /// </summary>
  10. public static class TaskCardExtension
  11. {
  12. /// <summary>
  13. /// 从集合中提取指定类型的任务卡.
  14. /// </summary>
  15. /// <typeparam name="T"></typeparam>
  16. /// <param name="source"></param>
  17. /// <param name="subtype">类型:1:主线;2:日程;3:圣哲;4:商店 default(0)</param>
  18. /// <returns></returns>
  19. public static List<T> GetSubTypes<T>(this IEnumerable<T> source, int subtype = 0) where T : TaskCardVo
  20. {
  21. return subtype == 0 ? new List<T>() { } : source.Where(t => t.mo.type == subtype).ToList();
  22. }
  23. }
  24. public class GameCollectTaskCard
  25. {
  26. /// <summary>
  27. /// 玩家收集的英雄数据集合
  28. /// </summary>
  29. public Dictionary<string, TaskCardVo> collectTaskCardDic = new Dictionary<string, TaskCardVo>();
  30. /// <summary>
  31. /// 初始化玩家的圈养的英雄列表
  32. /// </summary>
  33. /// <param name="data"></param>
  34. public void InitData(JObject data)
  35. {
  36. collectTaskCardDic.Clear();
  37. foreach (JProperty ele in (data["taskcards"] as JObject).Properties())
  38. {
  39. TaskCardVo vo = (ele.Value as JObject).ToObject<TaskCardVo>();
  40. collectTaskCardDic.Add(vo.uid, vo);
  41. }
  42. }
  43. /// <summary>
  44. /// 获得背包中所有任务卡
  45. /// </summary>
  46. /// <returns></returns>
  47. public List<TaskCardVo> GetAllCards()
  48. {
  49. return collectTaskCardDic.Values.ToList();
  50. }
  51. /// <summary>
  52. /// 获取已完成,未领奖的任务卡
  53. /// </summary>
  54. /// <returns></returns>
  55. public List<TaskCardVo> GetFinishedCards()
  56. {
  57. return collectTaskCardDic.Values.Where(t => t.state == Enum_TaskCardStateType.finish).ToList(); // 已完成
  58. }
  59. /// <summary>
  60. /// 筛选出来存在尚未执行startAction的任务卡.
  61. /// </summary>
  62. /// <returns></returns>
  63. public List<TaskCardVo> GetTaskCardVosThatStartActionUndone()
  64. {
  65. return collectTaskCardDic.Values.Where(t =>
  66. {
  67. foreach (var stp in t.curSteps)
  68. {
  69. if (stp.ShouldDoStartAction())
  70. {
  71. return true;
  72. }
  73. }
  74. return false;
  75. }).ToList();
  76. }
  77. /// <summary>
  78. /// 筛选出来存在尚未执行finishAction的任务卡
  79. /// </summary>
  80. /// <returns></returns>
  81. public List<TaskCardVo> GetTaskCardVosThatFinishActionUndone()
  82. {
  83. return collectTaskCardDic.Values.Where(t =>
  84. {
  85. foreach (var stp in t.curSteps)
  86. {
  87. if (stp.ShouldDoFinishAction())
  88. {
  89. return true;
  90. }
  91. }
  92. return false;
  93. }).ToList();
  94. }
  95. /// <summary>
  96. /// 获取正在进行中的任务卡(含未领奖的) 【主线任务】/【日常任务】/【学院任务】/【悬赏任务】
  97. /// </summary>
  98. /// <returns></returns>
  99. public List<TaskCardVo> GetActivingCards()
  100. {
  101. List<TaskCardVo> list = collectTaskCardDic.Values.Where(t => t.state == Enum_TaskCardStateType.ing
  102. || t.state == Enum_TaskCardStateType.finish).ToList(); // 未完成
  103. List<TaskCardVo> mainlist = new List<TaskCardVo>();
  104. List<TaskCardVo> daliylist = new List<TaskCardVo>();
  105. List<TaskCardVo> collegelist = new List<TaskCardVo>();
  106. List<TaskCardVo> shoplist = new List<TaskCardVo>();
  107. List<TaskCardVo> allList = new List<TaskCardVo>();
  108. foreach (TaskCardVo vo in list)
  109. {
  110. if (vo.mo.type == (int)Enum_TaskCardType.Main)
  111. {
  112. mainlist.Add(vo);
  113. }
  114. else if (vo.mo.type == (int)Enum_TaskCardType.Daily)
  115. {
  116. daliylist.Add(vo);
  117. }
  118. else if(vo.mo.type == (int)Enum_TaskCardType.School)
  119. {
  120. collegelist.Add(vo);
  121. }
  122. else if (vo.mo.type == (int)Enum_TaskCardType.Shoop)
  123. {
  124. shoplist.Add(vo);
  125. }
  126. }
  127. allList.AddRange(mainlist);
  128. allList.AddRange(daliylist);
  129. allList.AddRange(collegelist);
  130. allList.AddRange(shoplist);
  131. return allList;
  132. //return collectTaskCardDic.Values.Where(t => t.state == Enum_TaskCardStateType.ing
  133. //|| t.state == Enum_TaskCardStateType.finish).ToList(); // 未完成
  134. }
  135. }