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

BulletVelocities.h

Committer:
RichardE
Date:
2013-06-17
Revision:
18:70190f956a24
Parent:
4:673eb9735d44

File content as of revision 18:70190f956a24:

/*
 * SOURCE FILE : BulletVelocities.h
 *
 * Converts from set of joystick inputs to horizontal and vertical velocities.
 *
 */

#ifndef BulletVelocitiesIncluded
  
  #define BulletVelocitiesIncluded

  #include "Int16Pair.h"
  
  class BulletVelocities {
  
  public :

    /***************/
    /* CONSTRUCTOR */
    /***************/
    // Pass velocity for a horizontally moving bullet in h.
    // Pass velocity for a vertically moving bullet in v.
    BulletVelocities( Int16 h, Int16 v ) {
      // Calculate velocities used on the diagonal.
      // This is really doing hd = h * cos( 45 degrees ) and
      // vd = v * sin( 45 degrees ).
      Int16 hd = (Int16)floor( (double)h * 0.707 + 0.5 );
      Int16 vd = (Int16)floor( (double)v * 0.707 + 0.5 );
      // Initialise the table of velocities.
      Int16Pair *ptr = pairs;
      // No joystick contacts closed. Index 0.
      ptr->X = 0;
      ptr->Y = 0;
      ptr++;
      // Joystick up. Index 1
      ptr->X = 0;
      ptr->Y = -v;
      ptr++;
      // Joystick down. Index 2.
      ptr->X = 0;
      ptr->Y = v;
      ptr++;
      // Joystick up and down (impossible). Index 3.
      ptr->X = 0;
      ptr->Y = v;
      ptr++;
      // Joystick left. Index 4.
      ptr->X = -h;
      ptr->Y = 0;
      ptr++;
      // Joystick left and up. Index 5.
      ptr->X = -hd;
      ptr->Y = -vd;
      ptr++;
      // Joystick left and down. Index 6.
      ptr->X = -hd;
      ptr->Y = vd;
      ptr++;
      // Joystick up, down and left (impossible). Index 7.
      ptr->X = 0;
      ptr->Y = v;
      ptr++;
      // Joystick right. Index 8.
      ptr->X = h;
      ptr->Y = 0;
      ptr++;
      // Joystick right and up. Index 9.
      ptr->X = hd;
      ptr->Y = -vd;
      ptr++;
      // Joystick right and down. Index 10.
      ptr->X = hd;
      ptr->Y = vd;
      ptr++;
      // Joystick up, down and right (impossible). Index 11.
      ptr->X = 0;
      ptr->Y = v;
      ptr++;
      // Joystick left and right (impossible). Index 12.
      ptr->X = 0;
      ptr->Y = v;
      ptr++;
      // Joystick up, left and right (impossible). Index 13.
      ptr->X = 0;
      ptr->Y = v;
      ptr++;
      // Joystick down, left and right (impossible) Index 14.
      ptr->X = 0;
      ptr->Y = v;
      ptr++;
      // Joystick up, down, left and right (impossible). Index 15.
      ptr->X = 0;
      ptr->Y = v;
      ptr++;
    }

    /*******************************************************/
    /* GET VELOCITIES FOR A COMBINATION OF JOYSTICK INPUTS */
    /*******************************************************/
    // Pass a map containing joystick inputs where a set bit indicates a closed contact.
    // Bits must be ordered as follows :
    // Bit 0 = Up.
    // Bit 1 = Down.
    // Bit 2 = Left.
    // Bit 3 = Right.
    // Remaining bits are ignored.
    const Int16Pair *GetVelocities( UInt8 joyMap ) const {
      return pairs + ( joyMap & 0x0F );
    }
    
  private :

    // Horizontal and vertical velocities for each combination of joystick inputs.    
    Int16Pair pairs[ 16 ];
    
  };
  
#endif

/* END of BulletVelocities.h */