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

BulletManager.cpp

Committer:
RichardE
Date:
2013-06-08
Revision:
5:0b0651ac7832
Parent:
4:673eb9735d44

File content as of revision 5:0b0651ac7832:

/*
 * SOURCE FILE : BulletManager.cpp
 *
 * Responsible for managing a collection of bullets.
 *
 */

#include "BulletManager.h"
#include "BulletObject.h"
#include "ArenaConst.h"
#include "GDExtra.h"

/***************/
/* CONSTRUCTOR */
/***************/
// Pass number of sprite to use for first bullet.
// MaxBullets consequtive sprites will be used for bullets.
BulletManager::BulletManager( UInt8 firstSpriteNumber ) {
  // Initialise aspects of bullets that never change.
  BulletObject *bullet;
  for( UInt8 b = 0; b < MaxBullets; ++b ) {
    bullet = bullets + b;
    bullet->SpriteNumber = firstSpriteNumber + b;
    bullet->PixelWidth = 6;
    bullet->PixelHeight = 6;
    bullet->Bounds = &ArenaRectangle;
    // Make sure entry in bulletPointers array is NULL.
    bulletPointers[ b ] = (GameObject*)NULL;
  }
}

/**********************/
/* START A BULLET OFF */
/**********************/
// Pass start coordinates in x and y (NOT pixel coordinates).
// Pass bullet velocities in hv and vv (NOT pixel velocities).
// Returns true if bullet was started successfully.
bool BulletManager::StartBullet( Int16 x, Int16 y, Int16 hv, Int16 vv ) {
  // Try and find an unused bullet slot.
  UInt8 index;
  if( GameObject::FindUnusedObject( bulletPointers, MaxBullets, &index ) ) {
    // Found a free bullet slot. Point to entry in bullets array.
    BulletObject *bullet = bullets + index;
    bulletPointers[ index ] = bullet;
    bullet->Start( x, y, hv, vv );
    return true;
  }
  else {
    // No free bullet slots.
    return false;
  }
}

/************************/
/* KILL A SINGLE BULLET */
/************************/
// Pass pointer to Gameduino that displays bullets in gd.
// Pass index of bullet in b.
void BulletManager::KillBullet( Gameduino *gd, UInt8 b ) {
    GameObject *bullet = bulletPointers[ b ];
    if( bullet != (GameObject*)NULL ) {
      bulletPointers[ b ] = (BulletObject*)NULL;
      // Hide bullet sprite by setting y coordinate to 400.
      GDExtra::HideSprite( gd, bullet->SpriteNumber );
    }
}

/********************/
/* KILL ALL BULLETS */
/********************/
// Pass pointer to Gameduino that displays bullets in gd.
void BulletManager::KillAllBullets( Gameduino *gd ) {
  for( UInt8 b = 0; b < MaxBullets; ++b ) {
    KillBullet( gd, b );
  }
}