1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
/* Starshatter: The Open Source Project
Copyright (c) 2021-2022, 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 <mutex>
#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<Text> menu_tracks;
List<Text> intro_tracks;
List<Text> brief_tracks;
List<Text> debrief_tracks;
List<Text> promote_tracks;
List<Text> flight_tracks;
List<Text> combat_tracks;
List<Text> launch_tracks;
List<Text> recovery_tracks;
List<Text> victory_tracks;
List<Text> defeat_tracks;
List<Text> credit_tracks;
bool no_music;
HANDLE hproc;
std::mutex sync;
};
#endif // MusicDirector_h
|