//===========================================================================================
        //	Projectile Factory Method
//        private static Type GetUnitFromFactory(ProjectileType projectileType)
//        {
//            switch (projectileType)
//            {
//                case ProjectileType.Splash:
//                    return typeof(SplashProjectile);
//                default :
//                    return typeof(SingleTargetProjectile);
//            }
//        }
        //===========================================================================================



        //===========================================================================================
        //	Instantiation code for projectile objects
        public static UnitProjectile Instantiate(Transform target, ProjectileParams projectileParams)
        {
            if (target == null)
            {
                return(null);
            }

            //GameObject projectileObject = GameObject.Instantiate(Resources.Load(projectileParams._projectilePrefabPath)) as GameObject;
            GameObject     Prefab           = Resources.Load <GameObject>(Constants.PROJECTILES_PREFAB_PATH + "Bullet");
            GameObject     projectileObject = ObjectPool.Spawn(Prefab);
            UnitProjectile unitProjectile   = projectileObject.AddComponent <UnitProjectile>();

//			unitProjectile.transform.position = projectileParams._parent.position;
//			unitProjectile.transform.position = new Vector3(unitProjectile.transform.position.x, 0.5f, unitProjectile.transform.position.z); //offset from ground :s
            unitProjectile._damage           = projectileParams._projectileDamage;
            unitProjectile._type             = projectileParams._enemyType;
            unitProjectile._radius           = projectileParams._projectileRadius;
            unitProjectile._motionType       = projectileParams._motionType;
            unitProjectile._parent           = projectileParams._parent;
            unitProjectile._speed            = projectileParams._projectileSpeed;
            unitProjectile._shouldAccelerate = projectileParams._shouldAccelerate;
            unitProjectile._target           = target;
            unitProjectile._projectileType   = projectileParams._projectileType;
            unitProjectile.OnHitSound        = projectileParams.OnHitSound;
            unitProjectile.Fire();
            return(unitProjectile);
        }
        public static ProjectileParams GetProjectileParams(string unitKey, float projectileDamage, Transform parent)
        {
            ProjectileParams pParams = null;

            if (_unitProjectileInfoDictionary.ContainsKey(unitKey))
            {
                pParams = GetProjectileParam(_unitProjectileInfoDictionary[unitKey]);
                pParams._projectileDamage = projectileDamage;
                pParams._parent           = parent;
            }
            return(pParams);
        }
 private static ProjectileParams GetProjectileParam(ProjectileParams projectileParams)
 {
     return(new ProjectileParams
     {
         _enemyType = projectileParams._enemyType,
         _motionType = projectileParams._motionType,
         _projectilePrefabPath = projectileParams._projectilePrefabPath,
         _projectileRadius = projectileParams._projectileRadius,
         _projectileSpeed = projectileParams._projectileSpeed,
         _projectileType = projectileParams._projectileType,
         _shouldAccelerate = projectileParams._shouldAccelerate
     });
 }
        //===========================================================================================


        //===========================================================================================
        //
        public static UnitProjectile Instantiate(Vector3 target, ProjectileParams projectileParams)
        {
            GameObject     Prefab           = Resources.Load(Constants.PROJECTILES_PREFAB_PATH + "Bullet") as GameObject;
            GameObject     projectileObject = ObjectPool.Spawn(Prefab);
            UnitProjectile unitProjectile   = projectileObject.AddComponent <UnitProjectile>();

            unitProjectile._damage           = projectileParams._projectileDamage;
            unitProjectile._type             = projectileParams._enemyType;
            unitProjectile._radius           = projectileParams._projectileRadius;
            unitProjectile._motionType       = projectileParams._motionType;
            unitProjectile._parent           = projectileParams._parent;
            unitProjectile._speed            = projectileParams._projectileSpeed;
            unitProjectile._shouldAccelerate = projectileParams._shouldAccelerate;
            unitProjectile.gotoPos           = target;
            unitProjectile._projectileType   = projectileParams._projectileType;
            unitProjectile.OnHitSound        = projectileParams.OnHitSound;
            unitProjectile.Fire();
            return(unitProjectile);
        }