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:
Sat Jun 08 14:40:47 2013 +0000
Revision:
5:0b0651ac7832
Parent:
4:673eb9735d44
Now got first real level starting and player can be controlled using joysticks. No bullets, enemies, humans or sound yet.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RichardE 4:673eb9735d44 1 /*
RichardE 4:673eb9735d44 2 * SOURCE FILE : BulletManager.cpp
RichardE 4:673eb9735d44 3 *
RichardE 4:673eb9735d44 4 * Responsible for managing a collection of bullets.
RichardE 4:673eb9735d44 5 *
RichardE 4:673eb9735d44 6 */
RichardE 4:673eb9735d44 7
RichardE 4:673eb9735d44 8 #include "BulletManager.h"
RichardE 5:0b0651ac7832 9 #include "BulletObject.h"
RichardE 5:0b0651ac7832 10 #include "ArenaConst.h"
RichardE 4:673eb9735d44 11 #include "GDExtra.h"
RichardE 4:673eb9735d44 12
RichardE 4:673eb9735d44 13 /***************/
RichardE 4:673eb9735d44 14 /* CONSTRUCTOR */
RichardE 4:673eb9735d44 15 /***************/
RichardE 4:673eb9735d44 16 // Pass number of sprite to use for first bullet.
RichardE 4:673eb9735d44 17 // MaxBullets consequtive sprites will be used for bullets.
RichardE 4:673eb9735d44 18 BulletManager::BulletManager( UInt8 firstSpriteNumber ) {
RichardE 4:673eb9735d44 19 // Initialise aspects of bullets that never change.
RichardE 4:673eb9735d44 20 BulletObject *bullet;
RichardE 4:673eb9735d44 21 for( UInt8 b = 0; b < MaxBullets; ++b ) {
RichardE 4:673eb9735d44 22 bullet = bullets + b;
RichardE 4:673eb9735d44 23 bullet->SpriteNumber = firstSpriteNumber + b;
RichardE 4:673eb9735d44 24 bullet->PixelWidth = 6;
RichardE 4:673eb9735d44 25 bullet->PixelHeight = 6;
RichardE 4:673eb9735d44 26 bullet->Bounds = &ArenaRectangle;
RichardE 5:0b0651ac7832 27 // Make sure entry in bulletPointers array is NULL.
RichardE 5:0b0651ac7832 28 bulletPointers[ b ] = (GameObject*)NULL;
RichardE 4:673eb9735d44 29 }
RichardE 4:673eb9735d44 30 }
RichardE 4:673eb9735d44 31
RichardE 4:673eb9735d44 32 /**********************/
RichardE 4:673eb9735d44 33 /* START A BULLET OFF */
RichardE 4:673eb9735d44 34 /**********************/
RichardE 4:673eb9735d44 35 // Pass start coordinates in x and y (NOT pixel coordinates).
RichardE 4:673eb9735d44 36 // Pass bullet velocities in hv and vv (NOT pixel velocities).
RichardE 4:673eb9735d44 37 // Returns true if bullet was started successfully.
RichardE 4:673eb9735d44 38 bool BulletManager::StartBullet( Int16 x, Int16 y, Int16 hv, Int16 vv ) {
RichardE 4:673eb9735d44 39 // Try and find an unused bullet slot.
RichardE 4:673eb9735d44 40 UInt8 index;
RichardE 4:673eb9735d44 41 if( GameObject::FindUnusedObject( bulletPointers, MaxBullets, &index ) ) {
RichardE 4:673eb9735d44 42 // Found a free bullet slot. Point to entry in bullets array.
RichardE 4:673eb9735d44 43 BulletObject *bullet = bullets + index;
RichardE 4:673eb9735d44 44 bulletPointers[ index ] = bullet;
RichardE 4:673eb9735d44 45 bullet->Start( x, y, hv, vv );
RichardE 4:673eb9735d44 46 return true;
RichardE 4:673eb9735d44 47 }
RichardE 4:673eb9735d44 48 else {
RichardE 4:673eb9735d44 49 // No free bullet slots.
RichardE 4:673eb9735d44 50 return false;
RichardE 4:673eb9735d44 51 }
RichardE 4:673eb9735d44 52 }
RichardE 4:673eb9735d44 53
RichardE 4:673eb9735d44 54 /************************/
RichardE 4:673eb9735d44 55 /* KILL A SINGLE BULLET */
RichardE 4:673eb9735d44 56 /************************/
RichardE 5:0b0651ac7832 57 // Pass pointer to Gameduino that displays bullets in gd.
RichardE 4:673eb9735d44 58 // Pass index of bullet in b.
RichardE 5:0b0651ac7832 59 void BulletManager::KillBullet( Gameduino *gd, UInt8 b ) {
RichardE 4:673eb9735d44 60 GameObject *bullet = bulletPointers[ b ];
RichardE 4:673eb9735d44 61 if( bullet != (GameObject*)NULL ) {
RichardE 4:673eb9735d44 62 bulletPointers[ b ] = (BulletObject*)NULL;
RichardE 4:673eb9735d44 63 // Hide bullet sprite by setting y coordinate to 400.
RichardE 5:0b0651ac7832 64 GDExtra::HideSprite( gd, bullet->SpriteNumber );
RichardE 4:673eb9735d44 65 }
RichardE 4:673eb9735d44 66 }
RichardE 4:673eb9735d44 67
RichardE 4:673eb9735d44 68 /********************/
RichardE 4:673eb9735d44 69 /* KILL ALL BULLETS */
RichardE 4:673eb9735d44 70 /********************/
RichardE 5:0b0651ac7832 71 // Pass pointer to Gameduino that displays bullets in gd.
RichardE 5:0b0651ac7832 72 void BulletManager::KillAllBullets( Gameduino *gd ) {
RichardE 4:673eb9735d44 73 for( UInt8 b = 0; b < MaxBullets; ++b ) {
RichardE 5:0b0651ac7832 74 KillBullet( gd, b );
RichardE 4:673eb9735d44 75 }
RichardE 4:673eb9735d44 76 }