public BattleWeapon_Shotgun(IWeapon weapon) : base(weapon)
    {
        m_MainAimArea = new AimArea();

        m_WeaponFireData = m_CfgEternityProxy.GetWeaponDataOfShotgun(m_WeaponConfig.TypeDateSheetld);

        TranslateUniformParamToWeaponParam();
    }
    // Start is called before the first frame update
    void Start()
    {
        _PistolComponent = GetComponent <WeaponPistol>();
        _PistolComponent.WeaponSetup(PistolMaxAmmo, PistolBulletPrefab, PistolSprite, PistolBulletSpeed);
        _ShotgunComponent = GetComponent <WeaponShotgun>();
        _ShotgunComponent.WeaponSetup(ShotgunMaxAmmo, ShotgunBulletPrefab, ShotgunSprite, ShotgunBulletSpeed, SpreadAngle, BulletsPerShot);
        _GrenadeLauncherComponent = GetComponent <WeaponGrenadeLauncher>();
        _GrenadeLauncherComponent.WeaponSetup(GrenadeLauncherMaxAmmo, GrenadeLauncherBulletPrefab, GrenadeLauncherSprite, GrenadeLauncherBulletSpeed);

        CurrentWeapon = GetComponent <WeaponPistol>();
        SwitchWeapon(CurrentWeaponType);
    }
示例#3
0
        public void Weapon_Fire_CreatesBullets()
        {
            Weapon w = new WeaponAdvancedAR();

            Assert.IsTrue(w.Fire(Vector2.One).Count > 0);

            w = new WeaponAdvancedShotgun();
            Assert.IsTrue(w.Fire(Vector2.One).Count > 0);

            w = new WeaponAR();
            Assert.IsTrue(w.Fire(Vector2.One).Count > 0);

            w = new WeaponKnife();
            Assert.IsTrue(w.Fire(Vector2.One).Count > 0);

            w = new WeaponPistol();
            Assert.IsTrue(w.Fire(Vector2.One).Count > 0);

            w = new WeaponPistolShield();
            Assert.IsTrue(w.Fire(Vector2.One).Count > 0);

            w = new WeaponShotgun();
            Assert.IsTrue(w.Fire(Vector2.One).Count > 0);
        }
示例#4
0
    public override void Init()
    {
        base.Init();

        m_WeaponFireData = m_CfgEternityProxy.GetWeaponDataOfShotgun(m_WeaponTable.TypeDateSheetld);
        float accuracy            = m_MainPlayer.GetWeaponAttribute(m_UId, crucis.attributepipeline.attribenum.AttributeName.kWeaponAccuracy);  //精准度
        float stability           = m_MainPlayer.GetWeaponAttribute(m_UId, crucis.attributepipeline.attribenum.AttributeName.kWeaponStability); //稳定性
        float m_SonMaxSpreadAngle = m_WeaponFireData.SonDiffusionAngle - accuracy * m_WeaponFireData.SonDiffusionAngleCoefficient;              //子区域偏移最大角度

        m_RestoreDuration = (m_WeaponFireData.RecoveryTime - stability * m_WeaponFireData.RecoveryTimeCoefficient) / 1000f;
        int sonCount = (int)m_WeaponFireData.SonNumber;


        AimArea mainAimArea = new AimArea();
        // 中心区域覆盖角度
        float MainAreaCoverAngle = m_WeaponFireData.CoreDiameterAngle - accuracy * m_WeaponFireData.CoreDiameterAngleCoefficient;
        int   mainRayCount       = m_WeaponFireData.CoreRadialNumber;

        mainAimArea.Init(false, 0, MainAreaCoverAngle, mainRayCount, m_SkillMaxDistance, sonCount);

        m_AimAreaList.Add(mainAimArea);

        //子区域
        for (int i = 0; i < sonCount; i++)
        {
            AimArea sonAimArea = new AimArea();

            // 子区域覆盖角度
            float SubAimAreaCoverAngle = m_WeaponFireData.SonDiameterAngle - accuracy * m_WeaponFireData.SonDiameterAngleCoefficient;
            int   sonRayCount          = m_WeaponFireData.SonRadialNumber;
            sonAimArea.Init(true, m_SonMaxSpreadAngle, SubAimAreaCoverAngle, sonRayCount, m_SkillMaxDistance, sonCount);
            m_AimAreaList.Add(sonAimArea);
        }

        m_FireInterval = WeaponAndCrossSightFactory.CalculateFireInterval(m_MainPlayer, m_WeaponTable.TypeDateSheetld, m_UId, WeaponAndCrossSight.WeaponAndCrossSightTypes.ShotGun);
    }
示例#5
0
    /// <summary>
    /// 获得射击间隔
    /// </summary>
    /// <returns></returns>
    public static float CalculateFireInterval(SpacecraftEntity entity, uint TypeDateSheetld, ulong weaponUid, WeaponAndCrossSight.WeaponAndCrossSightTypes type)
    {
        if (entity == null)
        {
            return(0);
        }

        int   minuteBulletNumber = 0;
        float fir = 0f;

        CfgEternityProxy cfgEternityProxy = GameFacade.Instance.RetrieveProxy(ProxyName.CfgEternityProxy) as CfgEternityProxy;

        switch (type)
        {
        case WeaponAndCrossSight.WeaponAndCrossSightTypes.MachineGun:
        {
            WeaponRapidFirer WData = cfgEternityProxy.GetWeaponDataOfMachineGun(TypeDateSheetld);
            minuteBulletNumber = WData.MinuteBulletNumber;
        }
        break;

        case WeaponAndCrossSight.WeaponAndCrossSightTypes.Missile:
        {
            WeaponMissile WData = cfgEternityProxy.GetWeaponDataOfMissile(TypeDateSheetld);
            minuteBulletNumber = WData.MinuteBulletNumber;
        }
        break;

        case WeaponAndCrossSight.WeaponAndCrossSightTypes.ShotGun:
        {
            WeaponShotgun WData = cfgEternityProxy.GetWeaponDataOfShotgun(TypeDateSheetld);
            minuteBulletNumber = WData.MinuteBulletNumber;
        }
        break;

        case WeaponAndCrossSight.WeaponAndCrossSightTypes.Mining:
        {
            WeaponMiningLaser WData = cfgEternityProxy.GetWeaponDataOfMining(TypeDateSheetld);
            minuteBulletNumber = WData.MinuteBulletNumber;
        }
        break;

        case WeaponAndCrossSight.WeaponAndCrossSightTypes.Null:
        default:
            return(0f);
        }



        // 当武器射速属性 >= 0,使用1号武器射击间隔公式
        // 当武器射速属性 < 0,使用2号武器射击间隔公式

        // 1号武器射击间隔公式
        // ( 60 / A) /( 1 + B / 100)*1000

        // 2号武器射击间隔公式
        // ABS(( 60 / A) *( 1 + B / 100 - 2)*1000)

        // A:1分钟子弹数
        // B:武器射速

        // 备注:
        //  武器射击间隔公式最终数值为整数四舍五入
        //  最终单位数值为毫秒

        float weaponFireSpeed = entity.GetWeaponAttribute(weaponUid, crucis.attributepipeline.attribenum.AttributeName.kLightHeatCastSpeed);

        if (weaponFireSpeed >= 0)
        {
            fir = 60f / minuteBulletNumber / (1 + weaponFireSpeed / 100f);
        }
        else
        {
            fir = Mathf.Abs(60f / minuteBulletNumber * (1 + weaponFireSpeed / 100f - 2f));
        }

        return(fir);
    }