sensesaievaluate.c 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. class NoiseAIEvaluate
  2. {
  3. static float SURFACE_NOISE_WEIGHT = 0.25;
  4. static float GetNoiseMultiplier(DayZPlayerImplement playerImplement)
  5. {
  6. float speedNoise = GetNoiseMultiplierByPlayerSpeed(playerImplement);
  7. float shoesNoise = GetNoiseMultiplierByShoes(playerImplement);
  8. float surfaceNoise = GetNoiseMultiplierBySurface(playerImplement);
  9. surfaceNoise *= SURFACE_NOISE_WEIGHT;
  10. float avgNoise = (shoesNoise + surfaceNoise)/(1 + SURFACE_NOISE_WEIGHT);
  11. avgNoise *= speedNoise;
  12. return avgNoise;
  13. }
  14. static float GetNoiseReduction(Weather weather)
  15. {
  16. if (weather)
  17. return weather.GetNoiseReductionByWeather();
  18. return 0;
  19. }
  20. //Noise multiplier based on player speed
  21. static float GetNoiseMultiplierByPlayerSpeed(DayZPlayerImplement playerImplement)
  22. {
  23. HumanMovementState hms = new HumanMovementState();
  24. playerImplement.GetMovementState(hms);
  25. if ( playerImplement.GetCommand_Move() && playerImplement.GetCommand_Move().IsInRoll() )
  26. {
  27. // When rolling we are prone, so we load that Noise value, hence we multiply
  28. return PlayerConstants.AI_NOISE_ROLL;
  29. }
  30. switch ( AITargetCallbacksPlayer.StanceToMovementIdxTranslation(hms) )
  31. {
  32. case DayZPlayerConstants.MOVEMENTIDX_IDLE:
  33. return PlayerConstants.AI_NOISE_IDLE;
  34. case DayZPlayerConstants.MOVEMENTIDX_WALK:
  35. return PlayerConstants.AI_NOISE_WALK;
  36. case DayZPlayerConstants.MOVEMENTIDX_CROUCH_RUN:
  37. return PlayerConstants.AI_NOISE_CROUCH_RUN;
  38. case DayZPlayerConstants.MOVEMENTIDX_RUN:
  39. return PlayerConstants.AI_NOISE_RUN;
  40. case DayZPlayerConstants.MOVEMENTIDX_SPRINT:
  41. return PlayerConstants.AI_NOISE_SPRINT;
  42. }
  43. //Default return
  44. return PlayerConstants.AI_NOISE_SPRINT;
  45. }
  46. //Noise multiplier based on type of boots
  47. static float GetNoiseMultiplierByShoes(DayZPlayerImplement playerImplement)
  48. {
  49. switch ( playerImplement.GetBootsType() )
  50. {
  51. case AnimBootsType.None:
  52. return PlayerConstants.AI_NOISE_SHOES_NONE;
  53. case AnimBootsType.Sneakers:
  54. return PlayerConstants.AI_NOISE_SHOES_SNEAKERS;
  55. case AnimBootsType.Boots:
  56. return PlayerConstants.AI_NOISE_SHOES_BOOTS;
  57. }
  58. //Default return
  59. return PlayerConstants.AI_NOISE_SHOES_BOOTS;
  60. }
  61. //Gets noise multiplayer base on surface player walks on
  62. static float GetNoiseMultiplierBySurface(DayZPlayerImplement playerImplement)
  63. {
  64. return playerImplement.GetSurfaceNoise();
  65. }
  66. }