infectedsoundeventhandler.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. enum EInfectedSoundEventID
  2. {
  3. MINDSTATE_CALM_IDLE = 1,
  4. MINDSTATE_CALM_MOVE,
  5. MINDSTATE_DISTURBED_IDLE,
  6. //MINDSTATE_CHASE_IDLE,
  7. MINDSTATE_CHASE_MOVE,
  8. MINDSTATE_ALERTED_IDLE,
  9. MINDSTATE_ALERTED_MOVE,
  10. //--------------
  11. ENUM_COUNT,
  12. }
  13. class InfectedSoundEventHandler extends SoundEventHandler
  14. {
  15. const int SOUND_EVENTS_MAX = EInfectedSoundEventID.ENUM_COUNT;
  16. static ref InfectedSoundEventBase m_AvailableStates[SOUND_EVENTS_MAX];
  17. ref InfectedSoundEventBase m_CurrentState;
  18. ZombieBase m_Infected;
  19. void InfectedSoundEventHandler(ZombieBase pInfected)
  20. {
  21. m_Infected = pInfected;
  22. m_AvailableStates[EInfectedSoundEventID.MINDSTATE_CALM_IDLE] = new CalmIdleSoundEvent();
  23. m_AvailableStates[EInfectedSoundEventID.MINDSTATE_CALM_MOVE] = new CalmMoveSoundEvent();
  24. m_AvailableStates[EInfectedSoundEventID.MINDSTATE_DISTURBED_IDLE] = new DisturbedIdleSoundEvent();
  25. //m_AvailableStates[EInfectedSoundEventID.MINDSTATE_CHASE_IDLE] = new ChaseIdleSoundEvent();
  26. m_AvailableStates[EInfectedSoundEventID.MINDSTATE_CHASE_MOVE] = new ChaseMoveSoundEvent();
  27. m_AvailableStates[EInfectedSoundEventID.MINDSTATE_ALERTED_IDLE] = new AlertedIdleSoundEvent();
  28. m_AvailableStates[EInfectedSoundEventID.MINDSTATE_ALERTED_MOVE] = new AlertedMoveSoundEvent();
  29. }
  30. override static int GetSoundEventType(int id)
  31. {
  32. return m_AvailableStates[id].GetSoundEventType();
  33. }
  34. override int GetCurrentStateEventID()
  35. {
  36. if (m_CurrentState)
  37. {
  38. return m_CurrentState.GetSoundEventID();
  39. }
  40. return -1;
  41. }
  42. override int GetCurrentStateEventType()
  43. {
  44. if (m_CurrentState)
  45. {
  46. return m_CurrentState.GetSoundEventType();
  47. }
  48. return -1;
  49. }
  50. void Stop()
  51. {
  52. if ( m_CurrentState )
  53. {
  54. m_CurrentState.Stop();
  55. }
  56. }
  57. void SoftStop()
  58. {
  59. if ( m_CurrentState )
  60. {
  61. m_CurrentState.SoftStop();
  62. }
  63. }
  64. bool IsPlaying()
  65. {
  66. if ( m_CurrentState && m_CurrentState.IsSoundCallbackExist() )
  67. {
  68. return true;
  69. }
  70. return false;
  71. }
  72. override bool PlayRequest(int id, bool sent_from_server = false)
  73. {
  74. InfectedSoundEventBase requested_state = m_AvailableStates[id];
  75. if ( !requested_state.CanPlay() )
  76. {
  77. return false;
  78. }
  79. if (m_CurrentState)
  80. {
  81. if (!m_CurrentState.IsSoundCallbackExist())
  82. {
  83. //Print("Missing callback - cleanup and continue");
  84. delete m_CurrentState;
  85. }
  86. //! same sound event - skip
  87. if (GetCurrentStateEventID() == id)
  88. {
  89. //Print("Same ID - skipping");
  90. return false;
  91. }
  92. }
  93. if (m_CurrentState)
  94. {
  95. m_CurrentState.SoftStop();
  96. m_CurrentState = InfectedSoundEventBase.Cast(requested_state.ClassName().ToType().Spawn());
  97. m_CurrentState.Init(m_Infected);
  98. m_CurrentState.Play();
  99. return true;
  100. }
  101. else
  102. {
  103. m_CurrentState = InfectedSoundEventBase.Cast(requested_state.ClassName().ToType().Spawn());
  104. m_CurrentState.Init(m_Infected);
  105. m_CurrentState.Play();
  106. return true;
  107. }
  108. return false;//should never get here
  109. }
  110. }