Reduce mapc dependences (need to split image.[ch])
[neverball] / share / geom.c
index b42b9a5..0f5dac7 100644 (file)
@@ -405,40 +405,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);
-
-            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);
-
-                    glColor4f(1.0f, 1.0f, 1.0f, 0.0f);
-                    glVertex3f(x, JUMP_HEIGHT, y);
-                }
-            }
-            glEnd();
-        }
-        glPopAttrib();
+       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, (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,86 +452,66 @@ void jump_free(void)
     jump_list = 0;
 }
 
-void jump_draw(void)
+void jump_draw(int highlight)
 {
-    glCallList(jump_list);
+    glCallList(jump_list + highlight);
 }
 
 /*---------------------------------------------------------------------------*/
 
 static GLuint swch_list;
 
+static GLfloat swch_colors[8][4] = {
+    {1.0f, 0.0f, 0.0f, 0.5f}, /* red out */
+    {1.0f, 0.0f, 0.0f, 0.0f},
+    {1.0f, 0.0f, 0.0f, 0.8f}, /* red in */
+    {1.0f, 0.0f, 0.0f, 0.0f},
+    {0.0f, 1.0f, 0.0f, 0.5f}, /* green out */
+    {0.0f, 1.0f, 0.0f, 0.0f},
+    {0.0f, 1.0f, 0.0f, 0.8f}, /* green in */
+    {0.0f, 1.0f, 0.0f, 0.0f}};
+
 void swch_init(int b)
 {
-    int i, n = b ? 32 : 8;
+    int k, i, n = b ? 32 : 8;
 
-    swch_list = glGenLists(2);
+    swch_list = glGenLists(4);
 
-    /* Create the ON display list. */
+    /* Create the display lists. */
 
-    glNewList(swch_list, GL_COMPILE);
+    for (k = 0; k < 4; 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);
-
-            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, 0.0f, 0.0f, 0.5f);
-                    glVertex3f(x, 0.0f, y);
-
-                    glColor4f(1.0f, 0.0f, 0.0f, 0.0f);
-                    glVertex3f(x, SWCH_HEIGHT, y);
-                }
-            }
-            glEnd();
-        }
-        glPopAttrib();
+       glNewList(swch_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);
+
+                       glColor4fv(swch_colors[2*k]);
+                       glVertex3f(x, 0.0f, y);
+
+                       glColor4fv(swch_colors[2*k+1]);
+                       glVertex3f(x, SWCH_HEIGHT, y);
+                   }
+               }
+               glEnd();
+           }
+           glPopAttrib();
+       }
+       glEndList();
     }
-    glEndList();
-
-    /* Create the OFF display list. */
-
-    glNewList(swch_list + 1, 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(0.0f, 1.0f, 0.0f, 0.5f);
-                    glVertex3f(x, 0.0f, y);
-
-                    glColor4f(0.0f, 1.0f, 0.0f, 0.0f);
-                    glVertex3f(x, SWCH_HEIGHT, y);
-                }
-            }
-            glEnd();
-        }
-        glPopAttrib();
-    }
-    glEndList();
 }
 
 void swch_free(void)
@@ -539,12 +522,9 @@ void swch_free(void)
     swch_list = 0;
 }
 
-void swch_draw(int b)
+void swch_draw(int b, int e)
 {
-    if (b)
-        glCallList(swch_list + 1);
-    else
-        glCallList(swch_list);
+    glCallList(swch_list + b*2 + e);
 }
 
 /*---------------------------------------------------------------------------*/