public override void Init() { base.Init(); m_WeaponFireData = m_CfgEternityProxy.GetWeaponDataOfMissile(m_WeaponTable.TypeDateSheetld); m_CrossSightInfo = new CrossSightInfo(); m_CrossSightInfo.m_MaxRayDistance = m_SkillMaxDistance; m_CrossSightInfo.m_CrossSightShape = CrossSightShape.ConeSquare; m_CrossSightLoic = new CCrossSightLoic(); m_CrossSightLoic = new CrossSightLoic_Improve_ConeSquare(m_CrossSightLoic); m_CrossSightLoic.SetCrossSightInfo(m_CrossSightInfo); float accuracy = m_MainPlayer.GetWeaponAttribute(m_UId, crucis.attributepipeline.attribenum.AttributeName.kWeaponAccuracy); //精准度 float stability = m_MainPlayer.GetWeaponAttribute(m_UId, crucis.attributepipeline.attribenum.AttributeName.kWeaponStability); //稳定性 // 表里配置的时间是毫秒 m_LockonTimeParam = (m_WeaponFireData.LockTime - accuracy * m_WeaponFireData.TimeCoefficient) / 1000f; m_MaxMissileCountInOneShotParam = (int)(m_WeaponFireData.MagazineNumber + stability * m_WeaponFireData.MagazineQuantityCoefficient); m_ReticleHorizontalFOVParam = m_WeaponFireData.AimingSize; m_ReticleAspect = m_WeaponFireData.AngleRange; if (m_ReticleAspect == 0) { Debug.LogWarning(string.Format("--------------------> 导弹类武器表 ID= {0},AngleRange = 0,策划确认下对吗? ", m_WeaponTable.TypeDateSheetld)); } float fieldOfView = m_ReticleAspect == 0 ? 60 : m_ReticleHorizontalFOVParam / m_ReticleAspect; m_CrossSightLoic.ChangeVirtualCameraAttribute(fieldOfView, m_ReticleAspect); m_FireInterval = WeaponAndCrossSightFactory.CalculateFireInterval(m_MainPlayer, m_WeaponTable.TypeDateSheetld, m_UId, WeaponAndCrossSight.WeaponAndCrossSightTypes.Missile); }
public BattleWeapon_Missile_CenterLock(IWeapon weapon) : base(weapon) { m_LockTargeMap = new Dictionary <SpacecraftEntity, TargetLockInfo>(); m_State = State.Idle; m_WeaponFireData = m_CfgEternityProxy.GetWeaponDataOfMissile(m_WeaponConfig.TypeDateSheetld); TranslateUniformParamToWeaponParam(); // FIXME. 动态内存分配 m_VirtualCameraForReticleSelection = new GameObject().AddComponent <Camera>(); m_VirtualCameraForReticleSelection.enabled = false; m_VirtualCameraForReticleSelection.fieldOfView = m_ReticleHorizontalFOVParam / m_ReticleAspect; m_VirtualCameraForReticleSelection.aspect = m_ReticleAspect; GameObject.DontDestroyOnLoad(m_VirtualCameraForReticleSelection.gameObject); }
/// <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); }