/* Starshatter: The Open Source Project Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors Copyright (c) 1997-2006, Destroyer Studios LLC. AUTHOR: John DiCamillo OVERVIEW ======== Music Director class to manage selection, setup, and playback of background music tracks for both menu and game modes */ #ifndef MusicDirector_h #define MusicDirector_h #include #include "Types.h" #include "List.h" #include "Text.h" // +-------------------------------------------------------------------+ class MusicTrack; // +-------------------------------------------------------------------+ class MusicDirector { public: enum MODES { NONE, // menu modes: MENU, INTRO, BRIEFING, DEBRIEFING, PROMOTION, VICTORY, DEFEAT, CREDITS, // in game modes: FLIGHT, COMBAT, LAUNCH, RECOVERY, // special modes: SHUTDOWN }; enum TRANSITIONS { CUT, FADE_OUT, FADE_IN, FADE_BOTH, CROSS_FADE }; MusicDirector(); ~MusicDirector(); // Operations: void ExecFrame(); void ScanTracks(); int CheckMode(int mode); int GetMode() const { return mode; } static void Initialize(); static void Close(); static MusicDirector* GetInstance(); static void SetMode(int mode); static const char* GetModeName(int mode); static bool IsNoMusic(); protected: void StartThread(); void StopThread(); void GetNextTrack(int index); void ShuffleTracks(); int mode; int transition; MusicTrack* track; MusicTrack* next_track; List menu_tracks; List intro_tracks; List brief_tracks; List debrief_tracks; List promote_tracks; List flight_tracks; List combat_tracks; List launch_tracks; List recovery_tracks; List victory_tracks; List defeat_tracks; List credit_tracks; bool no_music; HANDLE hproc; std::mutex sync; }; #endif // MusicDirector_h