this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Added (B)/Escape/Return button handling to the Game Menu and Surf #1748 #1740

nesbox d334b54c 6bae3d88

+96 -42
+42 -4
src/studio/screens/menu.c
··· 53 53 macro(start) \ 54 54 macro(up) \ 55 55 macro(down) \ 56 - macro(close) 56 + macro(close) \ 57 + macro(back) 57 58 58 59 #define ANIM_MOVIE(name) Movie name; 59 60 #define ANIM_FREE(name) FREE(menu->anim.name.items); ··· 67 68 MenuItem* items; 68 69 s32 count; 69 70 s32 pos; 71 + s32 backPos; 70 72 71 73 void* data; 74 + void(*back)(void*); 72 75 73 76 struct 74 77 { ··· 163 166 menu->items[menu->pos].handler(menu->data); 164 167 } 165 168 169 + static void backDone(Menu *menu) 170 + { 171 + resetMovie(menu, &menu->anim.idle); 172 + s32 pos = menu->backPos; 173 + menu->back(menu->data); 174 + menu->pos = pos; 175 + } 176 + 166 177 static void printShadow(tic_mem* tic, const char* text, s32 x, s32 y, tic_color color) 167 178 { 168 179 tic_api_print(tic, text, x, y + 1, tic_color_black, true, 1, false); ··· 244 255 } 245 256 } 246 257 247 - if(tic_api_btnp(menu->tic, A, -1, -1)) 258 + if(tic_api_btnp(menu->tic, A, -1, -1) || tic_api_keyp(tic, tic_key_return, -1, -1)) 248 259 { 249 260 if(option) 250 261 { ··· 256 267 playSystemSfx(2); 257 268 resetMovie(menu, &menu->anim.close); 258 269 } 259 - } 270 + } 271 + 272 + if(tic_api_btnp(menu->tic, B, -1, -1) && menu->back) 273 + { 274 + playSystemSfx(2); 275 + resetMovie(menu, &menu->anim.back); 276 + } 260 277 } 261 278 262 279 s32 i = 0; ··· 350 367 {10, 0, 10, &menu->anim.cursor, linear}, 351 368 {0, TIC80_WIDTH, 10, &menu->anim.offset, linear}, 352 369 }), 370 + 371 + .back = MOVIE_DEF(10, backDone, 372 + { 373 + {0, -10, 10, &menu->anim.top, linear}, 374 + {0, 10, 10, &menu->anim.bottom, linear}, 375 + {10, 0, 10, &menu->anim.cursor, linear}, 376 + {0, TIC80_WIDTH, 10, &menu->anim.offset, linear}, 377 + }), 353 378 }, 354 379 }; 355 380 ··· 386 411 menu->ticks++; 387 412 } 388 413 389 - void studio_menu_init(Menu* menu, const MenuItem* items, s32 rows, s32 pos, void* data) 414 + void studio_menu_init(Menu* menu, const MenuItem* items, s32 rows, s32 pos, s32 backPos, void(*back)(void*), void* data) 390 415 { 391 416 const s32 size = sizeof menu->items[0] * rows; 392 417 ··· 398 423 .data = data, 399 424 .count = rows, 400 425 .pos = pos, 426 + .backPos = backPos, 427 + .back = back, 401 428 }; 402 429 403 430 memcpy(menu->items, items, size); ··· 406 433 it->option->pos = it->option->get(); 407 434 408 435 resetMovie(menu, &menu->anim.start); 436 + } 437 + 438 + bool studio_menu_back(Menu* menu) 439 + { 440 + if(menu->back) 441 + { 442 + playSystemSfx(2); 443 + resetMovie(menu, &menu->anim.back); 444 + } 445 + 446 + return menu->back != NULL; 409 447 } 410 448 411 449 void studio_menu_free(Menu* menu)
+2 -1
src/studio/screens/menu.h
··· 47 47 MenuOption* option; 48 48 } MenuItem; 49 49 50 - void studio_menu_init(Menu* menu, const MenuItem* items, s32 rows, s32 pos, void* data); 50 + void studio_menu_init(Menu* menu, const MenuItem* items, s32 rows, s32 pos, s32 backPos, void(*back)(void*), void* data); 51 + bool studio_menu_back(Menu* menu); 51 52 void studio_menu_free(Menu* menu); 52 53 53 54 void studio_menu_anim(struct tic_mem* tic, s32 ticks);
+2 -1
src/studio/screens/surf.c
··· 808 808 surf->menu.anim_target = 5; 809 809 } 810 810 811 - if(tic_api_btnp(tic, A, -1, -1)) 811 + if(tic_api_btnp(tic, A, -1, -1) 812 + || tic_api_keyp(tic, tic_key_return, -1, -1)) 812 813 { 813 814 SurfItem* item = getMenuItem(surf); 814 815 item->dir
+50 -36
src/studio/studio.c
··· 1141 1141 impl.mode = TIC_RUN_MODE; 1142 1142 } 1143 1143 1144 - static void showOptionMenu(); 1145 - 1146 - static const MenuItem GamepadMenu[] = 1147 - { 1148 - {"UP <...>", NULL}, 1149 - {"DOWN <...>", NULL}, 1150 - {"LEFT <...>", NULL}, 1151 - {"RIGHT <...>", NULL}, 1152 - {"A <...>", NULL}, 1153 - {"B <...>", NULL}, 1154 - {"X <...>", NULL}, 1155 - {"Y <...>", NULL}, 1156 - 1157 - {"", NULL}, 1158 - {"BACK", showOptionMenu}, 1159 - }; 1160 - 1161 - static void setupGamepadMenu() 1162 - { 1163 - studio_menu_init(impl.menu, GamepadMenu, COUNT_OF(GamepadMenu), 0, NULL); 1164 - } 1165 - 1166 1144 static s32 optionFullscreenGet() 1167 1145 { 1168 1146 return tic_sys_fullscreen_get() ? 1 : 0; ··· 1284 1262 optionKeyboardSet, 1285 1263 }; 1286 1264 1265 + static void showGamepadMenu(); 1266 + 1287 1267 static const MenuItem OptionMenu[] = 1288 1268 { 1289 1269 #if defined(CRT_SHADER_SUPPORT) ··· 1293 1273 {"FULLSCREEN ", NULL, &FullscreenOption}, 1294 1274 {"VOLUME ", NULL, &VolumeOption}, 1295 1275 {"KEYBOARD ", NULL, &KeyboardOption}, 1296 - {"SETUP GAMEPAD", setupGamepadMenu}, 1276 + {"SETUP GAMEPAD", showGamepadMenu}, 1297 1277 {"", NULL}, 1298 1278 {"BACK", showGameMenu}, 1299 1279 }; 1300 1280 1301 - static void showOptionMenu() 1302 - { 1303 - enum{Count = COUNT_OF(OptionMenu)}; 1304 - studio_menu_init(impl.menu, OptionMenu, Count, Count - 5, NULL); 1305 - } 1281 + static void showOptionsMenu(); 1306 1282 1307 1283 static const MenuItem GameMenu[] = 1308 1284 { ··· 1311 1287 #endif 1312 1288 {"RESET GAME", resetGame}, 1313 1289 {"RESUME GAME", hideGameMenu}, 1314 - {"OPTIONS", showOptionMenu}, 1290 + {"OPTIONS", showOptionsMenu}, 1315 1291 {"", NULL}, 1316 1292 {"QUIT TIC-80", exitStudio}, 1317 1293 }; 1318 1294 1319 1295 void showGameMenu() 1320 1296 { 1321 - tic_core_pause(impl.studio.tic); 1322 - tic_api_reset(impl.studio.tic); 1297 + if(impl.mode != TIC_MENU_MODE) 1298 + { 1299 + tic_core_pause(impl.studio.tic); 1300 + tic_api_reset(impl.studio.tic); 1301 + impl.mode = TIC_MENU_MODE; 1302 + } 1323 1303 1324 1304 enum{Count = COUNT_OF(GameMenu)}; 1325 - studio_menu_init(impl.menu, GameMenu, Count, Count - 4, NULL); 1305 + studio_menu_init(impl.menu, GameMenu, Count, Count - 4, 0, NULL, NULL); 1306 + } 1326 1307 1327 - impl.mode = TIC_MENU_MODE; 1308 + static void showOptionsMenu() 1309 + { 1310 + enum{Count = COUNT_OF(OptionMenu)}; 1311 + studio_menu_init(impl.menu, OptionMenu, 1312 + Count, Count - 5, COUNT_OF(GameMenu) - 3, showGameMenu, NULL); 1313 + } 1314 + 1315 + static void showGamepadMenu() 1316 + { 1317 + static const MenuItem GamepadMenu[] = 1318 + { 1319 + {"UP <...>", NULL}, 1320 + {"DOWN <...>", NULL}, 1321 + {"LEFT <...>", NULL}, 1322 + {"RIGHT <...>", NULL}, 1323 + {"A <...>", NULL}, 1324 + {"B <...>", NULL}, 1325 + {"X <...>", NULL}, 1326 + {"Y <...>", NULL}, 1327 + 1328 + {"", NULL}, 1329 + {"BACK", showOptionsMenu}, 1330 + }; 1331 + 1332 + studio_menu_init(impl.menu, GamepadMenu, COUNT_OF(GamepadMenu), 1333 + 0, COUNT_OF(OptionMenu) - 3, showOptionsMenu, NULL); 1328 1334 } 1329 1335 1330 1336 static inline bool pointInRect(const tic_point* pt, const tic_rect* rect) ··· 1429 1435 1430 1436 memcpy(items + rows, Answers, sizeof Answers); 1431 1437 1432 - studio_menu_init(impl.menu, items, count, count - 2, 1433 - MOVE((ConfirmData){callback, data})); 1438 + studio_menu_init(impl.menu, items, count, count - 2, 0, 1439 + NULL, MOVE((ConfirmData){callback, data})); 1434 1440 } 1435 1441 } 1436 1442 ··· 1750 1756 { 1751 1757 if(keyWasPressedOnce(tic_key_escape)) 1752 1758 { 1753 - impl.mode == TIC_MENU_MODE ? hideGameMenu() : showGameMenu(); 1759 + if(impl.mode == TIC_MENU_MODE) 1760 + { 1761 + if(!studio_menu_back(impl.menu)) 1762 + hideGameMenu(); 1763 + } 1764 + else showGameMenu(); 1754 1765 } 1755 1766 else if(keyWasPressedOnce(tic_key_f11)) tic_sys_fullscreen_set(!tic_sys_fullscreen_get()); 1756 1767 else if(keyWasPressedOnce(tic_key_return)) ··· 1827 1838 return; 1828 1839 } 1829 1840 #endif 1841 + 1842 + if(impl.mode == TIC_MENU_MODE && studio_menu_back(impl.menu)) 1843 + return; 1830 1844 1831 1845 setStudioMode(impl.mode == TIC_CONSOLE_MODE ? impl.prevMode : TIC_CONSOLE_MODE); 1832 1846 }