IGuideLogic.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. using System;
  2. using System.Collections.Generic;
  3. using Excel2Json;
  4. using Fort23.Core;
  5. using Fort23.UTool;
  6. using UnityEngine.Device;
  7. namespace Fort23.Mono
  8. {
  9. public delegate CTask CustomAction(UnityEngine.Object o);
  10. public abstract class IGuideLogic
  11. {
  12. // /// <summary>
  13. // /// 是否是软性引导(还需要等待一些特殊的条件才触发的引导)
  14. // /// </summary>
  15. // public virtual bool issoftGuide => false;
  16. /// <summary>
  17. /// 引导ID
  18. /// </summary>
  19. public int guideID;
  20. public int guideIdx = 0;
  21. protected List<CustomAction> actionList = new List<CustomAction>();
  22. protected int step;
  23. public UnlockConfig uLockConfig;
  24. public object ActionObject;
  25. public PlayerGuideManager pgm;
  26. // public IGuideLogic(PlayerGuideManager guideManager)
  27. // {
  28. // this.pgm = guideManager;
  29. // }
  30. /// <summary>
  31. /// 新手,引导吧...
  32. /// </summary>
  33. public virtual async CTask Guide()
  34. {
  35. }
  36. public void Redo(int idx)
  37. {
  38. actionList[idx](null);
  39. }
  40. public void ClearList()
  41. {
  42. actionList.Clear();
  43. }
  44. /// <summary>
  45. /// 是否全面屏
  46. /// </summary>
  47. /// <returns></returns>
  48. public bool IsFullScreen()
  49. {
  50. float bl = Screen.width * 1.0f / Screen.height;
  51. if (bl <= 0.5f)
  52. {
  53. return true;
  54. }
  55. return false;
  56. }
  57. /// <summary>
  58. /// 之前引导是否被中断?
  59. /// </summary>
  60. /// <param name="length">引导长度</param>
  61. /// <param name="key">当前步骤</param>
  62. /// <returns></returns>
  63. protected bool IsPhaseBreak(int length, int key)
  64. {
  65. step = GetPhaseStep(key);
  66. //new do
  67. if (step == -1)
  68. {
  69. return false;
  70. }
  71. else if (step != length - 1)
  72. {
  73. LogTool.Log("上次引导中断了: " + key + "-" + step);
  74. return true;
  75. }
  76. else
  77. {
  78. return false;
  79. }
  80. }
  81. protected bool IsPhaseDone(int length, int key)
  82. {
  83. step = GetPhaseStep(key);
  84. if (step != -1)
  85. {
  86. FinishTriggerGuide(key);
  87. return true;
  88. }
  89. return false;
  90. }
  91. protected void FinishTriggerGuide(int key)
  92. {
  93. PlayerGuideManager.Instance.ResetPlayerGuide();
  94. PlayerGuideManager.Instance.FinishATriggerGuide();
  95. LogTool.Log("已完成引导:" + key);
  96. }
  97. public int GetPhaseStep(int key)
  98. {
  99. if (AccountFileInfo.Instance.playerData.phaseKey.Contains(key))
  100. {
  101. int idx = AccountFileInfo.Instance.playerData.phaseKey.IndexOf(key);
  102. return AccountFileInfo.Instance.playerData.phaseValue[idx];
  103. }
  104. else
  105. {
  106. return -1;
  107. }
  108. }
  109. protected void SaveStep(int s)
  110. {
  111. //影子引导不记录.
  112. if (PlayerGuideManager.Instance.curPhase == 66)
  113. {
  114. return;
  115. }
  116. PlayerGuideManager.Instance.curStep = s;
  117. var phase = PlayerGuideManager.Instance.curPhase;
  118. AccountFileInfo.Instance.playerData.curPhase = phase;
  119. AccountFileInfo.Instance.playerData.curStep = s;
  120. if (!AccountFileInfo.Instance.playerData.phaseKey.Contains(phase))
  121. {
  122. AccountFileInfo.Instance.playerData.phaseKey.Add(phase);
  123. AccountFileInfo.Instance.playerData.phaseValue.Add(s);
  124. }
  125. else
  126. {
  127. var idx = AccountFileInfo.Instance.playerData.phaseKey.IndexOf(phase);
  128. if (AccountFileInfo.Instance.playerData.phaseValue[idx] < s)
  129. {
  130. AccountFileInfo.Instance.playerData.phaseValue[idx] = s;
  131. }
  132. }
  133. LogTool.Log("guide message:" + "Phase=" + phase + " Step=" + s);
  134. AccountFileInfo.Instance.SavePlayerData();
  135. }
  136. public void SavePhase(int phase, int step = -1)
  137. {
  138. AccountFileInfo.Instance.playerData.curPhase = phase;
  139. AccountFileInfo.Instance.playerData.curStep = step;
  140. if (!AccountFileInfo.Instance.playerData.phaseKey.Contains(phase))
  141. {
  142. AccountFileInfo.Instance.playerData.phaseKey.Add(phase);
  143. AccountFileInfo.Instance.playerData.phaseValue.Add(step);
  144. }
  145. else
  146. {
  147. // var idx = AccountFileInfo.Instance.playerSettingInfo.phaseKey.IndexOf(phase);
  148. // AccountFileInfo.Instance.playerSettingInfo.phaseValue[idx] = step;
  149. LogTool.Warning("已保存过该步骤:" + phase);
  150. }
  151. AccountFileInfo.Instance.SavePlayerData();
  152. }
  153. public void SaveForceDone()
  154. {
  155. AccountFileInfo.Instance.playerData.isForceDone = true;
  156. AccountFileInfo.Instance.SavePlayerData();
  157. }
  158. public void SaveTriggerDone()
  159. {
  160. AccountFileInfo.Instance.playerData.isTriggerDone = true;
  161. AccountFileInfo.Instance.SavePlayerData();
  162. }
  163. /// <summary>
  164. /// 激活
  165. /// </summary>
  166. public virtual void Active()
  167. {
  168. isSkipGuide = false;
  169. }
  170. /// <summary>
  171. /// 是否跳过本引导(一般是引导过期了)
  172. /// </summary>
  173. public bool isSkipGuide = false;
  174. /// <summary>
  175. /// 开始
  176. /// </summary>
  177. public virtual void Begin()
  178. {
  179. // if (uLockConfig.ulockCondition == 1)
  180. // {
  181. // if (PlayerManager.Instance.curGuideGroupId != uLockConfig.ulockValue)
  182. // {
  183. // isSkipGuide = true;
  184. // }
  185. // }
  186. // else if (uLockConfig.ulockCondition == 2)
  187. // {
  188. // if (PlayerManager.Instance.Level > uLockConfig.ulockValue)
  189. // {
  190. // isSkipGuide = true;
  191. // }
  192. // }
  193. //
  194. // if (!isSkipGuide)
  195. // {
  196. // if (IsPhaseDone(actionList.Count, guideID))
  197. // {
  198. // isSkipGuide = true;
  199. // }
  200. // }
  201. }
  202. /// <summary>
  203. /// 更新循环
  204. /// </summary>
  205. public virtual void LogicUpdate()
  206. {
  207. }
  208. /// <summary>
  209. /// 结束
  210. /// </summary>
  211. public virtual void End()
  212. {
  213. }
  214. /// <summary>
  215. /// 释放逻辑,关闭
  216. /// </summary>
  217. public virtual void LogicRelase()
  218. {
  219. PlayerGuideManager.Instance.guideLogic = null;
  220. }
  221. public virtual void SkipGuide()
  222. {
  223. PlayerGuideManager.Instance.CloseForceGuide();
  224. }
  225. }
  226. }