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 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199
|
#ifndef JUKE_BOX_H
#define JUKE_BOX_H
#include "Tools.h"
#include "SDLMixerCalls.h"
#define INGAME_MUSIC_TRACKS 4
//#define HIGHSCORE_MUSIC_TRACKS 0
//----------------------------------------------------------------------------
class JukeBox
{
//------------------------------------------------------------------------
class JukeBoxState
{
protected:
JukeBoxState() {}
public:
virtual ~JukeBoxState() {}
//--------------------------------------------------------------------
virtual void enable(JukeBox *jukeBox) = 0;
virtual void disable(JukeBox *jukeBox) = 0;
virtual void playTitleTrack(JukeBox *jukeBox);
virtual void playInGameTrack(JukeBox *jukeBox);
virtual void playHighScore1stEntryTrack(JukeBox *jukeBox);
virtual void playHighScoreOtherEntryTrack(JukeBox *jukeBox);
virtual void playHighScoreNoEntryTrack(JukeBox *jukeBox);
virtual void onStopHook(JukeBox *jukeBox) = 0;
protected:
//--------------------------------------------------------------------
void do_playTitleTrack(JukeBox *jukeBox);
void do_playInGameTrack(JukeBox *jukeBox);
void do_playHighScore1stEntryTrack(JukeBox *jukeBox);
void do_playHighScoreOtherEntryTrack(JukeBox *jukeBox);
void do_playHighScoreNoEntryTrack(JukeBox *jukeBox);
};
//------------------------------------------------------------------------
class Stop;
friend class Stop;
class Stop : public JukeBoxState
{
STATE_OBJECT(Stop);
public:
Stop() {}
~Stop() {}
//--------------------------------------------------------------------
void enable(JukeBox *jukeBox);
void disable(JukeBox *jukeBox);
void onStopHook(JukeBox *jukeBox);
};
//------------------------------------------------------------------------
class Title;
friend class Title;
class Title : public JukeBoxState
{
STATE_OBJECT(Title);
public:
Title() {}
~Title() {}
//--------------------------------------------------------------------
void enable(JukeBox *jukeBox);
void disable(JukeBox *jukeBox);
void playTitleTrack(JukeBox *jukeBox);
void onStopHook(JukeBox *jukeBox);
};
//------------------------------------------------------------------------
class InGame;
friend class InGame;
class InGame : public JukeBoxState
{
STATE_OBJECT(InGame);
public:
InGame() {}
~InGame() {}
//--------------------------------------------------------------------
void enable(JukeBox *jukeBox);
void disable(JukeBox *jukeBox);
void playInGameTrack(JukeBox *jukeBox);
void onStopHook(JukeBox *jukeBox);
};
//------------------------------------------------------------------------
class HighScore;
friend class HighScore;
class HighScore : public JukeBoxState
{
STATE_OBJECT(HighScore);
public:
HighScore() {}
~HighScore() {}
//--------------------------------------------------------------------
void enable(JukeBox *jukeBox);
void disable(JukeBox *jukeBox);
void playHighScore1stEntryTrack(JukeBox *jukeBox);
void playHighScoreOtherEntryTrack(JukeBox *jukeBox);
void playHighScoreNoEntryTrack(JukeBox *jukeBox);
void onStopHook(JukeBox *jukeBox);
};
public:
//------------------------------------------------------------------------
~JukeBox();
//------------------------------------------------------------------------
static void init();
static void destroy();
static inline JukeBox *getInstance()
{
return sm_instance;
}
//------------------------------------------------------------------------
inline bool isEnabled() const
{
return m_enabled;
}
inline void enable()
{
m_state->enable(this);
m_enabled = true;
}
inline void disable()
{
m_state->disable(this);
m_enabled = false;
}
inline void playTitleTrack()
{
m_state->playTitleTrack(this);
}
inline void playInGameTrack()
{
m_state->playInGameTrack(this);
}
inline void playHighScore1stEntryTrack()
{
m_state->playHighScore1stEntryTrack(this);
}
inline void playHighScoreOtherEntryTrack()
{
m_state->playHighScoreOtherEntryTrack(this);
}
inline void playHighScoreNoEntryTrack()
{
m_state->playHighScoreNoEntryTrack(this);
}
inline void onStopHook()
{
m_state->onStopHook(this);
}
protected:
//------------------------------------------------------------------------
JukeBox();
inline void setState(JukeBoxState *state)
{
m_state = state;
}
static void stopHook();
private:
//------------------------------------------------------------------------
Mix_Music *m_inGameTracks[INGAME_MUSIC_TRACKS];
//Mix_Music *m_highScoreTracks[HIGHSCORE_MUSIC_TRACKS];
bool m_enabled;
/// The current state of the JukeBox.
JukeBoxState *m_state;
static JukeBox *sm_instance;
};
#endif // JUKE_BOX_H
|