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