//==========================================================================

    /**
     * @param weaponType
     * @param ammoType
     */
    public bool Init(eWeaponTypes weaponType, Weapon.eAmmoTypes ammoType, bool autoShoting)
    {
        actualWeaponType = weaponType;
        actualAmmoType   = ammoType;
        automaticShoting = autoShoting;

        return(true);
    }
    /**
     * @param initHealth
     * @param initShield
     * @param initEnergy
     * @param rechargeType
     * @param weaponType
     * @param ammoType
     */
    public bool InitEnemy(int initLifes,
                          float initHealth,
                          float initShield,
                          float initEnergy,
                          CoreSystems.Energy.eRechargeTypes rechargeType,
                          WeaponSystems.eWeaponTypes weaponType,
                          Weapon.eAmmoTypes ammoType,
                          bool autoShoting)
    {
        bool ret = true;

        ret = nesCoreSys.Init(initLifes, initHealth, initShield, initEnergy, rechargeType) && ret;
        ret = nesWeapSys.Init(weaponType, ammoType, autoShoting) && ret;

        return(ret);
    }
    //==================================================================================================

    /**
     * @param initHealth
     * @param initShield
     * @param initEnergy
     * @param rechargeType
     * @param weaponType
     * @param ammoType
     */
    public bool InitShip(int initLifes,
                         float initHealth,
                         float initShield,
                         float initEnergy,
                         CoreSystems.Energy.eRechargeTypes rechargeType,
                         WeaponSystems.eWeaponTypes weaponType,
                         Weapon.eAmmoTypes ammoType)
    {
        bool ret = true;

        ret = nesCoreSys.Init(initLifes, initHealth, initShield, initEnergy, rechargeType) && ret;
        ret = nesWeapSys.Init(weaponType, ammoType, false) && ret;

        ret = SetMoveStyle(false) && ret;

        nesCoreSys.collisionDamageRate = 1000.0f;

        return(ret);
    }
    /**
     *
     */
    public bool ActivateWeapons()
    {
        bool weapRet = true;

        switch (actualWeaponType)
        {
        case eWeaponTypes.NoWeapon:
            for (int i = 0; i < refShipAllWeapons.Length; i++)
            {
                if (!refShipAllWeapons[i].nesWeapon.Init(Weapon.eAmmoTypes.NoShoting, ref refShipEnergy))
                {
                    weapRet = false;

                    Debug.LogError("WeaponSystems >> eWeaponTypes.NoWeapon >> Weapon `"
                                   + refShipAllWeapons[i].name
                                   + " (position: "
                                   + refShipAllWeapons[i].weaponPosision
                                   + ")` was NOT initialized !!");
                }

                refShipAllWeapons[i].gameObject.SetActive(false);
                refShipAllWeapons[i].autoShot = false;
            }
            break;

        case eWeaponTypes.Custom:
            break;

        case eWeaponTypes.ForwardBasic:
            for (int i = 0; i < refShipAllWeapons.Length; i++)
            {
                Weapon.eAmmoTypes tmp = Weapon.eAmmoTypes.NoShoting;

                if (refShipAllWeapons[i].weaponPosision == "FM")
                {
                    tmp = actualAmmoType;
                }

                if (!refShipAllWeapons[i].nesWeapon.Init(tmp, ref refShipEnergy))
                {
                    weapRet = false;

                    Debug.LogError("WeaponSystems >> eWeaponTypes.ForwardBasic >> Weapon `"
                                   + refShipAllWeapons[i].name
                                   + " (position: "
                                   + refShipAllWeapons[i].weaponPosision
                                   + ")` was NOT initialized !!");

                    refShipAllWeapons[i].gameObject.SetActive(false);
                    refShipAllWeapons[i].autoShot = false;
                }
                else
                {
                    if ((tmp > Weapon.eAmmoTypes.Custom) && (tmp < Weapon.eAmmoTypes.END_AMMO_TYPES))
                    {
                        refShipAllWeapons[i].gameObject.SetActive(true);
                    }
                    else
                    {
                        refShipAllWeapons[i].gameObject.SetActive(false);
                    }

                    refShipAllWeapons[i].autoShot = automaticShoting;
                }
            }
            break;

        case eWeaponTypes.ForwardBetter:
            for (int i = 0; i < refShipAllWeapons.Length; i++)
            {
                Weapon.eAmmoTypes tmp = Weapon.eAmmoTypes.NoShoting;

                if (refShipAllWeapons[i].weaponPosision == "FL" ||
                    refShipAllWeapons[i].weaponPosision == "FR")
                {
                    tmp = actualAmmoType;
                }

                if (!refShipAllWeapons[i].nesWeapon.Init(tmp, ref refShipEnergy))
                {
                    weapRet = false;

                    Debug.LogError("WeaponSystems >> eWeaponTypes.ForwardBetter >> Weapon `"
                                   + refShipAllWeapons[i].name
                                   + " (position: "
                                   + refShipAllWeapons[i].weaponPosision
                                   + ")` was NOT initialized !!");

                    refShipAllWeapons[i].gameObject.SetActive(false);
                    refShipAllWeapons[i].autoShot = false;
                }
                else
                {
                    if ((tmp > Weapon.eAmmoTypes.Custom) && (tmp < Weapon.eAmmoTypes.END_AMMO_TYPES))
                    {
                        refShipAllWeapons[i].gameObject.SetActive(true);
                    }
                    else
                    {
                        refShipAllWeapons[i].gameObject.SetActive(false);
                    }

                    refShipAllWeapons[i].autoShot = automaticShoting;
                }
            }
            break;

        case eWeaponTypes.ForwardAdvanced:
            for (int i = 0; i < refShipAllWeapons.Length; i++)
            {
                Weapon.eAmmoTypes tmp = Weapon.eAmmoTypes.NoShoting;

                if (refShipAllWeapons[i].weaponPosision == "FM" ||
                    refShipAllWeapons[i].weaponPosision == "FL" ||
                    refShipAllWeapons[i].weaponPosision == "FR")
                {
                    tmp = actualAmmoType;
                }

                if (!refShipAllWeapons[i].nesWeapon.Init(tmp, ref refShipEnergy))
                {
                    weapRet = false;

                    Debug.LogError("WeaponSystems >> eWeaponTypes.ForwardAdvanced >> Weapon `"
                                   + refShipAllWeapons[i].name
                                   + " (position: "
                                   + refShipAllWeapons[i].weaponPosision
                                   + ")` was NOT initialized !!");

                    refShipAllWeapons[i].gameObject.SetActive(false);
                    refShipAllWeapons[i].autoShot = false;
                }
                else
                {
                    if ((tmp > Weapon.eAmmoTypes.Custom) && (tmp < Weapon.eAmmoTypes.END_AMMO_TYPES))
                    {
                        refShipAllWeapons[i].gameObject.SetActive(true);
                    }
                    else
                    {
                        refShipAllWeapons[i].gameObject.SetActive(false);
                    }

                    refShipAllWeapons[i].autoShot = automaticShoting;
                }
            }
            break;

        case eWeaponTypes.DirectionalBasic:
            for (int i = 0; i < refShipAllWeapons.Length; i++)
            {
                Weapon.eAmmoTypes tmp = Weapon.eAmmoTypes.NoShoting;

                if (refShipAllWeapons[i].weaponPosision == "FM" ||
                    refShipAllWeapons[i].weaponPosision == "FL" ||
                    refShipAllWeapons[i].weaponPosision == "FR")
                {
                    tmp = actualAmmoType;
                }
                else if (refShipAllWeapons[i].weaponPosision == "DL" ||
                         refShipAllWeapons[i].weaponPosision == "DR")
                {
                    if (actualAmmoType > Weapon.eAmmoTypes.Toy)
                    {
                        tmp = (actualAmmoType - 1);
                    }
                    else
                    {
                        tmp = actualAmmoType;
                    }
                }

                if (!refShipAllWeapons[i].nesWeapon.Init(tmp, ref refShipEnergy))
                {
                    weapRet = false;

                    Debug.LogError("WeaponSystems >> eWeaponTypes.DirectionalAdvanced >> Weapon `"
                                   + refShipAllWeapons[i].name
                                   + " (position: "
                                   + refShipAllWeapons[i].weaponPosision
                                   + ")` was NOT initialized !!");

                    refShipAllWeapons[i].gameObject.SetActive(false);
                    refShipAllWeapons[i].autoShot = false;
                }
                else
                {
                    if ((tmp > Weapon.eAmmoTypes.Custom) && (tmp < Weapon.eAmmoTypes.END_AMMO_TYPES))
                    {
                        refShipAllWeapons[i].gameObject.SetActive(true);
                    }
                    else
                    {
                        refShipAllWeapons[i].gameObject.SetActive(false);
                    }

                    refShipAllWeapons[i].autoShot = automaticShoting;
                }
            }
            break;

        default:
            break;
        }

        if (!weapRet)
        {
            Debug.LogError("WeaponSystems >> At least one weapon was not initialized properly");
        }

        return(weapRet);
    }
    //==================================================================================================

    /**
     * @param enType
     * @param enWave
     *
     */
    public bool InitEnemy(eScoreObjectTypes enType, int enWave)
    {
        bool initialized = true;

        switch (enType)
        {
        case eScoreObjectTypes.EnemyUWingBasic:
        {
            float tmpMove = (enWave / 5) * 0.05f;

            float tmpHeal = 40.0f;
            float tmpEner = 100.0f;

            CoreSystems.Energy.eRechargeTypes tmpERec = CoreSystems.Energy.eRechargeTypes.NoRecharge;
            WeaponSystems.eWeaponTypes        tmpWeap = WeaponSystems.eWeaponTypes.NoWeapon;
            Weapon.eAmmoTypes tmpAmmo = Weapon.eAmmoTypes.NoShoting;

            bool tmpAuto = false;

            if (enWave >= 10)
            {
                tmpHeal = 60.0f;
                tmpERec = CoreSystems.Energy.eRechargeTypes.VerySlow;
                tmpWeap = WeaponSystems.eWeaponTypes.ForwardBasic;
                tmpAmmo = Weapon.eAmmoTypes.Toy;
                tmpAuto = true;
            }
            if (enWave >= 25)
            {
                tmpHeal = 80.0f;
                tmpERec = CoreSystems.Energy.eRechargeTypes.Slow;
                tmpAmmo = Weapon.eAmmoTypes.Basic;
            }

            // init lifes, health, shield, energy and weapons
            initialized = InitEnemy(1, tmpHeal, 0.0f, tmpEner, tmpERec, tmpWeap, tmpAmmo, tmpAuto);
            // init engines
            initialized = nesEngiSys.Init((2.0f + tmpMove), (1.0f + tmpMove), 0.0f, false) && initialized;
        }
        break;

        case eScoreObjectTypes.EnemyUWingMedium:
        {
            float tmpMove = (enWave / 5) * 0.1f;

            float tmpHeal = 60.0f;
            float tmpEner = 100.0f;

            CoreSystems.Energy.eRechargeTypes tmpERec = CoreSystems.Energy.eRechargeTypes.VerySlow;
            WeaponSystems.eWeaponTypes        tmpWeap = WeaponSystems.eWeaponTypes.ForwardBasic;
            Weapon.eAmmoTypes tmpAmmo = Weapon.eAmmoTypes.Toy;

            bool tmpAuto = true;

            if (enWave >= 5)
            {
                tmpAmmo = Weapon.eAmmoTypes.Basic;
            }
            if (enWave >= 10)
            {
                tmpHeal = 80.0f;
                tmpERec = CoreSystems.Energy.eRechargeTypes.Slow;
                tmpWeap = WeaponSystems.eWeaponTypes.ForwardBetter;
                tmpAmmo = Weapon.eAmmoTypes.Toy;
            }
            if (enWave >= 20)
            {
                tmpAmmo = Weapon.eAmmoTypes.Basic;
            }
            if (enWave >= 30)
            {
                tmpHeal = 100.0f;
                tmpERec = CoreSystems.Energy.eRechargeTypes.Medium;
                tmpWeap = WeaponSystems.eWeaponTypes.ForwardAdvanced;
                tmpAmmo = Weapon.eAmmoTypes.Toy;
            }
            if (enWave >= 50)
            {
                tmpAmmo = Weapon.eAmmoTypes.Basic;
            }

            // init lifes, health, shield, energy and weapons
            initialized = InitEnemy(1, tmpHeal, 0.0f, tmpEner, tmpERec, tmpWeap, tmpAmmo, tmpAuto);
            // init engines
            initialized = nesEngiSys.Init((3.0f + tmpMove), (2.0f + tmpMove), 0.0f, false) && initialized;
        }
        break;


        default:
            Debug.LogWarning("ENEMY SETT >> Unknown enemy type");
            initialized = false;
            break;
        }

        if (initialized)
        {
            scoreType = enType;
        }

        nesCoreSys.collisionDamageRate = 1000.0f;

        return(initialized);
    }