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.1 kB

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