123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- enum EInfectedSoundEventID
- {
- MINDSTATE_CALM_IDLE = 1,
- MINDSTATE_CALM_MOVE,
- MINDSTATE_DISTURBED_IDLE,
- //MINDSTATE_CHASE_IDLE,
- MINDSTATE_CHASE_MOVE,
- MINDSTATE_ALERTED_IDLE,
- MINDSTATE_ALERTED_MOVE,
- //--------------
- ENUM_COUNT,
- }
- class InfectedSoundEventHandler extends SoundEventHandler
- {
- const int SOUND_EVENTS_MAX = EInfectedSoundEventID.ENUM_COUNT;
- static ref InfectedSoundEventBase m_AvailableStates[SOUND_EVENTS_MAX];
- ref InfectedSoundEventBase m_CurrentState;
- ZombieBase m_Infected;
-
- void InfectedSoundEventHandler(ZombieBase pInfected)
- {
- m_Infected = pInfected;
- m_AvailableStates[EInfectedSoundEventID.MINDSTATE_CALM_IDLE] = new CalmIdleSoundEvent();
- m_AvailableStates[EInfectedSoundEventID.MINDSTATE_CALM_MOVE] = new CalmMoveSoundEvent();
- m_AvailableStates[EInfectedSoundEventID.MINDSTATE_DISTURBED_IDLE] = new DisturbedIdleSoundEvent();
- //m_AvailableStates[EInfectedSoundEventID.MINDSTATE_CHASE_IDLE] = new ChaseIdleSoundEvent();
- m_AvailableStates[EInfectedSoundEventID.MINDSTATE_CHASE_MOVE] = new ChaseMoveSoundEvent();
- m_AvailableStates[EInfectedSoundEventID.MINDSTATE_ALERTED_IDLE] = new AlertedIdleSoundEvent();
- m_AvailableStates[EInfectedSoundEventID.MINDSTATE_ALERTED_MOVE] = new AlertedMoveSoundEvent();
- }
-
- override static int GetSoundEventType(int id)
- {
- return m_AvailableStates[id].GetSoundEventType();
- }
-
- override int GetCurrentStateEventID()
- {
- if (m_CurrentState)
- {
- return m_CurrentState.GetSoundEventID();
- }
- return -1;
- }
-
- override int GetCurrentStateEventType()
- {
- if (m_CurrentState)
- {
- return m_CurrentState.GetSoundEventType();
- }
- return -1;
- }
-
- void Stop()
- {
- if ( m_CurrentState )
- {
- m_CurrentState.Stop();
- }
- }
-
- void SoftStop()
- {
- if ( m_CurrentState )
- {
- m_CurrentState.SoftStop();
- }
- }
-
- bool IsPlaying()
- {
- if ( m_CurrentState && m_CurrentState.IsSoundCallbackExist() )
- {
- return true;
- }
- return false;
- }
-
- override bool PlayRequest(int id, bool sent_from_server = false)
- {
- InfectedSoundEventBase requested_state = m_AvailableStates[id];
- if ( !requested_state.CanPlay() )
- {
- return false;
- }
-
- if (m_CurrentState)
- {
- if (!m_CurrentState.IsSoundCallbackExist())
- {
- //Print("Missing callback - cleanup and continue");
- delete m_CurrentState;
- }
-
- //! same sound event - skip
- if (GetCurrentStateEventID() == id)
- {
- //Print("Same ID - skipping");
- return false;
- }
- }
-
- if (m_CurrentState)
- {
- m_CurrentState.SoftStop();
- m_CurrentState = InfectedSoundEventBase.Cast(requested_state.ClassName().ToType().Spawn());
- m_CurrentState.Init(m_Infected);
- m_CurrentState.Play();
- return true;
- }
- else
- {
- m_CurrentState = InfectedSoundEventBase.Cast(requested_state.ClassName().ToType().Spawn());
- m_CurrentState.Init(m_Infected);
- m_CurrentState.Play();
- return true;
- }
- return false;//should never get here
- }
- }
|