injurysoundhandler.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. enum eInjurySoundZones
  2. {
  3. NONE = 0,
  4. LIGHT,
  5. MEDIUM,
  6. HEAVY,
  7. // PUT NEW STATES ABOVE
  8. COUNT
  9. }
  10. class InjurySoundHandlerBase extends SoundHandlerBase
  11. {
  12. override void Init()
  13. {
  14. m_Id = eSoundHandlers.INJURY;
  15. }
  16. }
  17. //---------------------------
  18. // Client
  19. //---------------------------
  20. class InjurySoundHandlerClient extends InjurySoundHandlerBase
  21. {
  22. const float SOUND_INTERVALS_LIGHT_MIN = 15; const float SOUND_INTERVALS_LIGHT_MAX = 30;
  23. const float SOUND_INTERVALS_MEDIUM_MIN = 10; const float SOUND_INTERVALS_MEDIUM_MAX = 25;
  24. const float SOUND_INTERVALS_HEAVY_MIN = 3; const float SOUND_INTERVALS_HEAVY_MAX = 12;
  25. ref HumanMovementState m_MovementState = new HumanMovementState;
  26. eInjurySoundZones m_InjurySoundZone;
  27. eInjuryHandlerLevels m_InjuryLevel;
  28. float m_SoundTime;
  29. eInjurySoundZones DetermineInjuryZone(eInjuryHandlerLevels level)
  30. {
  31. if( level == eInjuryHandlerLevels.PRISTINE )
  32. return eInjurySoundZones.NONE;
  33. m_Player.GetMovementState(m_MovementState);
  34. int speed = m_MovementState.m_iMovement;
  35. int stance = m_MovementState.m_iStanceIdx;
  36. //int stance_lvl_down = DayZPlayerConstants.STANCEMASK_PRONE | DayZPlayerConstants.STANCEMASK_CROUCH;
  37. if( speed == 0 )
  38. return eInjurySoundZones.NONE;
  39. level--;// shift the level so that we play from higher damage
  40. if( stance == DayZPlayerConstants.STANCEIDX_PRONE || stance == DayZPlayerConstants.STANCEIDX_CROUCH )
  41. {
  42. level--;
  43. }
  44. if( speed == DayZPlayerConstants.MOVEMENTIDX_WALK )
  45. {
  46. level--;
  47. }
  48. else if(speed == DayZPlayerConstants.MOVEMENTIDX_SPRINT)
  49. {
  50. level++;
  51. }
  52. level = Math.Clamp(level, eInjurySoundZones.NONE, eInjurySoundZones.HEAVY);
  53. return level;
  54. }
  55. override void Update()
  56. {
  57. m_InjuryLevel = m_Player.m_HealthLevel;
  58. if( m_InjuryLevel != eInjuryHandlerLevels.PRISTINE )
  59. {
  60. eInjurySoundZones zone = DetermineInjuryZone(m_Player.m_HealthLevel);
  61. ProcessSound(zone);
  62. }
  63. }
  64. void ProcessSound(eInjurySoundZones zone)
  65. {
  66. //Print("injury sound zone:"+ zone);
  67. // process sound here
  68. if( GetGame().GetTime() > m_SoundTime)
  69. {
  70. float offset_time;
  71. if(zone == eInjurySoundZones.NONE)
  72. {
  73. offset_time = 3000;
  74. m_SoundTime = GetGame().GetTime() + offset_time;
  75. return;
  76. }
  77. if(zone == eInjurySoundZones.LIGHT)
  78. {
  79. offset_time = Math.RandomFloatInclusive(SOUND_INTERVALS_LIGHT_MIN, SOUND_INTERVALS_LIGHT_MAX) * 1000;
  80. }
  81. else if(zone == eInjurySoundZones.MEDIUM)
  82. {
  83. offset_time = Math.RandomFloatInclusive(SOUND_INTERVALS_MEDIUM_MIN, SOUND_INTERVALS_MEDIUM_MAX) * 1000;
  84. }
  85. else if(zone == eInjurySoundZones.HEAVY)
  86. {
  87. offset_time = Math.RandomFloatInclusive(SOUND_INTERVALS_HEAVY_MIN, SOUND_INTERVALS_HEAVY_MAX) * 1000;
  88. }
  89. m_SoundTime = GetGame().GetTime() + offset_time;
  90. PlaySound(zone);
  91. }
  92. }
  93. void PlaySound(eInjurySoundZones zone)
  94. {
  95. m_Player.PlaySoundEvent(EPlayerSoundEventID.INJURED_LIGHT);
  96. }
  97. }
  98. //---------------------------
  99. // Server
  100. //---------------------------
  101. class InjurySoundHandlerServer extends InjurySoundHandlerBase
  102. {
  103. }