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); }
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); }
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); }
/// <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); }