InfectedSoundEventHandler.c
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
}
}