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.

Skill.cs 7.9 kB

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