X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=scene.c;h=a4b70d62e21e865c3dcfb3d9e6c1ca203bff26cf;hb=a4f6bea87a20c5da469fb115a8fb0db20c5ffb18;hp=1dee027acee8797a3a68ff7362618ef74c92bc13;hpb=a1f68d35f178d86f004d9b3f97193afbcdf9a866;p=atyndall%2Fcits2231.git diff --git a/scene.c b/scene.c index 1dee027..a4b70d6 100644 --- a/scene.c +++ b/scene.c @@ -246,7 +246,34 @@ void processLightEvents(int id) { } +int makeSubmenuFromArray( const char *menuEntries[], void *callback ) { + int menuEntriesSize = sizeof(menuEntries) / sizeof(menuEntries[0]); + int menuNumber = menuEntriesSize / 10 + 1; + int submenuObjects[menuNumber-1]; + for( int i = 0; i < menuNumber; i++ ) { + submenuObjects[i] = glutCreateMenu(callback); + int startNum = i*11 - (i-1); + for ( int j = startNum - 1; j < (startNum+9); j++ ) { + if ( j == menuEntriesSize ) break; // Detect if we've reached the end of the array + glutAddMenuEntry( menuEntries[j], j ); + } + } + + int mainMenu = glutCreateMenu(callback); + for ( int i = 0; i < menuNumber; i++ ) { + char name[10]; // buffer to hold name + int startNum = i*11 - (i-1); + int endNum = startNum + 9; + if ( i == menuNumber - 1 ) { // We're on the last one + endNum = startNum + (menuEntriesSize - startNum); + } + sprintf(name, "%d-%d", startNum, endNum); + glutAddSubMenu( name, submenuObjects[i] ); + } + + return mainMenu; +} void makeMenu() { // Construct material menu @@ -268,26 +295,21 @@ void makeMenu() { glutAddMenuEntry("R/G/B/All Light 2", LIGHT_RGBALL_LIGHT_2); // Construct add object submenus - int objectMenuEntriesSize = sizeof(objectMenuEntries) / sizeof(objectMenuEntries[0]); - int menuNumber = objectMenuEntriesSize / 10 + 1; - int addObjectSubmenu[menuNumber-1]; + int addObjectMenu = makeSubmenuFromArray( objectMenuEntries, processObjectEvents ); + + // Construct texture/ground texture submenus +/* int textureMenuEntries = sizeof(textureMenuEntries) / sizeof(textureMenuEntries[0]); + int menuNumber = textureMenuEntries / 10 + 1; + int textureSubmenu[menuNumber-1]; for( int i = 0; i < menuNumber; i++ ) { - addObjectSubmenu[i] = glutCreateMenu(processObjectEvents); + textureSubmenu[i] = glutCreateMenu(processTextureEvents); int startNum = i*11 - (i-1); for ( int j = startNum - 1; j < (startNum+9); j++ ) { - if ( !objectMenuEntries[j] ) break; // Detect if we've reached the end of the array + if ( j == objectMenuEntriesSize ) break; // Detect if we've reached the end of the array glutAddMenuEntry( objectMenuEntries[j], j ); } - } - - // Construct add object menu - int addObjectMenu = glutCreateMenu(processObjectEvents); - for ( int i = 0; addObjectSubmenu[i]; i++ ) { - char name[10]; // buffer to hold name - sprintf(name, "%d-%d", i*11 - (i-1), i*11 - (i-1) + 9); - glutAddSubMenu( name, addObjectSubmenu[i] ); - } + }*/ int mainMenu = glutCreateMenu(processMainEvents);