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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using Preparation.Interface;
  2. using Preparation.Utility;
  3. using System;
  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 BulletAttackRange { get; }
  13. public abstract int AP { get; }
  14. public abstract int Speed { get; }
  15. public abstract bool IsToBomb { get; }
  16. public abstract int CastTime { get; }
  17. public abstract int Backswing { get; }
  18. public abstract int RecoveryFromHit { get; }
  19. private readonly bool hasSpear;
  20. /// <summary>
  21. /// 是否有矛
  22. /// </summary>
  23. public bool HasSpear => hasSpear;
  24. /// <summary>
  25. /// 与THUAI4不同的一个攻击判定方案,通过这个函数判断爆炸时能否伤害到target
  26. /// </summary>
  27. /// <param name="target">被尝试攻击者</param>
  28. /// <returns>是否可以攻击到</returns>
  29. public abstract bool CanAttack(GameObj target);
  30. protected override bool IgnoreCollideExecutor(IGameObj targetObj)
  31. {
  32. if (targetObj.Type == GameObjType.Prop || targetObj.Type == GameObjType.Bullet)
  33. return true;
  34. return false;
  35. }
  36. public Bullet(Character player, int radius) :
  37. base(player.Position, radius, PlaceType.Null, GameObjType.Bullet)
  38. {
  39. this.CanMove = true;
  40. this.moveSpeed = this.Speed;
  41. this.hasSpear = player.HasSpear;
  42. this.Parent = player;
  43. }
  44. public override bool IsRigid => true; // 默认为true
  45. public override ShapeType Shape => ShapeType.Circle; // 默认为圆形
  46. public abstract BulletType TypeOfBullet { get; }
  47. }
  48. public static class BulletFactory
  49. {
  50. public static Bullet? GetBullet(Character character)
  51. {
  52. Bullet? newBullet = null;
  53. switch (character.BulletOfPlayer)
  54. {
  55. case BulletType.AtomBomb:
  56. newBullet = new AtomBomb(character);
  57. break;
  58. case BulletType.LineBullet:
  59. newBullet = new LineBullet(character);
  60. break;
  61. case BulletType.FastBullet:
  62. newBullet = new FastBullet(character);
  63. break;
  64. case BulletType.OrdinaryBullet:
  65. newBullet = new OrdinaryBullet(character);
  66. break;
  67. default:
  68. break;
  69. }
  70. return newBullet;
  71. }
  72. public static int BulletRadius(BulletType bulletType)
  73. {
  74. switch (bulletType)
  75. {
  76. case BulletType.AtomBomb:
  77. case BulletType.LineBullet:
  78. case BulletType.FastBullet:
  79. case BulletType.OrdinaryBullet:
  80. default:
  81. return GameData.bulletRadius;
  82. }
  83. }
  84. }
  85. }