コード例 #1
0
    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);
    }
コード例 #2
0
    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);
    }
コード例 #3
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);
    }