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