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 10 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  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 * 2;
  21. public int DurationTime => GameData.commonSkillTime * 3 / 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 * 4 / 3;
  33. public int DurationTime => GameData.commonSkillTime;
  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 * 4;
  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 * 4;
  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 * 4;
  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 ShowTime : IActiveSkill
  103. {
  104. public int SkillCD => GameData.commonSkillCD * 3;
  105. public int DurationTime => GameData.commonSkillTime;
  106. private readonly object commonSkillLock = new();
  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 JumpyBomb : IActiveSkill
  115. {
  116. public int SkillCD => GameData.commonSkillCD / 2;
  117. public int DurationTime => GameData.commonSkillTime * 3 / 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 UseKnife : IActiveSkill
  127. {
  128. public int SkillCD => GameData.commonSkillCD;
  129. public int DurationTime => GameData.commonSkillTime / 10;
  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 UseRobot : IActiveSkill
  139. {
  140. public int SkillCD => GameData.commonSkillCD / 300;
  141. public int DurationTime => 0;
  142. private readonly object commonSkillLock = new();
  143. public object ActiveSkillLock => commonSkillLock;
  144. public bool isBeingUsed = false;
  145. public bool IsBeingUsed
  146. {
  147. get => isBeingUsed; set => isBeingUsed = value;
  148. }
  149. }
  150. public class WriteAnswers : IActiveSkill
  151. {
  152. public int SkillCD => GameData.commonSkillCD;
  153. public int DurationTime => 0;
  154. private readonly object commonSkillLock = new object();
  155. public object ActiveSkillLock => commonSkillLock;
  156. private int degreeOfMeditation = 0;
  157. public int DegreeOfMeditation
  158. {
  159. get => degreeOfMeditation;
  160. set
  161. {
  162. lock (commonSkillLock)
  163. {
  164. degreeOfMeditation = value;
  165. }
  166. }
  167. }
  168. public bool isBeingUsed = false;
  169. public bool IsBeingUsed
  170. {
  171. get => isBeingUsed; set => isBeingUsed = value;
  172. }
  173. }
  174. public class SummonGolem : IActiveSkill
  175. {
  176. public int SkillCD => GameData.commonSkillCD;
  177. public int DurationTime => 0;
  178. private readonly object commonSkillLock = new object();
  179. public object ActiveSkillLock => commonSkillLock;
  180. private IGolem? golemSummoned = null;
  181. public IGolem? GolemSummoned
  182. {
  183. get => golemSummoned;
  184. set
  185. {
  186. lock (commonSkillLock)
  187. {
  188. golemSummoned = value;
  189. }
  190. }
  191. }
  192. public bool isBeingUsed = false;
  193. public bool IsBeingUsed
  194. {
  195. get => isBeingUsed; set => isBeingUsed = value;
  196. }
  197. }
  198. public class NullSkill : IActiveSkill
  199. {
  200. public int SkillCD => GameData.commonSkillCD;
  201. public int DurationTime => GameData.commonSkillTime;
  202. private readonly object commonSkillLock = new object();
  203. public object ActiveSkillLock => commonSkillLock;
  204. public bool isBeingUsed = false;
  205. public bool IsBeingUsed
  206. {
  207. get => isBeingUsed; set => isBeingUsed = false;
  208. }
  209. }
  210. public static class SkillFactory
  211. {
  212. public static IActiveSkill FindIActiveSkill(ActiveSkillType activeSkillType)
  213. {
  214. switch (activeSkillType)
  215. {
  216. case ActiveSkillType.BecomeInvisible:
  217. return new BecomeInvisible();
  218. case ActiveSkillType.UseKnife:
  219. return new UseKnife();
  220. case ActiveSkillType.Howl:
  221. return new Howl();
  222. case ActiveSkillType.Encourage:
  223. return new Encourage();
  224. case ActiveSkillType.CanBeginToCharge:
  225. return new CanBeginToCharge();
  226. case ActiveSkillType.Punish:
  227. return new Punish();
  228. case ActiveSkillType.JumpyBomb:
  229. return new JumpyBomb();
  230. case ActiveSkillType.WriteAnswers:
  231. return new WriteAnswers();
  232. case ActiveSkillType.SummonGolem:
  233. return new SummonGolem();
  234. case ActiveSkillType.UseRobot:
  235. return new UseRobot();
  236. case ActiveSkillType.Rouse:
  237. return new Rouse();
  238. case ActiveSkillType.Inspire:
  239. return new Inspire();
  240. case ActiveSkillType.ShowTime:
  241. return new ShowTime();
  242. default:
  243. return new NullSkill();
  244. }
  245. }
  246. public static ActiveSkillType FindActiveSkillType(IActiveSkill ActiveSkill)
  247. {
  248. switch (ActiveSkill)
  249. {
  250. case BecomeInvisible:
  251. return ActiveSkillType.BecomeInvisible;
  252. case Howl:
  253. return ActiveSkillType.Howl;
  254. case UseKnife:
  255. return ActiveSkillType.UseKnife;
  256. case Encourage:
  257. return ActiveSkillType.Encourage;
  258. case CanBeginToCharge:
  259. return ActiveSkillType.CanBeginToCharge;
  260. case Inspire:
  261. return ActiveSkillType.Inspire;
  262. case Punish:
  263. return ActiveSkillType.Punish;
  264. case JumpyBomb:
  265. return ActiveSkillType.JumpyBomb;
  266. case WriteAnswers:
  267. return ActiveSkillType.WriteAnswers;
  268. case SummonGolem:
  269. return ActiveSkillType.SummonGolem;
  270. case UseRobot:
  271. return ActiveSkillType.UseRobot;
  272. case Rouse:
  273. return ActiveSkillType.Rouse;
  274. case ShowTime:
  275. return ActiveSkillType.ShowTime;
  276. default:
  277. return ActiveSkillType.Null;
  278. }
  279. }
  280. }
  281. }