diff options
Diffstat (limited to 'apps/plugins/bubbles.c')
-rwxr-xr-x | apps/plugins/bubbles.c | 145 |
1 files changed, 27 insertions, 118 deletions
diff --git a/apps/plugins/bubbles.c b/apps/plugins/bubbles.c index 9ce6ee80c5..e5a094e053 100755 --- a/apps/plugins/bubbles.c +++ b/apps/plugins/bubbles.c | |||
@@ -21,6 +21,7 @@ | |||
21 | 21 | ||
22 | #include "plugin.h" | 22 | #include "plugin.h" |
23 | #include "xlcd.h" | 23 | #include "xlcd.h" |
24 | #include "pluginlib_actions.h" | ||
24 | 25 | ||
25 | #ifdef HAVE_LCD_BITMAP | 26 | #ifdef HAVE_LCD_BITMAP |
26 | 27 | ||
@@ -53,93 +54,6 @@ PLUGIN_HEADER | |||
53 | #define NUM_COMPRESS 9 | 54 | #define NUM_COMPRESS 9 |
54 | #define MAX_SHOTTIME 1000 | 55 | #define MAX_SHOTTIME 1000 |
55 | 56 | ||
56 | /* button definitions */ | ||
57 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
58 | #define BUBBLES_LEFT BUTTON_LEFT | ||
59 | #define BUBBLES_RIGHT BUTTON_RIGHT | ||
60 | #define BUBBLES_UP BUTTON_UP | ||
61 | #define BUBBLES_DOWN BUTTON_DOWN | ||
62 | #define BUBBLES_QUIT BUTTON_OFF | ||
63 | #define BUBBLES_START BUTTON_ON | ||
64 | #define BUBBLES_SELECT BUTTON_SELECT | ||
65 | #define BUBBLES_RESUME BUTTON_MODE | ||
66 | |||
67 | #define BUBBLES_RC_QUIT BUTTON_RC_STOP | ||
68 | |||
69 | #elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD) | ||
70 | #define BUBBLES_LEFT BUTTON_SCROLL_BACK | ||
71 | #define BUBBLES_RIGHT BUTTON_SCROLL_FWD | ||
72 | #define BUBBLES_UP BUTTON_SCROLL_FWD | ||
73 | #define BUBBLES_DOWN BUTTON_SCROLL_BACK | ||
74 | #define BUBBLES_QUIT BUTTON_MENU|BUTTON_REL | ||
75 | #define BUBBLES_START BUTTON_PLAY|BUTTON_REL | ||
76 | #define BUBBLES_SELECT BUTTON_SELECT | ||
77 | #define BUBBLES_RESUME BUTTON_RIGHT|BUTTON_LEFT | ||
78 | |||
79 | #elif CONFIG_KEYPAD == IAUDIO_X5_PAD | ||
80 | #define BUBBLES_LEFT BUTTON_LEFT | ||
81 | #define BUBBLES_RIGHT BUTTON_RIGHT | ||
82 | #define BUBBLES_UP BUTTON_UP | ||
83 | #define BUBBLES_DOWN BUTTON_DOWN | ||
84 | #define BUBBLES_QUIT BUTTON_POWER | ||
85 | #define BUBBLES_START BUTTON_PLAY | ||
86 | #define BUBBLES_SELECT BUTTON_SELECT | ||
87 | #define BUBBLES_RESUME BUTTON_REC | ||
88 | |||
89 | #elif CONFIG_KEYPAD == GIGABEAT_PAD | ||
90 | #define BUBBLES_LEFT BUTTON_LEFT | ||
91 | #define BUBBLES_RIGHT BUTTON_RIGHT | ||
92 | #define BUBBLES_UP BUTTON_UP | ||
93 | #define BUBBLES_DOWN BUTTON_DOWN | ||
94 | #define BUBBLES_QUIT BUTTON_A | ||
95 | #define BUBBLES_START BUTTON_POWER | ||
96 | #define BUBBLES_SELECT BUTTON_SELECT | ||
97 | #define BUBBLES_RESUME BUTTON_MENU | ||
98 | |||
99 | #elif CONFIG_KEYPAD == RECORDER_PAD | ||
100 | #define BUBBLES_LEFT BUTTON_LEFT | ||
101 | #define BUBBLES_RIGHT BUTTON_RIGHT | ||
102 | #define BUBBLES_UP BUTTON_UP | ||
103 | #define BUBBLES_DOWN BUTTON_DOWN | ||
104 | #define BUBBLES_QUIT BUTTON_OFF | ||
105 | #define BUBBLES_START BUTTON_ON | ||
106 | #define BUBBLES_SELECT BUTTON_PLAY | ||
107 | #define BUBBLES_RESUME BUTTON_F1 | ||
108 | |||
109 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
110 | #define BUBBLES_LEFT BUTTON_LEFT | ||
111 | #define BUBBLES_RIGHT BUTTON_RIGHT | ||
112 | #define BUBBLES_UP BUTTON_RIGHT | ||
113 | #define BUBBLES_DOWN BUTTON_LEFT | ||
114 | #define BUBBLES_QUIT BUTTON_OFF | ||
115 | #define BUBBLES_START BUTTON_MENU | ||
116 | #define BUBBLES_SELECT BUTTON_UP | ||
117 | #define BUBBLES_RESUME BUTTON_DOWN | ||
118 | |||
119 | #elif CONFIG_KEYPAD == SANSA_E200_PAD | ||
120 | #define BUBBLES_LEFT BUTTON_LEFT | ||
121 | #define BUBBLES_RIGHT BUTTON_RIGHT | ||
122 | #define BUBBLES_UP BUTTON_SCROLL_UP | ||
123 | #define BUBBLES_DOWN BUTTON_SCROLL_DOWN | ||
124 | #define BUBBLES_QUIT BUTTON_POWER | ||
125 | #define BUBBLES_START BUTTON_PLAY | ||
126 | #define BUBBLES_SELECT BUTTON_SELECT | ||
127 | #define BUBBLES_RESUME BUTTON_DOWN | ||
128 | |||
129 | #elif CONFIG_KEYPAD == IRIVER_H10_PAD | ||
130 | #define BUBBLES_LEFT BUTTON_LEFT | ||
131 | #define BUBBLES_RIGHT BUTTON_RIGHT | ||
132 | #define BUBBLES_UP BUTTON_SCROLL_UP | ||
133 | #define BUBBLES_DOWN BUTTON_SCROLL_DOWN | ||
134 | #define BUBBLES_QUIT BUTTON_POWER | ||
135 | #define BUBBLES_START BUTTON_PLAY | ||
136 | #define BUBBLES_SELECT BUTTON_REW | ||
137 | #define BUBBLES_RESUME BUTTON_FF | ||
138 | |||
139 | #else | ||
140 | #error BUBBLES: Unsupported keypad | ||
141 | #endif | ||
142 | |||
143 | /* bubbles will consume height of 10*ROW_HEIGHT+2*(BUBBLE_HEIGHT-1)+BUBBLE_HEIGHT/2 */ | 57 | /* bubbles will consume height of 10*ROW_HEIGHT+2*(BUBBLE_HEIGHT-1)+BUBBLE_HEIGHT/2 */ |
144 | /* 24x24 bubbles (iPod Video) */ | 58 | /* 24x24 bubbles (iPod Video) */ |
145 | #if (LCD_HEIGHT == 240) && (LCD_WIDTH == 320) | 59 | #if (LCD_HEIGHT == 240) && (LCD_WIDTH == 320) |
@@ -2395,31 +2309,29 @@ static int bubbles_handlebuttons(struct game_context* bb, bool animblock, | |||
2395 | int button; | 2309 | int button; |
2396 | int buttonres; | 2310 | int buttonres; |
2397 | long start; | 2311 | long start; |
2398 | 2312 | const struct button_mapping *plugin_contexts[] | |
2399 | button = rb->button_get_w_tmo(timeout); | 2313 | = {generic_directions,generic_actions}; |
2314 | button = pluginlib_getaction(rb,timeout,plugin_contexts,2); | ||
2400 | 2315 | ||
2401 | #ifdef HAS_BUTTON_HOLD | 2316 | #ifdef HAS_BUTTON_HOLD |
2402 | if (rb->button_hold()) | 2317 | if (rb->button_hold()) |
2403 | button = BUBBLES_START; | 2318 | button = PLA_START; |
2404 | #endif | 2319 | #endif |
2405 | 2320 | ||
2406 | switch(button){ | 2321 | switch(button){ |
2407 | case (BUBBLES_LEFT|BUTTON_REPEAT): | 2322 | case PLA_LEFT_REPEAT: |
2408 | if(bb->angle > MIN_ANGLE) bb->angle -= 4; | 2323 | if(bb->angle > MIN_ANGLE) bb->angle -= 4; |
2409 | case BUBBLES_LEFT: /* change angle to the left */ | 2324 | case PLA_LEFT: /* change angle to the left */ |
2410 | if(bb->angle > MIN_ANGLE) bb->angle -= 2; | 2325 | if(bb->angle > MIN_ANGLE) bb->angle -= 2; |
2411 | break; | 2326 | break; |
2412 | 2327 | ||
2413 | case (BUBBLES_RIGHT|BUTTON_REPEAT): | 2328 | case PLA_RIGHT_REPEAT: |
2414 | if(bb->angle < MAX_ANGLE) bb->angle += 4; | 2329 | if(bb->angle < MAX_ANGLE) bb->angle += 4; |
2415 | case BUBBLES_RIGHT: /* change angle to the right */ | 2330 | case PLA_RIGHT: /* change angle to the right */ |
2416 | if(bb->angle < MAX_ANGLE) bb->angle += 2; | 2331 | if(bb->angle < MAX_ANGLE) bb->angle += 2; |
2417 | break; | 2332 | break; |
2418 | 2333 | ||
2419 | case BUBBLES_SELECT: /* fire the shot */ | 2334 | case PLA_FIRE: /* fire the shot */ |
2420 | #if CONFIG_KEYPAD == IRIVER_H10_PAD | ||
2421 | case BUBBLES_UP: /* easier to press on H10 */ | ||
2422 | #endif | ||
2423 | if(!animblock) { | 2335 | if(!animblock) { |
2424 | bb->elapsedlvl += bb->elapsedshot; | 2336 | bb->elapsedlvl += bb->elapsedshot; |
2425 | bb->elapsedshot = 0; | 2337 | bb->elapsedshot = 0; |
@@ -2431,29 +2343,27 @@ static int bubbles_handlebuttons(struct game_context* bb, bool animblock, | |||
2431 | } | 2343 | } |
2432 | break; | 2344 | break; |
2433 | 2345 | ||
2434 | case BUBBLES_START: /* pause the game */ | 2346 | case PLA_START: /* pause the game */ |
2435 | start = *rb->current_tick; | 2347 | start = *rb->current_tick; |
2436 | rb->splash(1, true, "Paused"); | 2348 | rb->splash(1, true, "Paused"); |
2437 | while(rb->button_get(true) != (BUBBLES_START)); | 2349 | while(pluginlib_getaction(rb,TIMEOUT_BLOCK,plugin_contexts,2) |
2350 | != (PLA_START)); | ||
2438 | bb->startedshot += *rb->current_tick-start; | 2351 | bb->startedshot += *rb->current_tick-start; |
2439 | bubbles_drawboard(bb); | 2352 | bubbles_drawboard(bb); |
2440 | rb->lcd_update(); | 2353 | rb->lcd_update(); |
2441 | break; | 2354 | break; |
2442 | 2355 | ||
2443 | case BUBBLES_RESUME: /* save and end the game */ | 2356 | case PLA_MENU: /* save and end the game */ |
2444 | if(!animblock) { | 2357 | if(!animblock) { |
2445 | rb->splash(HZ/2, true, "Saving game..."); | 2358 | rb->splash(HZ/2, true, "Saving game..."); |
2446 | bubbles_savegame(bb); | 2359 | bubbles_savegame(bb); |
2447 | return BB_END; | 2360 | return BB_END; |
2448 | } | 2361 | } |
2449 | break; | 2362 | break; |
2450 | #ifdef BUBBLES_RC_QUIT | 2363 | case PLA_QUIT: /* end the game */ |
2451 | case BUBBLES_RC_QUIT: | ||
2452 | #endif | ||
2453 | case BUBBLES_QUIT: /* end the game */ | ||
2454 | return BB_END; | 2364 | return BB_END; |
2455 | 2365 | ||
2456 | case BUTTON_NONE: /* no button pressed */ | 2366 | case ACTION_UNKNOWN: /* no button pressed */ |
2457 | break; | 2367 | break; |
2458 | 2368 | ||
2459 | default: | 2369 | default: |
@@ -2479,6 +2389,8 @@ static int bubbles(struct game_context* bb) { | |||
2479 | bool startgame = false; | 2389 | bool startgame = false; |
2480 | bool showscores = false; | 2390 | bool showscores = false; |
2481 | long timeout; | 2391 | long timeout; |
2392 | const struct button_mapping *plugin_contexts[] | ||
2393 | = {generic_directions,generic_actions}; | ||
2482 | 2394 | ||
2483 | bubbles_setcolors(); | 2395 | bubbles_setcolors(); |
2484 | 2396 | ||
@@ -2578,23 +2490,20 @@ static int bubbles(struct game_context* bb) { | |||
2578 | rb->lcd_update(); | 2490 | rb->lcd_update(); |
2579 | 2491 | ||
2580 | /* handle menu button presses */ | 2492 | /* handle menu button presses */ |
2581 | button = rb->button_get(true); | 2493 | button = pluginlib_getaction(rb,timeout,plugin_contexts,2); |
2582 | switch(button){ | 2494 | switch(button){ |
2583 | case BUBBLES_START: /* start playing */ | 2495 | case PLA_START: /* start playing */ |
2584 | bb->level = startlevel; | 2496 | bb->level = startlevel; |
2585 | startgame = true; | 2497 | startgame = true; |
2586 | break; | 2498 | break; |
2587 | #ifdef BUBBLES_RC_QUIT | 2499 | case PLA_QUIT: /* quit program */ |
2588 | case BUBBLES_RC_QUIT: | ||
2589 | #endif | ||
2590 | case BUBBLES_QUIT: /* quit program */ | ||
2591 | if(showscores) { | 2500 | if(showscores) { |
2592 | showscores = false; | 2501 | showscores = false; |
2593 | break; | 2502 | break; |
2594 | } | 2503 | } |
2595 | return BB_QUIT; | 2504 | return BB_QUIT; |
2596 | 2505 | ||
2597 | case BUBBLES_RESUME: /* resume game */ | 2506 | case PLA_MENU: /* resume game */ |
2598 | if(!bubbles_loadgame(bb)) { | 2507 | if(!bubbles_loadgame(bb)) { |
2599 | rb->splash(HZ*2, true, "Nothing to resume"); | 2508 | rb->splash(HZ*2, true, "Nothing to resume"); |
2600 | } else { | 2509 | } else { |
@@ -2602,12 +2511,12 @@ static int bubbles(struct game_context* bb) { | |||
2602 | } | 2511 | } |
2603 | break; | 2512 | break; |
2604 | 2513 | ||
2605 | case BUBBLES_SELECT: /* toggle high scores */ | 2514 | case PLA_FIRE: /* toggle high scores */ |
2606 | showscores = !showscores; | 2515 | showscores = !showscores; |
2607 | break; | 2516 | break; |
2608 | 2517 | ||
2609 | case (BUBBLES_UP|BUTTON_REPEAT): | 2518 | case PLA_UP: /* increase starting level */ |
2610 | case BUBBLES_UP: /* increase starting level */ | 2519 | case PLA_UP_REPEAT: |
2611 | if(startlevel >= bb->highlevel) { | 2520 | if(startlevel >= bb->highlevel) { |
2612 | startlevel = 0; | 2521 | startlevel = 0; |
2613 | } else { | 2522 | } else { |
@@ -2615,8 +2524,8 @@ static int bubbles(struct game_context* bb) { | |||
2615 | } | 2524 | } |
2616 | break; | 2525 | break; |
2617 | 2526 | ||
2618 | case (BUBBLES_DOWN|BUTTON_REPEAT): | 2527 | case PLA_DOWN: /* decrease starting level */ |
2619 | case BUBBLES_DOWN: /* decrease starting level */ | 2528 | case PLA_DOWN_REPEAT: |
2620 | if(startlevel <= 0) { | 2529 | if(startlevel <= 0) { |
2621 | startlevel = bb->highlevel; | 2530 | startlevel = bb->highlevel; |
2622 | } else { | 2531 | } else { |