Beispiel #1
0
        protected float UpdateSpread(PlayerWeaponController controller, float accuracy)
        {
            RifleSpreadLogicConfig config = controller.HeldWeaponAgent.RifleSpreadLogicCfg;
            float spread    = 0;
            var   spreadCfg = controller.RelatedCameraSNew.IsAiming() ? config.Aiming : config.Default;
            var   posture   = controller.RelatedStateInterface.GetCurrentPostureState();

            if (!controller.RelatedPlayerMove.IsGround)
            {
                spread = spreadCfg.Base * spreadCfg.Air;
            }
            else if (controller.RelatedPlayerMove.HorizontalVelocity > config.FastMoveSpeed)
            {
                spread = spreadCfg.Base * spreadCfg.FastMove;
            }
            else if (posture == XmlConfig.PostureInConfig.Prone)
            {
                spread = spreadCfg.Base * spreadCfg.Prone;
            }
            else
            {
                spread = spreadCfg.Base;
            }
            return(spread * accuracy);
        }
Beispiel #2
0
        ///精准系数*精准值
        public static float GetSpreadScaleFactor(RifleSpreadLogicConfig rifleSpreadLogicConfig, PlayerWeaponController controller)
        {
            Spread spreadAimCfg = controller.RelatedCameraSNew.IsAiming() ? rifleSpreadLogicConfig.Aiming : rifleSpreadLogicConfig.Default;
            var    spreadFactor = GetSpreadFactor(spreadAimCfg, rifleSpreadLogicConfig.FastMoveSpeed, controller);

            return(spreadFactor * spreadAimCfg.Base * (1 - controller.HeldWeaponAgent.GetAttachedAttributeByType(WeaponAttributeType.Spread) / 100));
        }
Beispiel #3
0
        public void BeforeFireBullet(PlayerWeaponController controller, IWeaponCmd cmd)
        {
            RifleSpreadLogicConfig config = controller.HeldWeaponAgent.RifleSpreadLogicCfg;
            var   weaponState             = controller.HeldWeaponAgent.RunTimeComponent;
            float spread = UpdateSpread(controller, weaponState.Accuracy);

            weaponState.LastSpreadX = spread * config.SpreadScale.ScaleX;
            weaponState.LastSpreadY = spread * config.SpreadScale.ScaleY;
        }
        ///精准系数*精准值
        public static float GetSpreadScaleFactor(RifleSpreadLogicConfig rifleSpreadLogicConfig,
                                                 WeaponAttackProxy attackProxy)
        {
            Spread spreadAimCfg = attackProxy.IsAiming ? rifleSpreadLogicConfig.Aiming : rifleSpreadLogicConfig.Default;
            var    spreadFactor = GetSpreadFactor(spreadAimCfg, rifleSpreadLogicConfig.FastMoveSpeed, attackProxy);

            return(spreadFactor * spreadAimCfg.Base *
                   (1 - attackProxy.GetAttachedAttributeByType(WeaponAttributeType.Spread) / 100));
        }
Beispiel #5
0
        protected override void Update(WeaponBaseAgent weaponBaseAgent, WeaponSideCmd cmd)

        {
            RifleSpreadLogicConfig config = weaponBaseAgent.RifleSpreadLogicCfg;
            var   weaponRuntime           = weaponBaseAgent.RunTimeComponent;
            float spreadScaleFactor       = FireSpreadProvider.GetSpreadScaleFactor(config, weaponBaseAgent.Owner.WeaponController());

            FireSpreadFormula.ApplyRifleFinalSpread(spreadScaleFactor, config.SpreadScale, weaponRuntime);
        }
        protected override void Update(WeaponAttackProxy attackProxy, WeaponSideCmd cmd)

        {
            // var appearance = controller.RelatedAppearence;
            // var weaponObject = appearance.IsFirstPerson
            //                 ? appearance.GetWeaponP1InHand()
            //                 : appearance.GetWeaponP3InHand();
            // DebugUtil.MyLog(weaponObject.transform.position.ToString("f4"));
            RifleSpreadLogicConfig config = attackProxy.WeaponConfigAssy.S_RifleSpreadLogicCfg;
            float spreadScaleFactor       = FireSpreadProvider.GetSpreadScaleFactor(config, attackProxy);

            FireSpreadFormula.ApplyRifleFinalSpread(spreadScaleFactor, config.SpreadScale, attackProxy.RuntimeComponent);
        }