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

HighScoreEntry.cpp

Committer:
RichardE
Date:
2013-06-04
Revision:
0:5fa232ee5fdf
Child:
4:673eb9735d44

File content as of revision 0:5fa232ee5fdf:

/*
 * SOURCE FILE : HighScoreEntry.cpp
 *
 * Definition of class HighScoreEntry.
 * Routine to allow player to enter their name using joysticks.
 *
 */

#include "HighScoreEntry.h"
#include "Gameduino.h"       // Gameduino stuff
#if 0
    #include "GDExtra.h"         // more Gameduino stuff
    #include "GDConst.h"         // Gameduino constants
    #include "CharBlocks.h"      // blocks of characters in program memory
    #include "CharFrame.h"       // for drawing frames made of characters
    #include "CharCodes.h"       // character codes
    #include "FrameCounter.h"    // counter updated every vertical flyback
#endif

/***************/
/* CONSTRUCTOR */
/***************/
HighScoreEntry::HighScoreEntry() :
  cursorPos( 0 )
{
}

/**************/
/* DESTRUCTOR */
/**************/
HighScoreEntry::~HighScoreEntry() {
}

/*********************/
/* GET A PLAYER NAME */
/*********************/
// Pass pointer to place to store name in name.
// Pass pointer to controls to read in controls.
#if 0
void HighScoreEntry::GetName( PlayerName *name, PanelControls *controls ) {
  UInt16 inputs;
  UInt8 countdown = 0;
  char *curPtr;
  // Initialise name to all 'A' characters.
  for( UInt8 i = 0; i < PlayerName::Length; ++i ) {
    name->Name[ i ] = 'A';
  }
  // Draw screen.
  DrawScreen();
  // Wait until player releases all controls.
  WaitControls( controls, false );
  // Start at leftmost character.
  cursorPos = 0;
  // Loop until cursor moves beyond rightmost character.
  while( cursorPos < PlayerName::Length ) {
    // Read panel controls.
    controls->Read();
    inputs = controls->GetInputs();
    // Point to character under cursor.
    curPtr = name->Name + cursorPos;
    // Only react to controls every so often to slow things down.
    if( countdown == 0 ) {
      countdown = 10;
      if( inputs & PanelControls::Up1 ) {
        // Joystick up selects next character up.
        if( *curPtr >= PlayerName::MaxChar ) {
          *curPtr = PlayerName::MinChar;
        }
        else {
          (*curPtr)++;
        }
      }
      else if( inputs & PanelControls::Down1 ) {
        // Joystick down selects previous character down.
        if( *curPtr <= PlayerName::MinChar ) {
          *curPtr = PlayerName::MaxChar;
        }
        else {
          (*curPtr)--;
        }
      }
      else if( inputs & PanelControls::Left1 ) {
        // Joystick left moves cursor back.
        if( cursorPos > 0 ) {
          cursorPos--;
          // Wait until all controls released.
          WaitControls( controls, false );
        }
      }
      else if( inputs & PanelControls::Right1 ) {
        // Joystick right moves cursor forwards.
        cursorPos++;
        // Wait until all controls released.
        WaitControls( controls, false );
      }
    }
    else {
      countdown--;
    }
    // Wait for vertical flyback. Then draw name and do animation.
    GD.waitvblank();
    FrameCounter++;
    DrawName( name );
    Animate();
  }
  // Wait until player releases all controls before returning.
  WaitControls( controls, false );
}
#endif

/*********************/
/* WAIT FOR CONTROLS */
/*********************/
// Pass pointer to controls to read in controls.
// Pass true in waitActivate to wait for a control to be used.
// Pass false to wait for release.
#if 0
void HighScoreEntry::WaitControls( PanelControls *controls, bool waitActivate ) {
  boolean released = false;
  UInt16 inputs;
  while( ! released ) {
    controls->Read();
    inputs = controls->GetInputs();
    released = ( waitActivate ? ( inputs != 0 ) : ( inputs == 0 ) );
    if( ! released ) {
      GD.waitvblank();
      FrameCounter++;
      Animate();
    }
  }
}
#endif

/*******************/
/* DRAW THE SCREEN */
/*******************/
void HighScoreEntry::DrawScreen( void ) {
#if 0
  GD.waitvblank();
  // Clear the screen to zero characters.
  GD.fill( RAM_PIC, 0, RAM_PIC_SIZE );
  // Turn off all the sprites.
  for( UInt16 s = 0; s < SPRITE_COUNT; ++s ) {
    GD.sprite( s, 0, 400, 0, 0 );
  }
  // Draw border around screen.
  CharFrame::Draw( 0, 0, VISIBLE_CHAR_WIDTH, VISIBLE_CHAR_HEIGHT );
  // Draw logo.
  GDExtra::WriteProgCharBlock( 2, 2, CharBlocks::EnterNameInstructionText );
#endif
}

/********************************/
/* DRAW THE NAME AND THE CURSOR */
/********************************/
// Pass player name in name.
void HighScoreEntry::DrawName( PlayerName *name ) {
#if 0
  GD.putstr( 21, 11, name->Name );
  UInt16 address = RAM_PIC + 12 * SCREEN_CHAR_WIDTH + 21;
  for( UInt8 i = 0; i < PlayerName::Length; ++i ) {
    GD.wr( address, ( i == cursorPos ) ? ArrowUp : ' ' );
    address++;
  }
#endif
}

/********************/
/* UPDATE ANIMATION */
/********************/
void HighScoreEntry::Animate( void ) {
}