Example #1
0
void draw_gauge (double speed, double energy) {
    GLfloat xplane[4] = {1.0 / GAUGE_IMG_SIZE, 0.0, 0.0, 0.0 };
    GLfloat yplane[4] = {0.0, 1.0 / GAUGE_IMG_SIZE, 0.0, 0.0 };
    double y;
    double speedbar_frac;

    set_gl_options (GAUGE_BARS);

	if (Tex.TexID (GAUGE_ENERGY) < 1) return;
	if (Tex.TexID (GAUGE_SPEED) < 1) return;
	if (Tex.TexID (GAUGE_OUTLINE) < 1) return;
	
	Tex.BindTex (GAUGE_ENERGY);
    glTexGenfv (GL_S, GL_OBJECT_PLANE, xplane);
    glTexGenfv (GL_T, GL_OBJECT_PLANE, yplane);

    glPushMatrix();
	glTranslatef (param.x_resolution - GAUGE_WIDTH, 0, 0);
	Tex.BindTex (GAUGE_ENERGY);
	y = ENERGY_GAUGE_BOTTOM + energy * ENERGY_GAUGE_HEIGHT;

	glColor4fv (energy_background_color);
	glBegin (GL_QUADS);
	    glVertex2f (0.0, y);
	    glVertex2f (GAUGE_IMG_SIZE, y);
	    glVertex2f (GAUGE_IMG_SIZE, GAUGE_IMG_SIZE);
	    glVertex2f (0.0, GAUGE_IMG_SIZE);
	glEnd ();

	glColor4fv (energy_foreground_color);
	glBegin (GL_QUADS);
	    glVertex2f (0.0, 0.0);
	    glVertex2f (GAUGE_IMG_SIZE, 0.0);
	    glVertex2f (GAUGE_IMG_SIZE, y);
	    glVertex2f (0.0, y);
	glEnd ();

	speedbar_frac = 0.0;

	if  (speed > SPEEDBAR_GREEN_MAX_SPEED) {
	    speedbar_frac = SPEEDBAR_GREEN_FRACTION;
	    
	    if  (speed > SPEEDBAR_YELLOW_MAX_SPEED) {
			speedbar_frac += SPEEDBAR_YELLOW_FRACTION;
			if  (speed > SPEEDBAR_RED_MAX_SPEED) {
				speedbar_frac += SPEEDBAR_RED_FRACTION;
			} else {
				speedbar_frac += (speed - SPEEDBAR_YELLOW_MAX_SPEED) /
				(SPEEDBAR_RED_MAX_SPEED - SPEEDBAR_YELLOW_MAX_SPEED) * SPEEDBAR_RED_FRACTION;
			}
	    } else {
			speedbar_frac += (speed - SPEEDBAR_GREEN_MAX_SPEED) /
				(SPEEDBAR_YELLOW_MAX_SPEED - SPEEDBAR_GREEN_MAX_SPEED) * SPEEDBAR_YELLOW_FRACTION;
	    }	    
	} else {
	    speedbar_frac +=  speed/SPEEDBAR_GREEN_MAX_SPEED * SPEEDBAR_GREEN_FRACTION;
	}

	glColor4fv (speedbar_background_color);
	Tex.BindTex (GAUGE_SPEED);
	draw_partial_tri_fan (1.0);
	glColor4fv (hud_white);
	draw_partial_tri_fan (min (1.0, speedbar_frac));

	glColor4fv (hud_white);
	Tex.BindTex (GAUGE_OUTLINE);
	glBegin (GL_QUADS);
	    glVertex2f (0.0, 0.0);
	    glVertex2f (GAUGE_IMG_SIZE, 0.0);
	    glVertex2f (GAUGE_IMG_SIZE, GAUGE_IMG_SIZE);
	    glVertex2f (0.0, GAUGE_IMG_SIZE);
	glEnd();
    glPopMatrix();
}
Example #2
0
void
HUD::gauge(const int i, const double _speed, const double energy)
{
	const GLfloat xplane[4] = { 1.0/m_element[i].size, 0.0, 0.0, 0.0 };
    const GLfloat yplane[4] = { 0.0, 1.0/m_element[i].size, 0.0, 0.0 };

	//the gauge bar needs it's own mode
	//we reset the mode at the end of the function
    set_gl_options( GAUGE_BARS );

    gl::TexGen(GL_S, GL_OBJECT_PLANE, xplane);
    gl::TexGen(GL_T, GL_OBJECT_PLANE, yplane);

    gl::PushMatrix();
    {
	gl::Translate(m_resolution.x() - m_element[i].width,0);

	gl::Color(energy_background_color);

	gl::BindTexture(GL_TEXTURE_2D, m_energymaskTex);

	const double y = ENERGY_GAUGE_BOTTOM + energy * m_element[i].height;

	gl::Begin( GL_QUADS );
	{
	    gl::Vertex(0.0, y);
	    gl::Vertex(m_element[i].size, y);
	    gl::Vertex(m_element[i].size, m_element[i].size);
	    gl::Vertex(0.0, m_element[i].size);
	}
	gl::End();

	gl::Color(energy_foreground_color);

	gl::Begin(GL_QUADS);
	{
	    gl::Vertex(0.0, 0.0);
	    gl::Vertex(m_element[i].size, 0.0);
	    gl::Vertex(m_element[i].size, y);
	    gl::Vertex(0.0, y);
	}
	gl::End();

	// Calculate the fraction of the speed bar to fill
	double speedbar_frac = 0.0;

	if ( _speed > SPEEDBAR_GREEN_MAX_SPEED ) {
	    speedbar_frac = SPEEDBAR_GREEN_FRACTION;
	    
	    if ( _speed > SPEEDBAR_YELLOW_MAX_SPEED ) {
		speedbar_frac += SPEEDBAR_YELLOW_FRACTION;
		
		if ( _speed > SPEEDBAR_RED_MAX_SPEED ) {
		    speedbar_frac += SPEEDBAR_RED_FRACTION;
		} else {
		    speedbar_frac +=
			( _speed - SPEEDBAR_YELLOW_MAX_SPEED ) /
			( SPEEDBAR_RED_MAX_SPEED - SPEEDBAR_YELLOW_MAX_SPEED ) *
			SPEEDBAR_RED_FRACTION;
		}

	    } else {
		speedbar_frac += 
		    ( _speed - SPEEDBAR_GREEN_MAX_SPEED ) /
		    ( SPEEDBAR_YELLOW_MAX_SPEED - SPEEDBAR_GREEN_MAX_SPEED ) *
		    SPEEDBAR_YELLOW_FRACTION;
	    }
	    
	} else {
	    speedbar_frac +=  _speed/SPEEDBAR_GREEN_MAX_SPEED * 
		SPEEDBAR_GREEN_FRACTION;
	}

	gl::Color(speedbar_background_color);

	gl::BindTexture(GL_TEXTURE_2D, m_speedmaskTex);

	draw_partial_tri_fan(1.0);

	gl::Color(ppogl::Color::white);

	draw_partial_tri_fan( MIN( 1.0, speedbar_frac ) );

	gl::Color(ppogl::Color::white);

	gl::BindTexture(GL_TEXTURE_2D, m_outlineTex);

	gl::Begin(GL_QUADS);
	{
	    gl::Vertex(0.0, 0.0);
	    gl::Vertex(m_element[i].size, 0.0);
	    gl::Vertex(m_element[i].size, m_element[i].size);
	    gl::Vertex(0.0, m_element[i].size);
	}
	gl::End();
	
    }
    gl::PopMatrix();
	
	//we reset this because all other elements need TEXFONT
	set_gl_options( TEXFONT );
}
Example #3
0
void draw_gauge (ETR_DOUBLE speed, ETR_DOUBLE energy) {
#ifndef USE_GLES1
	static const GLfloat xplane[4] = {1.0 / GAUGE_IMG_SIZE, 0.0, 0.0, 0.0 };
	static const GLfloat yplane[4] = {0.0, 1.0 / GAUGE_IMG_SIZE, 0.0, 0.0 };
#endif
	ScopedRenderMode rm(GAUGE_BARS);

	if (Tex.GetTexture (GAUGE_ENERGY) == NULL) return;
	if (Tex.GetTexture (GAUGE_SPEED) == NULL) return;
	if (Tex.GetTexture (GAUGE_OUTLINE) == NULL) return;

	Tex.BindTex (GAUGE_ENERGY);
#ifndef USE_GLES1
	glTexGenfv (GL_S, GL_OBJECT_PLANE, xplane);
	glTexGenfv (GL_T, GL_OBJECT_PLANE, yplane);
#endif
	glPushMatrix();
	glTranslatef (Winsys.resolution.width - GAUGE_WIDTH, 0, 0);
	Tex.BindTex (GAUGE_ENERGY);
	ETR_DOUBLE y = ENERGY_GAUGE_BOTTOM + energy * ENERGY_GAUGE_HEIGHT;
	
#ifdef USE_GLES1
	const GLfloat tex1 [] = {
		0.0, y/GAUGE_IMG_SIZE,
		1.0, y/GAUGE_IMG_SIZE,
		1.0, 1.0f,
		0.0, 1.0f
	};
	const GLfloat tex2 [] = {
		0.0, 0.0f,
		1.0, 0.0f,
		1.0, y/GAUGE_IMG_SIZE,
		0.0, y/GAUGE_IMG_SIZE
	};
#endif
	const GLfloat vtx1 [] = {
		0.0, y,
		GAUGE_IMG_SIZE, y,
		GAUGE_IMG_SIZE, GAUGE_IMG_SIZE,
		0.0, GAUGE_IMG_SIZE
	};
	const GLfloat vtx2 [] = {
		0.0, 0.0,
		GAUGE_IMG_SIZE, 0.0,
		GAUGE_IMG_SIZE, y,
		0.0, y
	};
	glEnableClientState(GL_VERTEX_ARRAY);
#ifdef USE_GLES1
	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
#endif

	glColor4fv(energy_background_color);
	glVertexPointer(2, GL_FLOAT, 0, vtx1);
#ifdef USE_GLES1
	glTexCoordPointer(2, GL_FLOAT, 0, tex1);
#endif
	glDrawArrays(GL_TRIANGLE_FAN, 0, 4);

	glColor4fv(energy_foreground_color);
	glVertexPointer(2, GL_FLOAT, 0, vtx2);
#ifdef USE_GLES1
	glTexCoordPointer(2, GL_FLOAT, 0, tex2);
#endif
	glDrawArrays(GL_TRIANGLE_FAN, 0, 4);

	glDisableClientState(GL_VERTEX_ARRAY);
#ifdef USE_GLES1
	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
#endif

	ETR_DOUBLE speedbar_frac = 0.0;

	if (speed > SPEEDBAR_GREEN_MAX_SPEED) {
		speedbar_frac = SPEEDBAR_GREEN_FRACTION;

		if (speed > SPEEDBAR_YELLOW_MAX_SPEED) {
			speedbar_frac += SPEEDBAR_YELLOW_FRACTION;
			if (speed > SPEEDBAR_RED_MAX_SPEED) {
				speedbar_frac += SPEEDBAR_RED_FRACTION;
			} else {
				speedbar_frac += (speed - SPEEDBAR_YELLOW_MAX_SPEED) /
						(SPEEDBAR_RED_MAX_SPEED - SPEEDBAR_YELLOW_MAX_SPEED) * SPEEDBAR_RED_FRACTION;
			}
		} else {
			speedbar_frac += (speed - SPEEDBAR_GREEN_MAX_SPEED) /
					(SPEEDBAR_YELLOW_MAX_SPEED - SPEEDBAR_GREEN_MAX_SPEED) * SPEEDBAR_YELLOW_FRACTION;
		}	    
	} else {
		speedbar_frac +=  speed/SPEEDBAR_GREEN_MAX_SPEED * SPEEDBAR_GREEN_FRACTION;
	}

	glColor4fv (speedbar_background_color);
	Tex.BindTex (GAUGE_SPEED);
	draw_partial_tri_fan (1.0);
	glColor4fv (hud_white);
	draw_partial_tri_fan (min (1.0, speedbar_frac));

	glColor4fv (hud_white);
	Tex.BindTex (GAUGE_OUTLINE);
#ifdef USE_GLES1
	static const GLshort tex3 [] = {
		0, 0,
		1, 0,
		1, 1,
		0, 1
	};
#endif
	static const GLshort vtx3 [] = {
		0, 0,
		GAUGE_IMG_SIZE, 0,
		GAUGE_IMG_SIZE, GAUGE_IMG_SIZE,
		0, GAUGE_IMG_SIZE
	};
	glEnableClientState(GL_VERTEX_ARRAY);
#ifdef USE_GLES1
	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
#endif

	glVertexPointer(2, GL_SHORT, 0, vtx3);
#ifdef USE_GLES1
	glTexCoordPointer(2, GL_SHORT, 0, tex3);
#endif
	glDrawArrays(GL_TRIANGLE_FAN, 0, 4);

	glDisableClientState(GL_VERTEX_ARRAY);
#ifdef USE_GLES1
	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
#endif
	glPopMatrix();
}