summaryrefslogtreecommitdiffstats
path: root/game/code/sound/soundrenderer/playermanager.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/code/sound/soundrenderer/playermanager.h')
-rw-r--r--game/code/sound/soundrenderer/playermanager.h185
1 files changed, 185 insertions, 0 deletions
diff --git a/game/code/sound/soundrenderer/playermanager.h b/game/code/sound/soundrenderer/playermanager.h
new file mode 100644
index 0000000..09fa4eb
--- /dev/null
+++ b/game/code/sound/soundrenderer/playermanager.h
@@ -0,0 +1,185 @@
+//=============================================================================
+// Copyright (C) 2001 Radical Entertainment Ltd. All rights reserved.
+//
+// File: playermanager.h
+//
+// Subsystem: Dark Angel - Player Manager System
+//
+// Description: Description of the DA sound player manager
+//
+// Revisions:
+// + Created October 16, 2001 -- breimer
+//
+//=============================================================================
+
+#ifndef _PLAYERMANAGER_HPP
+#define _PLAYERMANAGER_HPP
+
+//=============================================================================
+// Included Files
+//=============================================================================
+
+#include <radobject.hpp>
+
+#include <sound/soundrenderer/soundsystem.h>
+#include <sound/soundrenderer/idasoundtuner.h>
+#include <sound/soundrenderer/idasoundresource.h>
+#include <sound/soundrenderer/musicsoundplayer.h>
+#include <radsound.hpp>
+
+//=============================================================================
+// Global namespace forward declarations
+//=============================================================================
+
+struct IRadObjectList;
+
+class Fader;
+
+//=============================================================================
+// Namespace
+//=============================================================================
+
+namespace Sound {
+
+//=============================================================================
+// Prototypes
+//=============================================================================
+
+class daSoundPlayerGroupWiring;
+class daSoundPlayerManager;
+
+//=============================================================================
+// Forward declarations
+//=============================================================================
+
+class daSoundClipStreamPlayer;
+
+//=============================================================================
+// Class Declarations
+//=============================================================================
+
+//
+// This class is created for our asynchronous fades
+//
+
+class daSoundAsyncFadeCallback : public radObject
+{
+public:
+ IMPLEMENT_BASEOBJECT( "daSoundAsyncFadeCallback" )
+
+ daSoundAsyncFadeCallback( );
+ virtual ~daSoundAsyncFadeCallback( );
+
+ void SetAction( int action ) { m_Action = action; }
+ int GetAction( void ) { return m_Action; }
+
+ void SetPlayerManager( daSoundPlayerManager* pPlayerManager );
+ daSoundPlayerManager* GetPlayerManager( void );
+
+ void SetCallback( IDaSoundFadeState* pCallback, void* pUserData );
+ void GetCallback( IDaSoundFadeState** ppCallback, void** ppUserData );
+
+private:
+
+ int m_Action;
+ daSoundPlayerManager* m_pPlayerManager;
+ IDaSoundFadeState* m_pCallback;
+ void* m_pUserData;
+};
+
+//
+// The player manager is responsible for creating and managing daSoundClipStreamPlayer
+// objects. These objects allow the user to play sound resources.
+//
+class daSoundPlayerManager : public IDaSoundFadeState,
+ public radRefCount
+{
+public:
+ IMPLEMENT_REFCOUNTED_NOSIZE( "daSoundPlayerManager" );
+
+ //
+ // Constructor and destructor
+ //
+ daSoundPlayerManager( );
+ virtual ~daSoundPlayerManager( );
+
+ inline daSoundPlayerManager * GetInstance( void );
+
+ bool FindFreeClipPlayer(
+ daSoundClipStreamPlayer** ppPlayer,
+ IDaSoundResource* pResource );
+ bool FindFreeStreamPlayer(
+ daSoundClipStreamPlayer** ppPlayer,
+ IDaSoundResource* pResource );
+
+ unsigned int GetNumUsedClipPlayers();
+ unsigned int GetNumUsedStreamPlayers();
+ void Initialize( void );
+ void UglyHackPostInitialize( IDaSoundTuner* pTuner );
+ void ServiceOncePerFrame( void );
+ unsigned int GetObjectSize( void );
+ void CaptureFreePlayer(
+ daSoundClipStreamPlayer** ppPlayer,
+ IDaSoundResource* pResource,
+ bool positional );
+
+ void PausePlayers ( );
+ void PausePlayersWithFade(
+ IDaSoundFadeState* pCallback,
+ void* pUserData );
+
+ void ContinuePlayers ( );
+
+ void ContinuePlayersWithFade(
+ IDaSoundFadeState* pCallback,
+ void* pUserData );
+
+ void CancelPlayers ( );
+
+ bool AreAllPlayersStopped();
+
+ //
+ // Volume controls
+ //
+ void PlayerVolumeChange( daSoundGroup soundGroup, daTrimValue trim );
+ void PlayerFaderVolumeChange( daSoundGroup soundGroup, daTrimValue trim );
+
+ void Render( void );
+
+protected:
+ // When a fade is done go here and call our callback
+ enum FadeTypesEnum {
+ OnFade_PausePlayers,
+ OnFade_ContinuePlayers,
+ OnFade_CancelPlayers
+ };
+ void OnFadeDone( void* pUserData );
+
+private:
+
+ bool FindFreePlayer( daSoundClipStreamPlayer** ppPlayerArray, unsigned int numPlayers, daSoundClipStreamPlayer ** ppPlayer );
+
+ MusicSoundPlayer* m_pMusicPlayer;
+ MusicSoundPlayer* m_pAmbiencePlayer;
+
+ //
+ // The ingame faders
+ //
+ Fader* m_pIngameFadeIn;
+ Fader* m_pIngameFadeOut;
+
+ bool m_Initialized;
+
+ static daSoundPlayerManager * s_pInstance;
+
+};
+
+inline daSoundPlayerManager * daSoundPlayerManager::GetInstance( void )
+{
+ return s_pInstance;
+}
+
+} // Sound Namespace
+#endif //_PLAYERMANAGER_HPP
+
+