ControlPadSanityCheck
-makes sure the event broker has been initialized.
InitControlPad
-connects a task to the event broker for control pad interaction.
DoControlPad
-queries the specified control pad and de-bounces specified key presses
ReturnPreviousControlPad
-returns the state of the controlpad as it is remembered
KillControlPad
-disconnects the task from the event broker and frees resources
main()
function in jsanimation.c contains a loop that continuously calls HandleControlPad()
. HandleControlPad()
recognizes two button events:
kContinuousMask
specifies for which buttons continuous presses are allowed. Example 1: The HandleControlPad function in jsanimation
#define kContinuousMask ( ControlA )
int32 HandleControlPad( void )
/*
Respond to control pad input:
- The A key is enabled for continuous presses.
- Start button means quit the program.
- A button and arrows means fire (explode the cel).
Returns -1 if the user pressed the start button to quit, otherwise 0.
*/
{
uint32 controlBits;
Point aUFOCenter;
int32 retValue = 0;
DoControlPad(1, &controlBits, kContinuousMask );
if ( controlBits & ControlStart )
/* If the user has pressed the START button, the game is over. */
{
retValue = -1;
goto DONE;
}
/* ControlA triggers the explosion */
if ( controlBits & ControlA )
{
if ( !gBoomCount ) /* Don't fire until previous explosion is finished */
{
gBoomCount = gExplosionAnim->num_Frames;
/* Position center of explosion at center of the UFO */
aUFOCenter = CalcCCBCenterPoint(gUFO_CCB);
CenterCCB(gExplosionCCB, aUFOCenter.pt_X, aUFOCenter.pt_Y);
/* Get a random center for the next UFO */
CenterCCB(gUFO_CCB, (Coord) Random(DISPLAY_WIDTH), (Coord)
Random(DISPLAY_HEIGHT));
}
}
DONE:
return retValue;
}
The basicslideshow.c Example
The jsbasicslideshow.c example uses the same JSGetControlPad()
function but a more complex HandleControlPad()
function that allows more complex user input.
Note that this example includes controlpad.c and calls InitControlPad()
during initialization and KillControlPad()
during shutdown.
Example 2: The HandleControlPad function in jsbasicslideshow.c
int32 HandleControlPad( void )
/*
Respond to the user's control pad input.
- Right and down arrows mean show next image in list
- Left and up arrows mean show previous image in list
- Start button means quit the program
- B button means show the other buffer
- C button means toggle automatic display mode
Returns -1 if the user pressed the start button to quit, otherwise 0.
*/
{
int32 retValue = 0;
uint32 controlBits;
DoControlPad(1, &controlBits, 0 );
/* no continuous button presses */
/* if the Start button is pressed, the user wants to quit */
if ( controlBits & ControlStart )
{
retValue = -1;
}
/* if the A button is pressed \xc9 (no action in this interface) */
else if ( controlBits & ControlA )
{
;
}
/* if button B is pressed, display the other buffer */
else if ( controlBits & ControlB )
{
gScreenContext->sc_curScreen =
1 - gScreenContext->sc_curScreen;
}
/* if button C is pressed toggle autoshow */
else if ( controlBits & ControlC )
{
gAutoShowFlag = !gAutoShowFlag;
PRT( ("Auto-show mode is ") );
if ( gAutoShowFlag )
{
PRT( ("TRUE\n") );
}
else
PRT( ("FALSE\n") );
}
else if ( controlBits &
(ControlUp | ControlLeft | ControlDown | ControlRight))
/* Arrows mean move one image forward or backward */
{
if ( controlBits & ControlUp )
{
LoadPreviousImage();
}
else if ( controlBits & ControlLeft )
{
LoadPreviousImage();
}
else if ( controlBits & ControlDown )
{
LoadNextImage();
}
else if ( controlBits & ControlRight )
{
LoadNextImage();
}
}
return retValue;
}