1
0
Fork 0
forked from len0rd/rockbox

Plugin rework 2: (all) Compile-time keyboard configuration, for Ondio adaption. (all) Now using the default event handler, standard placement is now in switch() default case. (minesweeper,pong,snake,snake2) added USB handling. (mandelbrot,mosaique) Fixed return value. (minesweeper) fast moving with button repeat. (oscillograph) Fixed cleanup in USB case.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5304 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2004-10-18 21:45:00 +00:00
parent d24766675d
commit e35a658ded
11 changed files with 543 additions and 163 deletions

View file

@ -33,6 +33,27 @@ Head and Tail are stored
#define WIDTH 28
#define HEIGHT 16
/* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD
#define SNAKE2_QUIT BUTTON_OFF
#define SNAKE2_LEVEL_UP BUTTON_UP
#define SNAKE2_LEVEL_UP2 BUTTON_RIGHT
#define SNAKE2_LEVEL_DOWN BUTTON_DOWN
#define SNAKE2_LEVEL_DOWN2 BUTTON_LEFT
#define SNAKE2_SELECT_MAZE BUTTON_F1
#define SNAKE2_SELECT_TYPE BUTTON_F3
#define SNAKE2_PLAYPAUSE BUTTON_PLAY
#elif CONFIG_KEYPAD == ONDIO_PAD
#define SNAKE2_QUIT BUTTON_OFF
#define SNAKE2_LEVEL_UP BUTTON_UP
#define SNAKE2_LEVEL_DOWN BUTTON_DOWN
#define SNAKE2_SELECT_MAZE BUTTON_LEFT
#define SNAKE2_SELECT_TYPE BUTTON_RIGHT
#define SNAKE2_PLAYPAUSE BUTTON_MENU
#endif
static int max_levels = 0;
static char (*level_cache)[HEIGHT][WIDTH];
@ -770,24 +791,37 @@ void frame (void)
void game_pause (void)
{
int button;
rb->lcd_clear_display();
rb->lcd_putsxy(33,12,"Paused");
rb->lcd_update();
while (1)
{
switch (rb->button_get(true))
button = rb->button_get(true);
switch (button)
{
case BUTTON_PLAY:
case SNAKE2_PLAYPAUSE:
redraw();
rb->sleep(HZ/2);
return;
default:
if (rb->default_event_handler(button)==SYS_USB_CONNECTED) {
dead = 1;
quit = 2;
return;
}
break;
}
}
}
void game (void)
{
int button;
redraw();
/*main loop:*/
while (1)
@ -821,7 +855,8 @@ void game (void)
rb->sleep(HZ/speed);
switch (rb->button_get(false))
button = rb->button_get(false);
switch (button)
{
case BUTTON_UP:
case BUTTON_UP | BUTTON_REPEAT:
@ -843,14 +878,21 @@ void game (void)
if (dir != EAST) set_direction(WEST);
break;
case BUTTON_OFF:
case SNAKE2_QUIT:
dead=1;
return;
case BUTTON_PLAY:
case SNAKE2_PLAYPAUSE:
game_pause();
break;
}
default:
if (rb->default_event_handler(button)==SYS_USB_CONNECTED) {
quit = 2;
return;
}
break;
}
}
}
@ -862,37 +904,42 @@ void game_init(void)
dead=0;
apple=0;
score=0;
int button;
clear_board();
load_level( level_from_file );
while (1)
{
switch (rb->button_get(true))
button=rb->button_get(true);
switch (button)
{
case BUTTON_RIGHT:
case BUTTON_UP:
case SNAKE2_LEVEL_UP:
#ifdef SNAKE2_LEVEL_UP2
case SNAKE2_LEVEL_UP2:
#endif
if (level<10)
level+=1;
break;
case BUTTON_LEFT:
case BUTTON_DOWN:
case SNAKE2_LEVEL_DOWN:
#ifdef SNAKE2_LEVEL_DOWN2
case SNAKE2_LEVEL_DOWN2:
#endif
if (level>1)
level-=1;
break;
case BUTTON_OFF:
case SNAKE2_QUIT:
quit=1;
return;
break;
case BUTTON_PLAY:
case SNAKE2_PLAYPAUSE:
speed = level*20;
return;
break;
case BUTTON_F3:
case SNAKE2_SELECT_TYPE:
if(game_type==0)game_type=1; else game_type=0;
break;
case BUTTON_F1:
case SNAKE2_SELECT_MAZE:
level_from_file++;
if(level_from_file > num_levels)
@ -902,6 +949,12 @@ void game_init(void)
load_level( level_from_file );
break;
default:
if (rb->default_event_handler(button)==SYS_USB_CONNECTED) {
quit = 2;
return;
}
break;
}
@ -910,13 +963,22 @@ void game_init(void)
/*TODO: CENTER ALL TEXT!!!!*/
rb->snprintf(plevel,sizeof(plevel),"Speed - %d",level);
rb->lcd_putsxy(LCD_WIDTH/2 - 30,5, plevel);
#if CONFIG_KEYPAD == RECORDER_PAD
rb->snprintf(plevel,sizeof(plevel),"F1 - Maze %d",level_from_file);
rb->lcd_putsxy(18, 20, plevel);
if(game_type==0)
rb->lcd_putsxy(18, 30, "F3 - Game A");
else
rb->lcd_putsxy(18, 30, "F3 - Game B");
#elif CONFIG_KEYPAD == ONDIO_PAD
rb->snprintf(plevel,sizeof(plevel),"Left - Maze %d",level_from_file);
rb->lcd_putsxy(18, 20, plevel);
if(game_type==0)
rb->lcd_putsxy(12, 30, "Right - Game A");
else
rb->lcd_putsxy(12, 30, "Right - Game B");
#endif
rb->snprintf(phscore,sizeof(phscore),"Hi Score: %d",hiscore);
rb->lcd_putsxy(LCD_WIDTH/2 - 37,50, phscore);
rb->lcd_update();
@ -953,7 +1015,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
}
}
return false;
return (quit==1) ? PLUGIN_OK : PLUGIN_USB_CONNECTED;
}
#endif