Version of Robotron arcade game using LPC1768, a Gameduino shield, a serial EEPROM (for high scores), two microswitch joysticks and two buttons plus a box to put it in. 20 levels of mayhem.

Dependencies:   25LCxxx_SPI CommonTypes Gameduino mbed

Committer:
RichardE
Date:
Mon Jun 17 15:10:43 2013 +0000
Revision:
18:70190f956a24
Parent:
9:fa7e7b37b632
Improved response to button 1 when entering high scores (HighScoreEntry.cpp).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RichardE 9:fa7e7b37b632 1 /*
RichardE 9:fa7e7b37b632 2 * SOURCE FILE : SoundManager.h
RichardE 9:fa7e7b37b632 3 *
RichardE 9:fa7e7b37b632 4 * Responsible for playing simple sounds.
RichardE 9:fa7e7b37b632 5 *
RichardE 9:fa7e7b37b632 6 */
RichardE 9:fa7e7b37b632 7
RichardE 9:fa7e7b37b632 8 #ifndef SoundManagerIncluded
RichardE 9:fa7e7b37b632 9
RichardE 9:fa7e7b37b632 10 #define SoundManagerIncluded
RichardE 9:fa7e7b37b632 11
RichardE 9:fa7e7b37b632 12 #include <stdio.h> // for NULL
RichardE 9:fa7e7b37b632 13 #include "Types.h" // various types
RichardE 9:fa7e7b37b632 14 #include "Gameduino.h" // Gameduino stuff
RichardE 9:fa7e7b37b632 15
RichardE 9:fa7e7b37b632 16 class SoundManager {
RichardE 9:fa7e7b37b632 17
RichardE 9:fa7e7b37b632 18 public :
RichardE 9:fa7e7b37b632 19
RichardE 9:fa7e7b37b632 20 // An instance of this class.
RichardE 9:fa7e7b37b632 21 static SoundManager Instance;
RichardE 9:fa7e7b37b632 22
RichardE 9:fa7e7b37b632 23 /***************/
RichardE 9:fa7e7b37b632 24 /* CONSTRUCTOR */
RichardE 9:fa7e7b37b632 25 /***************/
RichardE 9:fa7e7b37b632 26 SoundManager();
RichardE 9:fa7e7b37b632 27
RichardE 9:fa7e7b37b632 28 /*******************************************/
RichardE 9:fa7e7b37b632 29 /* SET GAMEDUINO THAT WILL PLAY THE SOUNDS */
RichardE 9:fa7e7b37b632 30 /*******************************************/
RichardE 9:fa7e7b37b632 31 // Pass pointer to a Gameduino which will play the sounds.
RichardE 9:fa7e7b37b632 32 // You must call this before using other routines.
RichardE 9:fa7e7b37b632 33 void SetGameduino( Gameduino *gameduino ) {
RichardE 9:fa7e7b37b632 34 gd = gameduino;
RichardE 9:fa7e7b37b632 35 }
RichardE 9:fa7e7b37b632 36
RichardE 9:fa7e7b37b632 37 /************************/
RichardE 9:fa7e7b37b632 38 /* TRY AND PLAY A SOUND */
RichardE 9:fa7e7b37b632 39 /************************/
RichardE 9:fa7e7b37b632 40 // Pass address of tune in program memory in tuneAddress.
RichardE 9:fa7e7b37b632 41 // Pass bias to apply to left speaker amplitude in leftAmpBias.
RichardE 9:fa7e7b37b632 42 // Pass bias to apply to right speaker amplitude in leftAmpBias.
RichardE 9:fa7e7b37b632 43 // Returns true if sound was started, false if no sound slots free.
RichardE 9:fa7e7b37b632 44 bool PlaySound( const UInt8 *tuneAddress, UInt8 leftAmpBias, UInt8 rightAmpBias );
RichardE 9:fa7e7b37b632 45
RichardE 9:fa7e7b37b632 46 /****************************/
RichardE 9:fa7e7b37b632 47 /* UPDATE PLAYING OF SOUNDS */
RichardE 9:fa7e7b37b632 48 /****************************/
RichardE 9:fa7e7b37b632 49 // Should be called at regular intervals.
RichardE 9:fa7e7b37b632 50 void Update( void );
RichardE 9:fa7e7b37b632 51
RichardE 9:fa7e7b37b632 52 /**********************************/
RichardE 9:fa7e7b37b632 53 /* COUNT NUMBER OF SOUNDS PLAYING */
RichardE 9:fa7e7b37b632 54 /**********************************/
RichardE 9:fa7e7b37b632 55 // Returns number of sounds playing.
RichardE 9:fa7e7b37b632 56 UInt8 CountSoundsPlaying( void );
RichardE 9:fa7e7b37b632 57
RichardE 9:fa7e7b37b632 58 /******************************/
RichardE 9:fa7e7b37b632 59 /* SILENCE ALL SOUNDS PLAYING */
RichardE 9:fa7e7b37b632 60 /******************************/
RichardE 9:fa7e7b37b632 61 void SilenceAll( void );
RichardE 9:fa7e7b37b632 62
RichardE 9:fa7e7b37b632 63 private :
RichardE 9:fa7e7b37b632 64
RichardE 9:fa7e7b37b632 65 enum {
RichardE 9:fa7e7b37b632 66 FirstVoice = 0, // First Gameduino voice channel used
RichardE 9:fa7e7b37b632 67 VoiceCount = 8, // Number of voice channels used
RichardE 9:fa7e7b37b632 68 };
RichardE 9:fa7e7b37b632 69
RichardE 9:fa7e7b37b632 70 // Record for tune associated with each voice used.
RichardE 9:fa7e7b37b632 71 class TuneRecord {
RichardE 9:fa7e7b37b632 72 public :
RichardE 9:fa7e7b37b632 73
RichardE 9:fa7e7b37b632 74 TuneRecord() :
RichardE 9:fa7e7b37b632 75 TuneAddress( (UInt8*)NULL )
RichardE 9:fa7e7b37b632 76 {
RichardE 9:fa7e7b37b632 77 }
RichardE 9:fa7e7b37b632 78
RichardE 9:fa7e7b37b632 79 Gameduino::WaveForm TuneWaveform;
RichardE 9:fa7e7b37b632 80 UInt8 LeftAmpBias, RightAmpBias;
RichardE 9:fa7e7b37b632 81 const UInt8 *TuneAddress;
RichardE 9:fa7e7b37b632 82 UInt8 Countdown;
RichardE 9:fa7e7b37b632 83
RichardE 9:fa7e7b37b632 84 };
RichardE 9:fa7e7b37b632 85
RichardE 9:fa7e7b37b632 86 // Records used to step through each tune.
RichardE 9:fa7e7b37b632 87 // A value of zero in TuneAddress field indicates an unused slot.
RichardE 9:fa7e7b37b632 88 TuneRecord tuneRecords[ VoiceCount ];
RichardE 9:fa7e7b37b632 89
RichardE 9:fa7e7b37b632 90 // Gameduino that plays the sounds.
RichardE 9:fa7e7b37b632 91 Gameduino *gd;
RichardE 9:fa7e7b37b632 92
RichardE 9:fa7e7b37b632 93 /*****************************/
RichardE 9:fa7e7b37b632 94 /* UPDATE A SINGLE TUNE SLOT */
RichardE 9:fa7e7b37b632 95 /*****************************/
RichardE 9:fa7e7b37b632 96 // Do NOT call with a record containing zero in TuneAddress (a free slot).
RichardE 9:fa7e7b37b632 97 void UpdateTuneSection( UInt8 voiceNum, TuneRecord *rec );
RichardE 9:fa7e7b37b632 98
RichardE 9:fa7e7b37b632 99 };
RichardE 9:fa7e7b37b632 100
RichardE 9:fa7e7b37b632 101 #endif
RichardE 9:fa7e7b37b632 102
RichardE 9:fa7e7b37b632 103 /* END of SoundManager.h */
RichardE 9:fa7e7b37b632 104