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.

Bullet.cs 4.4 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using Preparation.Interface;
  2. using Preparation.Utility;
  3. using System.Threading;
  4. namespace GameClass.GameObj
  5. {
  6. public abstract class Bullet : ObjOfCharacter
  7. {
  8. /// <summary>
  9. /// //攻击力
  10. /// </summary>
  11. public abstract double BulletBombRange { get; }
  12. public abstract double AttackDistance { get; }
  13. public AtomicInt AP { get; }
  14. public abstract int Speed { get; }
  15. public abstract bool IsRemoteAttack { get; }
  16. public abstract int CastTime { get; }
  17. public abstract int Backswing { get; }
  18. public abstract int RecoveryFromHit { get; }
  19. public abstract int CD { get; }
  20. public abstract int MaxBulletNum { get; }
  21. private readonly bool hasSpear;
  22. /// <summary>
  23. /// 是否有矛
  24. /// </summary>
  25. public bool HasSpear => hasSpear;
  26. /// <summary>
  27. /// </summary>
  28. /// <param name="target">被尝试攻击者</param>
  29. /// <returns>是否可以攻击到</returns>
  30. public abstract bool CanAttack(GameObj target);
  31. public abstract bool CanBeBombed(GameObjType gameObjType);
  32. public override bool IgnoreCollideExecutor(IGameObj targetObj)
  33. {
  34. if (targetObj == Parent) return true;
  35. if (targetObj.Type == GameObjType.Gadget || targetObj.Type == GameObjType.Bullet)
  36. return true;
  37. return false;
  38. }
  39. public Bullet(Character player, int radius, XY Position) :
  40. base(Position, radius, GameObjType.Bullet)
  41. {
  42. this.CanMove.Set(true);
  43. this.MoveSpeed.Set(this.Speed);
  44. this.hasSpear = player.TryUseSpear();
  45. this.Parent = player;
  46. }
  47. public override bool IsRigid => true; // 默认为true
  48. public override ShapeType Shape => ShapeType.Circle; // 默认为圆形
  49. public abstract BulletType TypeOfBullet { get; }
  50. }
  51. public static class BulletFactory
  52. {
  53. public static Bullet? GetBullet(Character character, XY pos, BulletType bulletType)
  54. {
  55. switch (bulletType)
  56. {
  57. case BulletType.FlyingKnife:
  58. return new FlyingKnife(character, pos);
  59. case BulletType.CommonAttackOfGhost:
  60. return new CommonAttackOfGhost(character, pos);
  61. case BulletType.JumpyDumpty:
  62. return new JumpyDumpty(character, pos);
  63. case BulletType.BombBomb:
  64. return new BombBomb(character, pos);
  65. case BulletType.Strike:
  66. return new Strike(character, pos);
  67. default:
  68. return null;
  69. }
  70. }
  71. public static int BulletRadius(BulletType bulletType)
  72. {
  73. switch (bulletType)
  74. {
  75. case BulletType.FlyingKnife:
  76. default:
  77. return GameData.bulletRadius;
  78. }
  79. }
  80. public static int BulletCD(BulletType bulletType)
  81. {
  82. switch (bulletType)
  83. {
  84. case BulletType.CommonAttackOfGhost:
  85. return CommonAttackOfGhost.cd;
  86. case BulletType.FlyingKnife:
  87. return FlyingKnife.cd;
  88. case BulletType.BombBomb:
  89. return BombBomb.cd;
  90. case BulletType.JumpyDumpty:
  91. return JumpyDumpty.cd;
  92. case BulletType.Strike:
  93. return Strike.cd;
  94. default:
  95. return GameData.basicCD;
  96. }
  97. }
  98. public static int BulletNum(BulletType bulletType)
  99. {
  100. switch (bulletType)
  101. {
  102. case BulletType.CommonAttackOfGhost:
  103. return CommonAttackOfGhost.maxBulletNum;
  104. case BulletType.FlyingKnife:
  105. return FlyingKnife.maxBulletNum;
  106. case BulletType.BombBomb:
  107. return BombBomb.maxBulletNum;
  108. case BulletType.JumpyDumpty:
  109. return JumpyDumpty.maxBulletNum;
  110. case BulletType.Strike:
  111. return Strike.maxBulletNum;
  112. default:
  113. return 0;
  114. }
  115. }
  116. }
  117. }