summaryrefslogtreecommitdiffhomepage
path: root/Stars45/MusicDirector.h
blob: 6299d5b1e2bbdeffd386b659c0d706e399eb25a4 (plain)
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
/*  Project Starshatter 4.5
    Destroyer Studios LLC
    Copyright © 1997-2004. All Rights Reserved.

    SUBSYSTEM:    Stars.exe
    FILE:         MusicDirector.h
    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 "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;
   ThreadSync        sync;
};

#endif MusicDirector_h