123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- using System;
- using System.Collections.Generic;
- namespace YLBattle
- {
- /// <summary>
- /// 子弹策略辅助类
- /// </summary>
- public class BulletPolicyFinder
- {
- /// <summary>
- /// 单键实例
- /// </summary>
- private static BulletPolicyFinder _Instance = null;
- /// <summary>
- /// 瞄准策略
- /// </summary>
- private Dictionary<EBulletAIMType, BulletAIMFoundation> mAIMPolicy = new Dictionary<EBulletAIMType, BulletAIMFoundation>();
- /// <summary>
- /// 伤害计算
- /// </summary>
- private Dictionary<EBulletDamageType, BulletDamageFoundation> mDamagePolicy = new Dictionary<EBulletDamageType, BulletDamageFoundation>();
- /// <summary>
- /// 弹道模拟策略
- /// </summary>
- private Dictionary<EBulletTrajectoryType, BulletTrajectFoundation> mTrajectPolicy = new Dictionary<EBulletTrajectoryType, BulletTrajectFoundation>();
- /// <summary>
- /// 单键实例
- /// </summary>
- /// <returns>单键</returns>
- public static BulletPolicyFinder Instance()
- {
- if (null == _Instance)
- {
- _Instance = new BulletPolicyFinder();
- }
- return _Instance;
- }
- /// <summary>
- /// 构造函数
- /// </summary>
- protected BulletPolicyFinder()
- {
- this.mAIMPolicy.Clear();
- this.mTrajectPolicy.Clear();
- this.mDamagePolicy.Clear();
- this.InitializeAIMPolicy();
- this.InitializeBulletTraject();
- this.InitialzieDamage();
- }
- /// <summary>
- /// 查询弹道策略
- /// </summary>
- /// <param name="type">查询弹道类型</param>
- /// <returns>弹道策略</returns>
- public BulletTrajectFoundation BulletTrajectFoundation(EBulletTrajectoryType type)
- {
- if (this.mTrajectPolicy.ContainsKey(type))
- {
- return this.mTrajectPolicy[type];
- }
- return null;
- }
- /// <summary>
- /// 查询AIM
- /// </summary>
- /// <param name="type">查询类型</param>
- /// <returns>AIM瞄准策略</returns>
- public BulletAIMFoundation AIMFoundation(EBulletAIMType type)
- {
- if (this.mAIMPolicy.ContainsKey(type))
- {
- return (BulletAIMFoundation)this.mAIMPolicy[type].Clone();
- }
- return null;
- }
- /// <summary>
- /// 查找伤害策略
- /// </summary>
- /// <param name="type">查询伤害类型</param>
- /// <returns>伤害策略</returns>
- public BulletDamageFoundation BulletDamage(EBulletDamageType type)
- {
- if (this.mDamagePolicy.ContainsKey(type))
- {
- return this.mDamagePolicy[type];
- }
- return null;
- }
- /// <summary>
- /// 初始化瞄准目标选择
- /// </summary>
- public void InitializeAIMPolicy()
- {
- this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_SELF, new BulletAIMSelf());
- this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_CENTERTARGET, new BulletAIMLockedTarget());
- this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_TARGET, new BulletAIMTarget());
- this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_SELFAROUND, new BulletAIMSelfGround());
- this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_TARGETAROUND, new BulletAIMTargetAround());
- this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_ALLFRIENDS, new BulletAIMAllFriends());
- this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_ALLENEMIES, new BulletAIMAllEnemies());
- this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_ABOVEHPENEMY, new BulletAboveHpEnemy());
- this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_UNDERHPENEMY, new BulletUnderHpEnemy());
- this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_UNDERHPFRIEND, new BulletUnderHpFriend());
- this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_LEASTHPMOREFRIEND, new BulletAIMLastHpMoreFriend());
- this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_LEASTHPMOREENEMY, new BulletAIMLastHpMoreEnemy());
- this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_RONDOMMOREENEMY, new BulletAIMRondomMoreEnemy());
- this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_HIGHATTACKMOREENEMY, new BulletAIMHighAttackMoreEnemy());
- this.mAIMPolicy.Add(EBulletAIMType.EBULLET_AIM_LEASTHPFRIENDEXPME, new BulletAIMLastHpFriendExpSelf());
- }
- /// <summary>
- /// 初始化伤害策略
- /// </summary>
- public void InitialzieDamage()
- {
- this.mDamagePolicy.Add(EBulletDamageType.EBULLET_DAMAGE_BUFF, new BulletDamageBuff());
- this.mDamagePolicy.Add(EBulletDamageType.EBULLET_DAMAGE_SHAKE, new BulletDamageShake());
- this.mDamagePolicy.Add(EBulletDamageType.EBULLET_DAMAGE_DRAG, new BulletDamageDrag());
- this.mDamagePolicy.Add(EBulletDamageType.EBULLET_DAMAGE_MAG, new BulletDamageMag());
- this.mDamagePolicy.Add(EBulletDamageType.EBULLET_DAMAGE_CRITICAL, new BulletDamageCritical());
- this.mDamagePolicy.Add(EBulletDamageType.EBULLET_DAMAGE_PHY, new BulletDamagePhy());
- this.mDamagePolicy.Add(EBulletDamageType.EBULLET_DAMAGE_CURE, new BulletDamageCure());
- }
- /// <summary>
- /// 初始化弹道策略
- /// </summary>
- public void InitializeBulletTraject()
- {
- this.mTrajectPolicy.Add(EBulletTrajectoryType.EBULLET_TRAJECT_NONE, new BulletTrajectNone());
- this.mTrajectPolicy.Add(EBulletTrajectoryType.EBULLET_TRAJECT_PARABOLA, new BulletTrajectParabola());
- this.mTrajectPolicy.Add(EBulletTrajectoryType.EBULLET_TRAJECT_LINE, new BulletTrajectLine());
- }
- }
- }
|