(no commit message)
[atyndall/cits2231.git] / scene.c
diff --git a/scene.c b/scene.c
index a1b52b3..f6520e7 100644 (file)
--- a/scene.c
+++ b/scene.c
@@ -167,6 +167,31 @@ void getTexture(int i) { // getTexture(i) loads texture i if it isn't already lo
     glBindTexture(GL_TEXTURE_2D, 0);  // Back to default texture\r
 }\r
 \r
+// Menu enum\r
+enum menu {\r
+  // Main menu\r
+  ROTATE_MOVE_CAMERA,\r
+  POSITION_SCALE,\r
+  ROTATION_TEXTURE_SCALE,\r
+  EXIT,\r
+\r
+  // Material submenu\r
+  MATERIAL_ALL_RGB,\r
+  MATERIAL_AMBIENT_RGB,\r
+  MATERIAL_DIFFUSE_RGB,\r
+  MATERIAL_SPECULAR_RGB,\r
+  MATERIAL_ALL_ADSS,\r
+  MATERIAL_RED_ADSS,\r
+  MATERIAL_GREEN_ADSS,\r
+  MATERIAL_BLUE_ADSS,\r
+\r
+  // Light submenu\r
+  LIGHT_MOVE_LIGHT_1,\r
+  LIGHT_RGBALL_LIGHT_1,\r
+  LIGHT_MOVE_LIGHT_2,\r
+  LIGHT_RGBALL_LIGHT_2\r
+};\r
+\r
 // Menu arrays\r
 const char *textureMenuEntries[NTEXTURE] = {\r
   "1 Plain", "2 Rust", "3 Concrete", "4 Carpet", "5 Beach Sand", \r
@@ -191,13 +216,14 @@ const char *objectMenuEntries[NMESH] = {
   "51 Chef", "52 Parasaurolophus", "53 Rooster", "54 T-rex"\r
 };\r
 \r
-const char *materialMenuEntries[8] = {\r
-  "All R/G/B", "Ambient R/G/B", "Diffuse R/G/B", "Specular R/G/B",\r
-  "All Amb/Diff/Spec/Shine", "Red Amb/Diff/Spec/Shine", "Green Amb/Diff/Spec/Shine", "Blue Amb/Diff/Spec/Shine"\r
-};\r
+\r
 \r
 void processMainEvents(int id) {\r
-   if(id == 99) exit(0);\r
+  switch (id) {\r
+    case EXIT:\r
+      exit(0);\r
+\r
+  }\r
 }\r
 \r
 void processObjectEvents(int id) {\r
@@ -220,66 +246,66 @@ void processLightEvents(int id) {
 \r
 }\r
 \r
-void makeMenu() {\r
-  //int main, object, objectsize, material, texture, gtexture, light;\r
-\r
-  glutCreateMenu(processMainEvents);\r
-  \r
-\r
-  int objectSize = sizeof(objectMenuEntries) / sizeof(objectMenuEntries[0]);\r
-  int numMenus = objectSize/10 + 1;\r
-  int objectSubmenu[numMenus];\r
-\r
-  // Create the n-(n+10) menus\r
-  for ( int i = 0; i < numMenus; i++ ) {\r
-\r
-    objectSubmenu[i] = glutCreateMenu(processObjectEvents);\r
-\r
-    for ( int j = 0; j < (i + 1) * 10; j++ ) {\r
 \r
-      if ( objectMenuEntries[j] ) {\r
-        glutAddMenuEntry( objectMenuEntries[j], j + 1 );\r
-      } else { \r
-        break;\r
-      }\r
 \r
+void makeMenu() {\r
+  // Construct material menu\r
+  int materialMenu = glutCreateMenu(processMaterialEvents);\r
+  glutAddMenuEntry("All R/G/B", MATERIAL_ALL_RGB);\r
+  glutAddMenuEntry("Ambient R/G/B", MATERIAL_AMBIENT_RGB);\r
+  glutAddMenuEntry("Diffuse R/G/B", MATERIAL_DIFFUSE_RGB);\r
+  glutAddMenuEntry("Specular R/G/B", MATERIAL_SPECULAR_RGB);\r
+  glutAddMenuEntry("All Amb/Diff/Spec/Shine", MATERIAL_ALL_ADSS);\r
+  glutAddMenuEntry("Red Amb/Diff/Spec/Shine", MATERIAL_RED_ADSS);\r
+  glutAddMenuEntry("Green Amb/Diff/Spec/Shine", MATERIAL_GREEN_ADSS);\r
+  glutAddMenuEntry("Blue Amb/Diff/Spec/Shine", MATERIAL_BLUE_ADSS);\r
+\r
+  // Construct light menu\r
+  int lightMenu = glutCreateMenu(processLightEvents);\r
+  glutAddMenuEntry("Move Light 1", LIGHT_MOVE_LIGHT_1);\r
+  glutAddMenuEntry("R/G/B/All Light 1", LIGHT_RGBALL_LIGHT_1);\r
+  glutAddMenuEntry("Move Light 2", LIGHT_MOVE_LIGHT_2);\r
+  glutAddMenuEntry("R/G/B/All Light 2", LIGHT_RGBALL_LIGHT_2);\r
+\r
+  // Construct add object submenus\r
+  int addObjectSubmenu[6];\r
+\r
+  for( int i = 0; i < 6; i++ ) {\r
+    addObjectSubmenu[i] = glutCreateMenu(processObjectEvents);\r
+    for ( int j = i; j < (i+9); j++ ) {\r
+      glutAddMenuEntry( objectMenuEntries[j], j );\r
     }\r
-\r
   }\r
 \r
-  // Create the overmenu\r
-  int objectMenu = glutCreateMenu(processObjectEvents);\r
-  for ( int i = 0; objectSubmenu[i]; i++ ) {\r
-    char name[10];\r
-    sprintf(name,"%d",(i + 1) * 10);\r
-    glutAddSubMenu( name, objectSubmenu[i] );\r
+  // Construct add object menu\r
+  int addObjectMenu = glutCreateMenu(processObjectEvents);\r
+  for ( int i = 0; addObjectSubmenu[i]; i++ ) {\r
+    glutAddSubMenu( (char)i, addObjectSubmenu[i] );\r
   }\r
 \r
-  glutAddSubMenu("Objects", objectMenu);\r
-  glutAddMenuEntry("Exit", 99);\r
-  \r
-  \r
 \r
+  int mainMenu = glutCreateMenu(processMainEvents);\r
 \r
-  glutAttachMenu(GLUT_RIGHT_BUTTON);\r
-\r
-}\r
+  glutAddMenuEntry("Rotate/Move Camera", ROTATE_MOVE_CAMERA);\r
+  glutAddSubMenu("Add object", addObjectMenu);\r
+  glutAddMenuEntry("Position/Scale", POSITION_SCALE);\r
+  glutAddMenuEntry("Rotation/Texture Scale", ROTATION_TEXTURE_SCALE);\r
+  //material\r
+  \r
+  \r
 \r
-    \r
-/*void createGLUTMenus() {\r
+  glutSetMenu(mainMenu);\r
+  glutAddSubMenu("Material", materialMenu);\r
+  \r
+  //texture\r
+  //ground texture\r
+  //lights\r
 \r
-       int menu,submenu;\r
 \r
-       submenu = glutCreateMenu(processMenuEvents);\r
-       glutAddMenuEntry("Red",RED);\r
-       glutAddMenuEntry("Blue",BLUE);\r
-       glutAddMenuEntry("Green",GREEN);\r
+  glutAddMenuEntry("Exit", EXIT);\r
 \r
-       menu = glutCreateMenu(processMenuEvents);\r
-       glutAddMenuEntry("White",WHITE);\r
-       glutAddSubMenu("RGB Menu",submenu);\r
-       glutAttachMenu(GLUT_RIGHT_BUTTON);\r
-*/\r
+  glutAttachMenu(GLUT_RIGHT_BUTTON);\r
+}\r
 \r
 void display() {\r
    // You probably want to change both of the following.\r

UCC git Repository :: git.ucc.asn.au