public static float arenaToGLHeight(int height)
 {
     return(ArenaUtils.arenaToGLY(height) - ArenaUtils.arenaToGLY(0));
 }
        public void Draw()
        {
            float glWidthHalf  = ArenaUtils.glArenaHalfWidth;
            float glHeightHalf = ArenaUtils.glArenaHalfHeight;

            GL.Begin(BeginMode.Quads);

            // Arena Floor Grid
            if (gridHalfGLThickness > 0)
            {
                GL.Color3(gridColor.X, gridColor.Y, gridColor.Z);

                float columnGLYBottom = ArenaUtils.arenaToGLY(0);
                float columnGLYTop    = ArenaUtils.arenaToGLY(ArenaUtils.arenaHeight);
                for (int i = 0; i <= ArenaUtils.arenaWidth; i += 15)
                {
                    float columnGlX      = ArenaUtils.arenaToGLX(i);
                    float columnGLXLeft  = columnGlX - gridHalfGLThickness;
                    float columnGLXRight = columnGlX + gridHalfGLThickness;

                    for (int j = 0; j < ArenaUtils.arenaHeight; j += 10)
                    {
                        GL.Vertex3(columnGLXLeft, columnGLYTop, 0);
                        GL.Vertex3(columnGLXRight, columnGLYTop, 0);
                        GL.Vertex3(columnGLXRight, columnGLYBottom, 0);
                        GL.Vertex3(columnGLXLeft, columnGLYBottom, 0);
                    }
                }

                float rowGLXLeft  = ArenaUtils.arenaToGLX(0);
                float rowGLXRight = ArenaUtils.arenaToGLX(ArenaUtils.arenaWidth);
                for (int i = 0; i <= ArenaUtils.arenaHeight; i += 10)
                {
                    float rowGlY       = ArenaUtils.arenaToGLY(i);
                    float rowGLXTop    = rowGlY + gridHalfGLThickness;
                    float rowGLXBottom = rowGlY - gridHalfGLThickness;

                    for (int j = 0; j < ArenaUtils.arenaHeight; j += 10)
                    {
                        GL.Vertex3(rowGLXLeft, rowGLXTop, 0);
                        GL.Vertex3(rowGLXRight, rowGLXTop, 0);
                        GL.Vertex3(rowGLXRight, rowGLXBottom, 0);
                        GL.Vertex3(rowGLXLeft, rowGLXBottom, 0);
                    }
                }
            }

            // Walls
            GL.Color3(.3f, .3f, .3f);

            // Top Wall
            GL.Vertex3(-glWidthHalf, glHeightHalf, 0);
            GL.Vertex3(-glWidthHalf, glHeightHalf, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf, glHeightHalf, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf, glHeightHalf, 0);

            // Left Wall
            GL.Vertex3(-glWidthHalf, -glHeightHalf, 0);
            GL.Vertex3(-glWidthHalf, -glHeightHalf, Settings.glWallHeight);
            GL.Vertex3(-glWidthHalf, glHeightHalf, Settings.glWallHeight);
            GL.Vertex3(-glWidthHalf, glHeightHalf, 0);

            // Right Wall
            GL.Vertex3(glWidthHalf, -glHeightHalf, 0);
            GL.Vertex3(glWidthHalf, -glHeightHalf, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf, glHeightHalf, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf, glHeightHalf, 0);

            // Wall Caps
            GL.Color3(.4f, .4f, .4f);

            // Top Cap
            GL.Vertex3(-glWidthHalf, glHeightHalf, Settings.glWallHeight);
            GL.Vertex3(-glWidthHalf, glHeightHalf + Settings.glBoundaryWallWidth, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf, glHeightHalf + Settings.glBoundaryWallWidth, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf, glHeightHalf, Settings.glWallHeight);


            // Bottom Inner Wall
            GL.Color3(.3f, .3f, .3f);
            GL.Vertex3(-glWidthHalf, -glHeightHalf, 0);
            GL.Vertex3(-glWidthHalf, -glHeightHalf, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf, -glHeightHalf, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf, -glHeightHalf, 0);

            // Left Outer Wall
            GL.Vertex3(-glWidthHalf - Settings.glBoundaryWallWidth, -glHeightHalf - Settings.glBoundaryWallWidth, 0);
            GL.Vertex3(-glWidthHalf - Settings.glBoundaryWallWidth, -glHeightHalf - Settings.glBoundaryWallWidth, Settings.glWallHeight);
            GL.Vertex3(-glWidthHalf - Settings.glBoundaryWallWidth, glHeightHalf + Settings.glBoundaryWallWidth, Settings.glWallHeight);
            GL.Vertex3(-glWidthHalf - Settings.glBoundaryWallWidth, glHeightHalf + Settings.glBoundaryWallWidth, 0);

            // Right Outer Wall
            GL.Vertex3(glWidthHalf + Settings.glBoundaryWallWidth, -glHeightHalf - Settings.glBoundaryWallWidth, 0);
            GL.Vertex3(glWidthHalf + Settings.glBoundaryWallWidth, -glHeightHalf - Settings.glBoundaryWallWidth, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf + Settings.glBoundaryWallWidth, glHeightHalf + Settings.glBoundaryWallWidth, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf + Settings.glBoundaryWallWidth, glHeightHalf + Settings.glBoundaryWallWidth, 0);

            // Front Cover Wall
            GL.Vertex3(-glWidthHalf - Settings.glBoundaryWallWidth, -glHeightHalf - Settings.glBoundaryWallWidth, 0);
            GL.Vertex3(-glWidthHalf - Settings.glBoundaryWallWidth, -glHeightHalf - Settings.glBoundaryWallWidth, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf + Settings.glBoundaryWallWidth, -glHeightHalf - Settings.glBoundaryWallWidth, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf + Settings.glBoundaryWallWidth, -glHeightHalf - Settings.glBoundaryWallWidth, 0);


            GL.Color3(.4f, .4f, .4f);
            // Left Cap
            GL.Vertex3(-glWidthHalf, -glHeightHalf - Settings.glBoundaryWallWidth, Settings.glWallHeight);
            GL.Vertex3(-glWidthHalf - Settings.glBoundaryWallWidth, -glHeightHalf - Settings.glBoundaryWallWidth, Settings.glWallHeight);
            GL.Vertex3(-glWidthHalf - Settings.glBoundaryWallWidth, glHeightHalf + Settings.glBoundaryWallWidth, Settings.glWallHeight);
            GL.Vertex3(-glWidthHalf, glHeightHalf + Settings.glBoundaryWallWidth, Settings.glWallHeight);

            // Right Cap
            GL.Vertex3(glWidthHalf, -glHeightHalf - Settings.glBoundaryWallWidth, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf + Settings.glBoundaryWallWidth, -glHeightHalf - Settings.glBoundaryWallWidth, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf + Settings.glBoundaryWallWidth, glHeightHalf + Settings.glBoundaryWallWidth, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf, glHeightHalf + Settings.glBoundaryWallWidth, Settings.glWallHeight);

            // Bottom Cap
            GL.Vertex3(-glWidthHalf, -glHeightHalf, Settings.glWallHeight);
            GL.Vertex3(-glWidthHalf, -glHeightHalf - Settings.glBoundaryWallWidth, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf, -glHeightHalf - Settings.glBoundaryWallWidth, Settings.glWallHeight);
            GL.Vertex3(glWidthHalf, -glHeightHalf, Settings.glWallHeight);



            // Draw the non-boundary walls

            /*
             * for (int i = 0; i < game.level.walls.length; i++)
             * {
             *  Wall wall = game.level.walls[i];
             *
             *  // Walls
             *
             *  float glLeft = ArenaUtils.arenaToGLX(wall.x);
             *  float glRight = ArenaUtils.arenaToGLX(wall.rightLimit);
             *  float glBottom = ArenaUtils.arenaToGLY(wall.y);
             *  float glTop = ArenaUtils.arenaToGLY(wall.topLimit);
             *
             *  GL.Color3f(.3f, .3f, .3f);
             *  // Back
             *  GL.Vertex3(glLeft, glTop, Settings.glWallHeight);
             *  GL.Vertex3(glRight, glTop, Settings.glWallHeight);
             *  GL.Vertex3(glRight, glTop, 0);
             *  GL.Vertex3(glLeft, glTop, 0);
             *  // Front
             *  GL.Vertex3(glLeft, glBottom, Settings.glWallHeight);
             *  GL.Vertex3(glRight, glBottom, Settings.glWallHeight);
             *  GL.Vertex3(glRight, glBottom, 0);
             *  GL.Vertex3(glLeft, glBottom, 0);
             *  // Left
             *  GL.Vertex3(glLeft, glTop, Settings.glWallHeight);
             *  GL.Vertex3(glLeft, glBottom, Settings.glWallHeight);
             *  GL.Vertex3(glLeft, glBottom, 0);
             *  GL.Vertex3(glLeft, glTop, 0);
             *  // Right
             *  GL.Vertex3(glRight, glTop, Settings.glWallHeight);
             *  GL.Vertex3(glRight, glBottom, Settings.glWallHeight);
             *  GL.Vertex3(glRight, glBottom, 0);
             *  GL.Vertex3(glRight, glTop, 0);
             *  GL.Color3f(.4f, .4f, .4f);
             *  // Top
             *  GL.Vertex3(glLeft, glTop, Settings.glWallHeight);
             *  GL.Vertex3(glRight, glTop, Settings.glWallHeight);
             *  GL.Vertex3(glRight, glBottom, Settings.glWallHeight);
             *  GL.Vertex3(glLeft, glBottom, Settings.glWallHeight);
             * }
             */

            GL.End();
        }
 // TODO: [Performance] [Cache] faster by caching arenaToGLX(0) and arenaToGLY(0)
 public static float arenaToGLWidth(int width)
 {
     return(ArenaUtils.arenaToGLX(width) - ArenaUtils.arenaToGLX(0));
 }