BulletPolicyFinder.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. using System;
  2. using System.Collections.Generic;
  3. namespace YLBattle
  4. {
  5. /// <summary>
  6. /// 子弹策略辅助类
  7. /// </summary>
  8. public class BulletPolicyFinder
  9. {
  10. /// <summary>
  11. /// 单键实例
  12. /// </summary>
  13. private static BulletPolicyFinder _Instance = null;
  14. /// <summary>
  15. /// 瞄准策略
  16. /// </summary>
  17. private Dictionary<EBulletAIMType, BulletAIMFoundation> mAIMPolicy = new Dictionary<EBulletAIMType, BulletAIMFoundation>();
  18. /// <summary>
  19. /// 伤害计算
  20. /// </summary>
  21. private Dictionary<EBulletDamageType, BulletDamageFoundation> mDamagePolicy = new Dictionary<EBulletDamageType, BulletDamageFoundation>();
  22. /// <summary>
  23. /// 弹道模拟策略
  24. /// </summary>
  25. private Dictionary<EBulletTrajectoryType, BulletTrajectFoundation> mTrajectPolicy = new Dictionary<EBulletTrajectoryType, BulletTrajectFoundation>();
  26. /// <summary>
  27. /// 单键实例
  28. /// </summary>
  29. /// <returns>单键</returns>
  30. public static BulletPolicyFinder Instance()
  31. {
  32. if (null == _Instance)
  33. {
  34. _Instance = new BulletPolicyFinder();
  35. }
  36. return _Instance;
  37. }
  38. /// <summary>
  39. /// 构造函数
  40. /// </summary>
  41. protected BulletPolicyFinder()
  42. {
  43. this.mAIMPolicy.Clear();
  44. this.mTrajectPolicy.Clear();
  45. this.mDamagePolicy.Clear();
  46. this.InitializeAIMPolicy();
  47. this.InitializeBulletTraject();
  48. this.InitialzieDamage();
  49. }
  50. /// <summary>
  51. /// 查询弹道策略
  52. /// </summary>
  53. /// <param name="type">查询弹道类型</param>
  54. /// <returns>弹道策略</returns>
  55. public BulletTrajectFoundation BulletTrajectFoundation(EBulletTrajectoryType type)
  56. {
  57. if (this.mTrajectPolicy.ContainsKey(type))
  58. {
  59. return this.mTrajectPolicy[type];
  60. }
  61. return null;
  62. }
  63. /// <summary>
  64. /// 查询AIM
  65. /// </summary>
  66. /// <param name="type">查询类型</param>
  67. /// <returns>AIM瞄准策略</returns>
  68. public BulletAIMFoundation AIMFoundation(EBulletAIMType type)
  69. {
  70. if (this.mAIMPolicy.ContainsKey(type))
  71. {
  72. return (BulletAIMFoundation)this.mAIMPolicy[type].Clone();
  73. }
  74. return null;
  75. }
  76. /// <summary>
  77. /// 查找伤害策略
  78. /// </summary>
  79. /// <param name="type">查询伤害类型</param>
  80. /// <returns>伤害策略</returns>
  81. public BulletDamageFoundation BulletDamage(EBulletDamageType type)
  82. {
  83. if (this.mDamagePolicy.ContainsKey(type))
  84. {
  85. return this.mDamagePolicy[type];
  86. }
  87. return null;
  88. }
  89. /// <summary>
  90. /// 初始化瞄准目标选择
  91. /// </summary>
  92. public void InitializeAIMPolicy()
  93. {
  94. this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_SELF, new BulletAIMSelf());
  95. this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_CENTERTARGET, new BulletAIMLockedTarget());
  96. this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_TARGET, new BulletAIMTarget());
  97. this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_SELFAROUND, new BulletAIMSelfGround());
  98. this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_TARGETAROUND, new BulletAIMTargetAround());
  99. this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_ALLFRIENDS, new BulletAIMAllFriends());
  100. this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_ALLENEMIES, new BulletAIMAllEnemies());
  101. this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_ABOVEHPENEMY, new BulletAboveHpEnemy());
  102. this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_UNDERHPENEMY, new BulletUnderHpEnemy());
  103. this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_UNDERHPFRIEND, new BulletUnderHpFriend());
  104. this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_LEASTHPMOREFRIEND, new BulletAIMLastHpMoreFriend());
  105. this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_LEASTHPMOREENEMY, new BulletAIMLastHpMoreEnemy());
  106. this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_RONDOMMOREENEMY, new BulletAIMRondomMoreEnemy());
  107. this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_HIGHATTACKMOREENEMY, new BulletAIMHighAttackMoreEnemy());
  108. this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_LEASTHPFRIENDEXPME, new BulletAIMLastHpFriendExpSelf());
  109. }
  110. /// <summary>
  111. /// 初始化伤害策略
  112. /// </summary>
  113. public void InitialzieDamage()
  114. {
  115. this.mDamagePolicy.Add(EBulletDamageType.EBULLET_DAMAGE_BUFF, new BulletDamageBuff());
  116. this.mDamagePolicy.Add(EBulletDamageType.EBULLET_DAMAGE_SHAKE, new BulletDamageShake());
  117. this.mDamagePolicy.Add(EBulletDamageType.EBULLET_DAMAGE_DRAG, new BulletDamageDrag());
  118. this.mDamagePolicy.Add(EBulletDamageType.EBULLET_DAMAGE_MAG, new BulletDamageMag());
  119. this.mDamagePolicy.Add(EBulletDamageType.EBULLET_DAMAGE_CRITICAL, new BulletDamageCritical());
  120. this.mDamagePolicy.Add(EBulletDamageType.EBULLET_DAMAGE_PHY, new BulletDamagePhy());
  121. this.mDamagePolicy.Add(EBulletDamageType.EBULLET_DAMAGE_CURE, new BulletDamageCure());
  122. }
  123. /// <summary>
  124. /// 初始化弹道策略
  125. /// </summary>
  126. public void InitializeBulletTraject()
  127. {
  128. this.mTrajectPolicy.Add(EBulletTrajectoryType.EBULLET_TRAJECT_NONE, new BulletTrajectNone());
  129. this.mTrajectPolicy.Add(EBulletTrajectoryType.EBULLET_TRAJECT_PARABOLA, new BulletTrajectParabola());
  130. this.mTrajectPolicy.Add(EBulletTrajectoryType.EBULLET_TRAJECT_LINE, new BulletTrajectLine());
  131. }
  132. }
  133. }