bonus ball for bonus levels. Fix #56
[neverball] / share / geom.c
index def33a0..d16b829 100644 (file)
@@ -30,7 +30,7 @@
 /*---------------------------------------------------------------------------*/
 
 static GLuint ball_list;
-static GLuint ball_text;
+static GLuint ball_text[2];
 
 void ball_init(int b)
 {
@@ -39,8 +39,10 @@ void ball_init(int b)
     int j, stacks = b ? 16 :  8;
 
     config_get_s(CONFIG_BALL, name, MAXSTR);
-
-    ball_text = make_image_from_file(NULL, NULL, NULL, NULL, name);
+    ball_text[0] = make_image_from_file(NULL, NULL, NULL, NULL, name);
+    
+    config_get_s(CONFIG_BALL_BONUS, name, MAXSTR);
+    ball_text[1] = make_image_from_file(NULL, NULL, NULL, NULL, name);
 
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
@@ -87,14 +89,18 @@ void ball_free(void)
     if (glIsList(ball_list))
         glDeleteLists(ball_list, 1);
 
-    if (glIsTexture(ball_text))
-        glDeleteTextures(1, &ball_text);
+    if (glIsTexture(ball_text[0]))
+        glDeleteTextures(1, &ball_text[0]);
 
-    ball_list = 0;
-    ball_text = 0;
+    if (glIsTexture(ball_text[1]))
+        glDeleteTextures(1, &ball_text[1]);
+
+    ball_list    = 0;
+    ball_text[0] = 0;
+    ball_text[1] = 0;
 }
 
-void ball_draw(void)
+void ball_draw(int i)
 {
     glPushAttrib(GL_POLYGON_BIT |
                  GL_LIGHTING_BIT |
@@ -110,7 +116,7 @@ void ball_draw(void)
 
         glEnable(GL_COLOR_MATERIAL);
 
-        glBindTexture(GL_TEXTURE_2D, ball_text);
+        glBindTexture(GL_TEXTURE_2D, ball_text[i]);
 
         /* Render the ball back to front in case it is translucent. */
 
@@ -405,40 +411,43 @@ static GLuint jump_list;
 
 void jump_init(int b)
 {
-    int i, n = b ? 32 : 8;
+    int k, i, n = b ? 32 : 8;
 
-    jump_list = glGenLists(1);
+    jump_list = glGenLists(2);
 
-    glNewList(jump_list, GL_COMPILE);
+    for (k=0; k<12; k++)
     {
-        glPushAttrib(GL_TEXTURE_BIT  |
-                     GL_LIGHTING_BIT |
-                     GL_DEPTH_BUFFER_BIT);
-        {
-            glEnable(GL_COLOR_MATERIAL);
-            glDisable(GL_LIGHTING);
-            glDisable(GL_TEXTURE_2D);
-            glDepthMask(GL_FALSE);
+       glNewList(jump_list + k, GL_COMPILE);
+       {
+           glPushAttrib(GL_TEXTURE_BIT  |
+                   GL_LIGHTING_BIT |
+                   GL_DEPTH_BUFFER_BIT);
+           {
+               glEnable(GL_COLOR_MATERIAL);
+               glDisable(GL_LIGHTING);
+               glDisable(GL_TEXTURE_2D);
+               glDepthMask(GL_FALSE);
 
-            glBegin(GL_QUAD_STRIP);
-            {
-                for (i = 0; i <= n; i++)
-                {
-                    float x = fcosf(2.f * PI * i / n);
-                    float y = fsinf(2.f * PI * i / n);
-            
-                    glColor4f(1.0f, 1.0f, 1.0f, 0.5f);
-                    glVertex3f(x, 0.0f, y);
+               glBegin(GL_QUAD_STRIP);
+               {
+                   for (i = 0; i <= n; i++)
+                   {
+                       float x = fcosf(2.f * PI * i / n);
+                       float y = fsinf(2.f * PI * i / n);
 
-                    glColor4f(1.0f, 1.0f, 1.0f, 0.0f);
-                    glVertex3f(x, JUMP_HEIGHT, y);
-                }
-            }
-            glEnd();
-        }
-        glPopAttrib();
+                       glColor4f(1.0f, 1.0f, 1.0f, (k==0 ? 0.5f : 0.8f));
+                       glVertex3f(x, 0.0f, y);
+
+                       glColor4f(1.0f, 1.0f, 1.0f, 0.0f);
+                       glVertex3f(x, JUMP_HEIGHT, y);
+                   }
+               }
+               glEnd();
+           }
+           glPopAttrib();
+       }
+       glEndList();
     }
-    glEndList();
 }
 
 void jump_free(void)
@@ -449,9 +458,9 @@ void jump_free(void)
     jump_list = 0;
 }
 
-void jump_draw(void)
+void jump_draw(int highlight)
 {
-    glCallList(jump_list);
+    glCallList(jump_list + highlight);
 }
 
 /*---------------------------------------------------------------------------*/