123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- const float SOUNDS_HEARING_DISTANCE = 50;
- enum eSoundHandlers
- {
- STAMINA,
- HUNGER,
- INJURY,
- THIRST,
- //FREEZING,
-
- //------
- // add stuff above !
- //------
- COUNT
- }
- class PlayerSoundManagerBase
- {
- PlayerBase m_Player;
-
- const int MAX_HANDLERS_COUNT = eSoundHandlers.COUNT;
- ref SoundHandlerBase m_Handlers[MAX_HANDLERS_COUNT];
-
- void PlayerSoundManagerBase(PlayerBase player)
- {
- m_Player = player;
- Init();
- }
-
- void RegisterHandler(SoundHandlerBase handler)
- {
- int index = handler.GetID();
- m_Handlers[index] = handler;
- }
-
- SoundHandlerBase GetHandler(eSoundHandlers id)
- {
- return m_Handlers[id];
- }
-
- void Init()
- {
-
- }
-
- void Update()
- {
-
- }
-
- }
- class PlayerSoundManagerServer extends PlayerSoundManagerBase
- {
- //------------------------
- // REGISTER HANDLER HERE
- //------------------------
- override void Init()
- {
- RegisterHandler(new StaminaSoundHandlerServer(m_Player));
- RegisterHandler(new HungerSoundHandlerServer(m_Player));
- RegisterHandler(new ThirstSoundHandlerServer(m_Player));
- RegisterHandler(new InjurySoundHandlerServer(m_Player));
- }
-
- override void Update()
- {
- if( m_Player.IsUnconscious() )
- {
- return;
- }
-
- for(int i = 0; i < (MAX_HANDLERS_COUNT - 1); i++)
- {
- m_Handlers[i].Update();
- }
- }
- }
- class PlayerSoundManagerClient extends PlayerSoundManagerBase
- {
- ref Timer m_ClientCharacterTick = new Timer;
- ref Timer m_ClientCharacterDistanceCheck = new Timer;
- bool m_UpdateTimerRunning;
- //------------------------
- // REGISTER HANDLER HERE
- //------------------------
- override void Init()
- {
- RegisterHandler(new StaminaSoundHandlerClient(m_Player));
- RegisterHandler(new HungerSoundHandlerClient(m_Player));
- RegisterHandler(new ThirstSoundHandlerClient(m_Player));
- RegisterHandler(new InjurySoundHandlerClient(m_Player));
- //RegisterHandler(new FreezingSoundHandlerClient(m_Player));
- }
-
- void PlayerSoundManagerClient(PlayerBase player)
- {
-
- if( !GetGame().IsDedicatedServer() )
- {
- m_ClientCharacterDistanceCheck.Run(2, this, "CheckAllowUpdate", null, true);
- }
- }
-
- void SetAllowUpdate(bool enable)
- {
- if( enable )
- {
- m_UpdateTimerRunning = true;
- m_ClientCharacterTick.Run(0.03, this, "Update", null, true);
- }
- else
- {
- m_UpdateTimerRunning = false;
- m_ClientCharacterTick.Stop();
- }
- }
-
- override void Update()
- {
- if( !m_Player.IsAlive() )
- {
- SetAllowUpdate(false);
- return;
- }
- #ifndef NO_GUI
- for(int i = 0; i < MAX_HANDLERS_COUNT; i++)
- {
- m_Handlers[i].Update();
- }
- #endif
- }
-
- void CheckAllowUpdate()
- {
- if( GetGame().GetPlayer() )
- {
- bool is_at_hearing_distance = vector.Distance(GetGame().GetPlayer().GetPosition(), m_Player.GetPosition()) < SOUNDS_HEARING_DISTANCE;
-
- if( m_UpdateTimerRunning && !is_at_hearing_distance )
- {
- SetAllowUpdate(false);
- }
- else if( !m_UpdateTimerRunning && is_at_hearing_distance )
- {
- SetAllowUpdate(true);
- }
- //PrintString("distance:" + vector.Distance(GetGame().GetPlayer().GetPosition(), m_Player.GetPosition()).ToString());
- }
- }
- }
|