You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

ISkill.cs 9.4 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. using Preparation.Interface;
  2. using Preparation.Utility;
  3. namespace Preparation.Interface
  4. {
  5. public interface ISkill
  6. {
  7. }
  8. public interface IPassiveSkill : ISkill
  9. {
  10. }
  11. public interface IActiveSkill : ISkill
  12. {
  13. public int SkillCD { get; }
  14. public int DurationTime { get; } //技能持续时间
  15. public object ActiveSkillLock { get; }
  16. public bool IsBeingUsed { get; set; }
  17. }
  18. public class CanBeginToCharge : IActiveSkill
  19. {
  20. public int SkillCD => GameData.commonSkillCD * 24 / 30;
  21. public int DurationTime => GameData.commonSkillTime * 5 / 10;
  22. private readonly object commonSkillLock = new object();
  23. public object ActiveSkillLock => commonSkillLock;
  24. public bool isBeingUsed = false;
  25. public bool IsBeingUsed
  26. {
  27. get => isBeingUsed; set => isBeingUsed = value;
  28. }
  29. }
  30. public class BecomeInvisible : IActiveSkill
  31. {
  32. public int SkillCD => GameData.commonSkillCD;
  33. public int DurationTime => GameData.commonSkillTime * 6 / 10;
  34. private readonly object commonSkillLock = new object();
  35. public object ActiveSkillLock => commonSkillLock;
  36. public bool isBeingUsed = false;
  37. public bool IsBeingUsed
  38. {
  39. get => isBeingUsed; set => isBeingUsed = value;
  40. }
  41. }
  42. public class Punish : IActiveSkill
  43. {
  44. public int SkillCD => GameData.commonSkillCD;
  45. public int DurationTime => 0;
  46. private readonly object commonSkillLock = new object();
  47. public object ActiveSkillLock => commonSkillLock;
  48. public bool isBeingUsed = false;
  49. public bool IsBeingUsed
  50. {
  51. get => isBeingUsed; set => isBeingUsed = value;
  52. }
  53. }
  54. public class Rouse : IActiveSkill
  55. {
  56. public int SkillCD => GameData.commonSkillCD * 2;
  57. public int DurationTime => 0;
  58. private readonly object commonSkillLock = new object();
  59. public object ActiveSkillLock => commonSkillLock;
  60. public bool isBeingUsed = false;
  61. public bool IsBeingUsed
  62. {
  63. get => isBeingUsed; set => isBeingUsed = value;
  64. }
  65. }
  66. public class Encourage : IActiveSkill
  67. {
  68. public int SkillCD => GameData.commonSkillCD * 2;
  69. public int DurationTime => 0;
  70. private readonly object commonSkillLock = new object();
  71. public object ActiveSkillLock => commonSkillLock;
  72. public bool isBeingUsed = false;
  73. public bool IsBeingUsed
  74. {
  75. get => isBeingUsed; set => isBeingUsed = value;
  76. }
  77. }
  78. public class Inspire : IActiveSkill
  79. {
  80. public int SkillCD => GameData.commonSkillCD * 2;
  81. public int DurationTime => 0;
  82. private readonly object commonSkillLock = new object();
  83. public object ActiveSkillLock => commonSkillLock;
  84. public bool isBeingUsed = false;
  85. public bool IsBeingUsed
  86. {
  87. get => isBeingUsed; set => isBeingUsed = value;
  88. }
  89. }
  90. public class Howl : IActiveSkill
  91. {
  92. public int SkillCD => GameData.commonSkillCD * 25 / 30;
  93. public int DurationTime => 0;
  94. private readonly object commonSkillLock = new object();
  95. public object ActiveSkillLock => commonSkillLock;
  96. public bool isBeingUsed = false;
  97. public bool IsBeingUsed
  98. {
  99. get => isBeingUsed; set => isBeingUsed = value;
  100. }
  101. }
  102. public class JumpyBomb : IActiveSkill
  103. {
  104. public int SkillCD => GameData.commonSkillCD / 2;
  105. public int DurationTime => GameData.commonSkillTime * 3 / 10;
  106. private readonly object commonSkillLock = new object();
  107. public object ActiveSkillLock => commonSkillLock;
  108. public bool isBeingUsed = false;
  109. public bool IsBeingUsed
  110. {
  111. get => isBeingUsed; set => isBeingUsed = value;
  112. }
  113. }
  114. public class UseKnife : IActiveSkill
  115. {
  116. public int SkillCD => GameData.commonSkillCD * 2 / 3;
  117. public int DurationTime => GameData.commonSkillTime / 10;
  118. private readonly object commonSkillLock = new object();
  119. public object ActiveSkillLock => commonSkillLock;
  120. public bool isBeingUsed = false;
  121. public bool IsBeingUsed
  122. {
  123. get => isBeingUsed; set => isBeingUsed = value;
  124. }
  125. }
  126. public class UseRobot : IActiveSkill
  127. {
  128. public int SkillCD => GameData.frameDuration;
  129. public int DurationTime => 0;
  130. private readonly object commonSkillLock = new object();
  131. public object ActiveSkillLock => commonSkillLock;
  132. public bool isBeingUsed = false;
  133. public bool IsBeingUsed
  134. {
  135. get => isBeingUsed; set => isBeingUsed = value;
  136. }
  137. }
  138. public class WriteAnswers : IActiveSkill
  139. {
  140. public int SkillCD => GameData.commonSkillCD;
  141. public int DurationTime => 0;
  142. private readonly object commonSkillLock = new object();
  143. public object ActiveSkillLock => commonSkillLock;
  144. private int degreeOfMeditation = 0;
  145. public int DegreeOfMeditation
  146. {
  147. get => degreeOfMeditation;
  148. set
  149. {
  150. lock (commonSkillLock)
  151. {
  152. degreeOfMeditation = value;
  153. }
  154. }
  155. }
  156. public bool isBeingUsed = false;
  157. public bool IsBeingUsed
  158. {
  159. get => isBeingUsed; set => isBeingUsed = value;
  160. }
  161. }
  162. public class SummonGolem : IActiveSkill
  163. {
  164. public int SkillCD => GameData.commonSkillCD;
  165. public int DurationTime => 0;
  166. private readonly object commonSkillLock = new object();
  167. public object ActiveSkillLock => commonSkillLock;
  168. private IGolem? golemSummoned = null;
  169. public IGolem? GolemSummoned
  170. {
  171. get => golemSummoned;
  172. set
  173. {
  174. lock (commonSkillLock)
  175. {
  176. golemSummoned = value;
  177. }
  178. }
  179. }
  180. public bool isBeingUsed = false;
  181. public bool IsBeingUsed
  182. {
  183. get => isBeingUsed; set => isBeingUsed = value;
  184. }
  185. }
  186. public class NullSkill : IActiveSkill
  187. {
  188. public int SkillCD => GameData.commonSkillCD;
  189. public int DurationTime => GameData.commonSkillTime;
  190. private readonly object commonSkillLock = new object();
  191. public object ActiveSkillLock => commonSkillLock;
  192. public bool isBeingUsed = false;
  193. public bool IsBeingUsed
  194. {
  195. get => isBeingUsed; set => isBeingUsed = false;
  196. }
  197. }
  198. public static class SkillFactory
  199. {
  200. public static IActiveSkill FindIActiveSkill(ActiveSkillType activeSkillType)
  201. {
  202. switch (activeSkillType)
  203. {
  204. case ActiveSkillType.BecomeInvisible:
  205. return new BecomeInvisible();
  206. case ActiveSkillType.UseKnife:
  207. return new UseKnife();
  208. case ActiveSkillType.Howl:
  209. return new Howl();
  210. case ActiveSkillType.Encourage:
  211. return new Encourage();
  212. case ActiveSkillType.CanBeginToCharge:
  213. return new CanBeginToCharge();
  214. case ActiveSkillType.Punish:
  215. return new Punish();
  216. case ActiveSkillType.JumpyBomb:
  217. return new JumpyBomb();
  218. case ActiveSkillType.WriteAnswers:
  219. return new WriteAnswers();
  220. case ActiveSkillType.SummonGolem:
  221. return new SummonGolem();
  222. case ActiveSkillType.UseRobot:
  223. return new UseRobot();
  224. case ActiveSkillType.Rouse:
  225. return new Rouse();
  226. case ActiveSkillType.Inspire:
  227. return new Inspire();
  228. default:
  229. return new NullSkill();
  230. }
  231. }
  232. public static ActiveSkillType FindActiveSkillType(IActiveSkill ActiveSkill)
  233. {
  234. switch (ActiveSkill)
  235. {
  236. case BecomeInvisible:
  237. return ActiveSkillType.BecomeInvisible;
  238. case Howl:
  239. return ActiveSkillType.Howl;
  240. case UseKnife:
  241. return ActiveSkillType.UseKnife;
  242. case Encourage:
  243. return ActiveSkillType.Encourage;
  244. case CanBeginToCharge:
  245. return ActiveSkillType.CanBeginToCharge;
  246. case Inspire:
  247. return ActiveSkillType.Inspire;
  248. case Punish:
  249. return ActiveSkillType.Punish;
  250. case JumpyBomb:
  251. return ActiveSkillType.JumpyBomb;
  252. case WriteAnswers:
  253. return ActiveSkillType.WriteAnswers;
  254. case SummonGolem:
  255. return ActiveSkillType.SummonGolem;
  256. case UseRobot:
  257. return ActiveSkillType.UseRobot;
  258. case Rouse:
  259. return ActiveSkillType.Rouse;
  260. default:
  261. return ActiveSkillType.Null;
  262. }
  263. }
  264. }
  265. }