示例#1
0
        private void BaseKickBack(PlayerWeaponController controller, int seed, WeaponConfigNs.Kickback kickbackParams,
                                  float hOffsetFactor, float vOffsetFactor)
        {
            var   commonFireConfig = controller.HeldWeaponAgent.CommonFireCfg;
            var   kickbackConfig   = controller.HeldWeaponAgent.RifleKickbackLogicCfg;
            var   weaponState      = controller.HeldWeaponAgent.RunTimeComponent;
            float kickUp;
            float kickLateral;

            if (weaponState.ContinuesShootCount == 1)
            {
                kickUp      = kickbackParams.UpBase;
                kickLateral = kickbackParams.LateralBase;
            }
            else
            {
                kickUp      = kickbackParams.UpBase + weaponState.ContinuesShootCount * kickbackParams.UpModifier;
                kickLateral = kickbackParams.LateralBase + weaponState.ContinuesShootCount * kickbackParams.LateralModifier;
            }

            var punchYaw   = controller.RelatedOrient.NegPunchYaw;
            var punchPitch = controller.RelatedOrient.NegPunchPitch;
            var isMaxUp    = false;

            punchPitch += kickUp;
            if (punchPitch > kickbackParams.UpMax + commonFireConfig.AttackInterval * 0.01f)
            {
                punchPitch = kickbackParams.UpMax;
                isMaxUp    = true;
            }

            if (weaponState.PunchYawLeftSide)
            {
                punchYaw += kickLateral;
                if (punchYaw > kickbackParams.LateralMax)
                {
                    punchYaw = kickbackParams.LateralMax;
                }
            }
            else
            {
                punchYaw -= kickLateral;
                if (punchYaw < -1 * kickbackParams.LateralMax)
                {
                    punchYaw = -1 * kickbackParams.LateralMax;
                }
            }

            if (UniformRandom.RandomInt(seed, 0, (int)kickbackParams.LateralTurnback) == 0)
            {
                weaponState.PunchYawLeftSide = !weaponState.PunchYawLeftSide;
            }

            //if (isMaxUp)
            weaponState.PunchDecayCdTime = GetDecayCdTime(controller);
            weaponState.PunchPitchSpeed  = (punchPitch - controller.RelatedOrient.NegPunchPitch) / weaponState.PunchDecayCdTime;
            weaponState.PunchYawSpeed    = (punchYaw - controller.RelatedOrient.NegPunchYaw) / weaponState.PunchDecayCdTime;
        }
示例#2
0
 private void ModifyKickback(WeaponConfigNs.Kickback kickback, WeaponConfigNs.Kickback baseKickback, RifleKickbackModifierArg arg)
 {
     kickback.LateralBase     = baseKickback.LateralBase * (arg.BasicWidth > 0 ? arg.BasicWidth : 1);
     kickback.LateralMax      = baseKickback.LateralMax * (arg.MaxWidth > 0 ? arg.MaxWidth : 1);
     kickback.LateralModifier = baseKickback.LateralModifier * (arg.ContinusWidth > 0 ? arg.ContinusWidth : 1);
     kickback.UpBase          = baseKickback.UpBase * (arg.BasicHeight > 0 ? arg.BasicHeight : 1);
     kickback.UpMax           = baseKickback.UpMax * (arg.MaxHeight > 0 ? arg.MaxHeight : 1);
     kickback.UpModifier      = baseKickback.UpModifier * (arg.ContinusHeight > 0 ? arg.ContinusHeight : 1);
     kickback.LateralTurnback = baseKickback.LateralTurnback * (arg.Turnback > 0 ? arg.Turnback : 1);
 }