コード例 #1
0
void CResourceBar::Draw(void)
{
	if (disabled) {
		return;
	}

	const CTeam* myTeam = gs->Team(gu->myTeam);

	GLfloat x1,y1,x2,y2,x;

	glDisable(GL_TEXTURE_2D);
	glEnable(GL_BLEND);
	glDisable(GL_ALPHA_TEST);

	glBegin(GL_QUADS);

	// Box
	glColor4f(0.2f,0.2f,0.2f,guiAlpha);
	glVertex2f(box.x1, box.y1);
	glVertex2f(box.x1, box.y2);
	glVertex2f(box.x2, box.y2);
	glVertex2f(box.x2, box.y1);

	//layout metal in box
	GLfloat metalx = box.x1+.01f;
	GLfloat metaly = box.y1+.004f;

	GLfloat metalbarx1 = metalx+.08f;
	GLfloat metalbarx2 = box.x1+(box.x2-box.x1)/2.0f-.03f;

	// metal layout
	GLfloat metalbarlen = metalbarx2-metalbarx1;
	x1 = metalbarx1;
	y1 = metaly+.014f;
	x2 = metalbarx2;
	y2 = metaly+.020f;
	x = (1.0f * myTeam->metal / myTeam->metalStorage) * metalbarlen;

	//metal draw
	glColor4f(0.8f,0.8f,0.8f,0.2f);
	glVertex2f(x1, y1);
	glVertex2f(x1, y2);
	glVertex2f(x2, y2);
	glVertex2f(x2, y1);

	glColor4f(1.0f,1.0f,1.0f,1.0f);
	glVertex2f(x1, y1);
	glVertex2f(x1, y2);
	glVertex2f(x1+x, y2);
	glVertex2f(x1+x, y1);

	x = myTeam->metalShare*metalbarlen;
	glColor4f(0.9f,0.2f,0.2f,0.7f);
	glVertex2f(x1+x+0.003f, y1-0.003f);
	glVertex2f(x1+x+0.003f, y2+0.003f);
	glVertex2f(x1+x-0.003f, y2+0.003f);
	glVertex2f(x1+x-0.003f, y1-0.003f);

	// Energy

	//layout energy in box
	GLfloat energyx = box.x1 + 0.4f;
	GLfloat energyy = box.y1 + 0.004f;

	GLfloat energybarx1 = energyx + 0.08f;
	GLfloat energybarx2 = box.x2 - 0.03f;

	//energy layout
	GLfloat energybarlen = energybarx2-energybarx1;
	x1 = energybarx1;
	y1 = energyy + 0.014f;
	x2 = energybarx2;
	y2 = energyy + 0.020f;
	x = (1.0f * myTeam->energy / myTeam->energyStorage) * energybarlen;

	//energy draw
	glColor4f(0.8f,0.8f,0.2f,0.2f);
	glVertex2f(x1, y1);
	glVertex2f(x1, y2);
	glVertex2f(x2, y2);
	glVertex2f(x2, y1);

	glColor4f(1.0f,1.0f,0.2f,1.0f);
	glVertex2f(x1, y1);
	glVertex2f(x1, y2);
	glVertex2f(x1+x, y2);
	glVertex2f(x1+x, y1);

	x=myTeam->energyShare*energybarlen;
	glColor4f(0.9f,0.2f,0.2f,0.7f);
	glVertex2f(x1+x+0.003f, y1-0.003f);
	glVertex2f(x1+x+0.003f, y2+0.003f);
	glVertex2f(x1+x-0.003f, y2+0.003f);
	glVertex2f(x1+x-0.003f, y1-0.003f);
	glEnd();

	// draw labels

	glEnable(GL_TEXTURE_2D);
	glColor4f(1,1,1,0.8f);

	const float headerFontScale = 1.2f, labelsFontScale = 1.0f;

	smallFont->glPrintAt(metalx - 0.004f, metaly, headerFontScale, "Metal");

	smallFont->glPrintAt(metalbarx2 - 0.01f, metaly - 0.005f, labelsFontScale,
	                FloatToSmallString(myTeam->metalStorage).c_str());
	smallFont->glPrintAt(metalbarx1 + metalbarlen / 2.0f, metaly - 0.005f, labelsFontScale,
	                FloatToSmallString(myTeam->metal).c_str());

	glColor4f(1.0f, 0.4f, 0.4f, 1.0f); // Expenses
	smallFont->glFormatAt(metalx + 0.044f, metaly - 0.005f, labelsFontScale, "-%s(-%s)",
	                FloatToSmallString(fabs(myTeam->prevMetalPull)).c_str(),
	                FloatToSmallString(fabs(myTeam->metalSent)).c_str());

	glColor4f(0.6f, 1.0f, 0.6f, 0.95f); // Income
	smallFont->glFormatAt(metalx + 0.044f, metaly + 0.008f, labelsFontScale, "+%s",
	                FloatToSmallString(myTeam->prevMetalIncome).c_str());
	                // FloatToSmallString(myTeam->metalReceived).c_str());

	glColor4f(1,1,0.4f,0.8f);
	smallFont->glPrintAt(energyx - 0.018f, energyy, headerFontScale, "Energy");

	glColor4f(1,1,1,0.8f);
	smallFont->glPrintAt(energybarx2 - 0.01f, energyy - 0.005f, labelsFontScale,
	                FloatToSmallString(myTeam->energyStorage).c_str());
	smallFont->glPrintAt(energybarx1 + energybarlen / 2.0f, energyy - 0.005f, labelsFontScale,
	                FloatToSmallString(myTeam->energy).c_str());

	glColor4f(1.0f,.4f,.4f,1.0f); // Expenses
	smallFont->glFormatAt(energyx + 0.044f, energyy - 0.005f, labelsFontScale, "-%s(-%s)",
	                FloatToSmallString(fabs(myTeam->prevEnergyPull)).c_str(),
	                FloatToSmallString(fabs(myTeam->energySent)).c_str());

	glColor4f(.6f,1.0f,.6f,.95f); // Income
	smallFont->glFormatAt(energyx + 0.044f, energyy + 0.008f, labelsFontScale, "+%s",
	                FloatToSmallString(myTeam->prevEnergyIncome).c_str());
	                // FloatToSmallString(myTeam->energyReceived).c_str());

	glDisable(GL_TEXTURE_2D);

	glLoadIdentity();
}
コード例 #2
0
void CResourceBar::Draw(void)
{
	float mx=float(mouse->lastx)/gu->screenx;
	float my=(gu->screeny-float(mouse->lasty))/gu->screeny;

	GLfloat x1,y1,x2,y2,x;

	// Box
	glDisable(GL_TEXTURE_2D);
	glEnable(GL_BLEND);
	glDisable(GL_ALPHA_TEST);
	glColor4f(0.2f,0.2f,0.2f,0.4f);

	glBegin(GL_QUADS);
	glVertex2f(box.x1, box.y1);
	glVertex2f(box.x1, box.y2);
	glVertex2f(box.x2, box.y2);
	glVertex2f(box.x2, box.y1);
	glVertex2f(box.x1, box.y1);
	glEnd();

	//layout metal in box
	GLfloat metalx = box.x1+.01f;
	GLfloat metaly = box.y1+.002;

	GLfloat metalbarx1 = metalx+.08f;
	GLfloat metalbarx2 = box.x1+(box.x2-box.x1)/2.0-.03f;

	//metal layout
	GLfloat metalbarlen = metalbarx2-metalbarx1;
	x1=metalbarx1;
	y1=metaly+.014f;
	x2=metalbarx2;
	y2=metaly+.020f;
	x=(1.0*gs->Team(gu->myTeam)->metal/gs->Team(gu->myTeam)->metalStorage)*metalbarlen;
	
	glEnable(GL_TEXTURE_2D);
	glColor4f(1,1,1,0.8f);
	font->glPrintAt(metalx,metaly+.005f,0.7f,"");
	glDisable(GL_TEXTURE_2D);

	//metal draw
	glColor4f(0.8f,0.8f,0.8f,0.2f);
	glBegin(GL_QUADS);
	glVertex2f(x1, y1);
	glVertex2f(x1, y2);
	glVertex2f(x2, y2);
	glVertex2f(x2, y1);
	glEnd();

	glColor4f(1.0f,1.0f,1.0f,1.0f);
	glBegin(GL_QUADS);
	glVertex2f(x1, y1);
	glVertex2f(x1, y2);
	glVertex2f(x1+x, y2);
	glVertex2f(x1+x, y1);
	glEnd();

	x=gs->Team(gu->myTeam)->metalShare*metalbarlen;
	glColor4f(0.9f,0.2f,0.2f,0.7f);
	glBegin(GL_QUADS);
	glVertex2f(x1+x+0.003, y1-0.003);
	glVertex2f(x1+x+0.003, y2+0.003);
	glVertex2f(x1+x-0.003, y2+0.003);
	glVertex2f(x1+x-0.003, y1-0.003);
	glEnd();

	glEnable(GL_TEXTURE_2D);
	glColor4f(1,1,1,0.8f);
	
	font->glPrintAt(metalx-0.004,metaly+.005f,0.7f,"Metal");

	font->glPrintAt(metalbarx2-.01f,metaly,0.5,"%s",FloatToSmallString(gs->Team(gu->myTeam)->metalStorage).c_str());
	font->glPrintAt(metalbarx1+metalbarlen/2.0,metaly/*+.02f*/,0.5,"%s",FloatToSmallString(gs->Team(gu->myTeam)->metal).c_str());

	glColor4f(1.0f,.4f,.4f,1.0f); // Expenses
	font->glPrintAt(metalx+.044f,metaly-0.002f,0.5,"-%s(-%s)",FloatToSmallString(fabs(gs->Team(gu->myTeam)->oldMetalExpense)).c_str(),FloatToSmallString(fabs(gs->Team(gu->myTeam)->oldMetalUpkeep)).c_str());

	glColor4f(.6f,1.0f,.6f,.95f); // Income
	font->glPrintAt(metalx+.044f,metaly+.01f,0.5,"+%s",FloatToSmallString(gs->Team(gu->myTeam)->oldMetalIncome).c_str());

	// Energy
	glDisable(GL_TEXTURE_2D);

	//layout energy in box
	GLfloat energyx = box.x1+0.37f;
	GLfloat energyy = box.y1+0.002;

	GLfloat energybarx1 = energyx+.08f;
	GLfloat energybarx2 = box.x2-0.03f;

	//energy layout
	GLfloat energybarlen = energybarx2-energybarx1;
	x1=energybarx1;
	y1=energyy+.014f;
	x2=energybarx2;
	y2=energyy+.020f;
	x=(1.0*gs->Team(gu->myTeam)->energy/gs->Team(gu->myTeam)->energyStorage)*energybarlen;
	
	glEnable(GL_TEXTURE_2D);
	glColor4f(1,1,1,0.8f);
	font->glPrintAt(energyx,energyy+.005f,0.7f,"");
	glDisable(GL_TEXTURE_2D);

	//energy draw
	glColor4f(0.8f,0.8f,0.2f,0.2f);
	glBegin(GL_QUADS);
	glVertex2f(x1, y1);
	glVertex2f(x1, y2);
	glVertex2f(x2, y2);
	glVertex2f(x2, y1);
	glEnd();

	glColor4f(1.0f,1.0f,0.2f,1.0f);
	glBegin(GL_QUADS);
	glVertex2f(x1, y1);
	glVertex2f(x1, y2);
	glVertex2f(x1+x, y2);
	glVertex2f(x1+x, y1);
	glEnd();

	x=gs->Team(gu->myTeam)->energyShare*energybarlen;
	glColor4f(0.9f,0.2f,0.2f,0.7f);
	glBegin(GL_QUADS);
	glVertex2f(x1+x+0.003, y1-0.003);
	glVertex2f(x1+x+0.003, y2+0.003);
	glVertex2f(x1+x-0.003, y2+0.003);
	glVertex2f(x1+x-0.003, y1-0.003);
	glEnd();

	glEnable(GL_TEXTURE_2D);
	glColor4f(1,1,0.4,0.8f);
	
	font->glPrintAt(energyx-0.018,energyy+.005f,0.7f,"Energy");

	glColor4f(1,1,1,0.8f);
	font->glPrintAt(energybarx2-.01f,energyy,0.5,"%s",FloatToSmallString(gs->Team(gu->myTeam)->energyStorage).c_str());
	font->glPrintAt(energybarx1+energybarlen/2.0,energyy/*+.02f*/,0.5,"%s",FloatToSmallString(gs->Team(gu->myTeam)->energy).c_str());

	glColor4f(1.0f,.4f,.4f,1.0f); // Expenses
	font->glPrintAt(energyx+.044f,energyy-0.002f,0.5,"-%s(-%s)",FloatToSmallString(fabs(gs->Team(gu->myTeam)->oldEnergyExpense)).c_str(),FloatToSmallString(fabs(gs->Team(gu->myTeam)->oldEnergyUpkeep)).c_str());

	glColor4f(.6f,1.0f,.6f,.95f); // Income
	font->glPrintAt(energyx+.044f,energyy+.01f,0.5,"+%s",FloatToSmallString(gs->Team(gu->myTeam)->oldEnergyIncome).c_str());

	glDisable(GL_TEXTURE_2D);

	glLoadIdentity();
}
コード例 #3
0
void CEndGameBox::Draw()
{
	if (disabled) {
		return;
	}

	float mx=MouseX(mouse->lastx);
	float my=MouseY(mouse->lasty);

	glDisable(GL_TEXTURE_2D);
	glEnable(GL_BLEND);
	glDisable(GL_ALPHA_TEST);

	// Large Box
	glColor4f(0.2f,0.2f,0.2f,guiAlpha);
	DrawBox(box);

	glColor4f(0.2f,0.2f,0.7f,guiAlpha);
	if(dispMode==0){
		DrawBox(box+playerBox);
	} else if(dispMode==1){
		DrawBox(box+sumBox);
	} else {
		DrawBox(box+difBox);
	}

	if(InBox(mx,my,box+exitBox)){
		glColor4f(0.7f,0.2f,0.2f,guiAlpha);
		DrawBox(box+exitBox);
	}
	if(InBox(mx,my,box+playerBox)){
		glColor4f(0.7f,0.2f,0.2f,guiAlpha);
		DrawBox(box+playerBox);
	}
	if(InBox(mx,my,box+sumBox)){
		glColor4f(0.7f,0.2f,0.2f,guiAlpha);
		DrawBox(box+sumBox);
	}
	if(InBox(mx,my,box+difBox)){
		glColor4f(0.7f,0.2f,0.2f,guiAlpha);
		DrawBox(box+difBox);
	}

	glEnable(GL_TEXTURE_2D);
	glColor4f(1,1,1,0.8f);
	font->glPrintAt(box.x1+exitBox.x1+0.025f,box.y1+exitBox.y1+0.005f,1,"Exit");
	font->glPrintAt(box.x1+playerBox.x1+0.015f,box.y1+playerBox.y1+0.005f,0.7f,"Player stats");
	font->glPrintAt(box.x1+sumBox.x1+0.015f,box.y1+sumBox.y1+0.005f,0.7f,"Team stats");
	font->glPrintAt(box.x1+difBox.x1+0.015f,box.y1+difBox.y1+0.005f,0.7f,"Team delta stats");

	if(gs->Team(gu->myTeam)->isDead){
		font->glPrintAt(box.x1+0.25f,box.y1+0.65f,1,"You lost the game");
	} else {
		font->glPrintAt(box.x1+0.25f,box.y1+0.65f,1,"You won the game");
	}

	if(dispMode==0){
		float xpos=0.01f;

		string headers[]={"Name","MC/m","MP/m","KP/m","Cmds/m","ACS"};

		for(int a=0;a<6;++a){
			font->glPrintAt(box.x1+xpos,box.y1+0.55f,0.8f,headers[a].c_str());
			xpos+=0.1f;
		}

		float ypos=0.5f;
		for(int a=0;a<gs->activePlayers;++a){
			if(gs->players[a]->currentStats->mousePixels==0)
				continue;
			char values[6][100];

			sprintf(values[0],"%s",	gs->players[a]->playerName.c_str());
			sprintf(values[1],"%i",(int)(gs->players[a]->currentStats->mouseClicks*60/game->totalGameTime));
			sprintf(values[2],"%i",(int)(gs->players[a]->currentStats->mousePixels*60/game->totalGameTime));
			sprintf(values[3],"%i",(int)(gs->players[a]->currentStats->keyPresses*60/game->totalGameTime));
			sprintf(values[4],"%i",(int)(gs->players[a]->currentStats->numCommands*60/game->totalGameTime));
			sprintf(values[5],"%i",(int)
				( gs->players[a]->currentStats->numCommands != 0 ) ?
				( gs->players[a]->currentStats->unitCommands/gs->players[a]->currentStats->numCommands) :
				( 0 ));

			float xpos=0.01f;
			for(int a=0;a<6;++a){
				font->glPrintAt(box.x1+xpos,box.y1+ypos,0.8f,values[a]);
				xpos+=0.1f;
			}

			ypos-=0.02f;
		}
	} else {
		if(stats.empty())
			FillTeamStats();

		glBindTexture(GL_TEXTURE_2D, graphTex);
		CVertexArray* va=GetVertexArray();
		va->Initialize();

		va->AddVertexT(float3(box.x1+0.15f, box.y1+0.08f, 0),0,0);
		va->AddVertexT(float3(box.x1+0.69f, box.y1+0.08f, 0),4,0);
		va->AddVertexT(float3(box.x1+0.69f, box.y1+0.62f, 0),4,4);
		va->AddVertexT(float3(box.x1+0.15f, box.y1+0.62f, 0),0,4);

		va->DrawArrayT(GL_QUADS);

		if(mx>box.x1+0.01f && mx<box.x1+0.12f && my<box.y1+0.57f && my>box.y1+0.571f-stats.size()*0.02f){

			int sel=(int)floor(-(my-box.y1-0.57f)*50);

			glColor4f(0.7f,0.2f,0.2f,guiAlpha);
			glDisable(GL_TEXTURE_2D);
			CVertexArray* va=GetVertexArray();
			va->Initialize();

			va->AddVertex0(float3(box.x1+0.01f, box.y1+0.55f-sel*0.02f , 0));
			va->AddVertex0(float3(box.x1+0.01f, box.y1+0.55f-sel*0.02f+0.02f , 0));
			va->AddVertex0(float3(box.x1+0.12f, box.y1+0.55f-sel*0.02f+0.02f , 0));
			va->AddVertex0(float3(box.x1+0.12f, box.y1+0.55f-sel*0.02f , 0));

			va->DrawArray0(GL_QUADS);
			glEnable(GL_TEXTURE_2D);
			glColor4f(1,1,1,0.8f);
		}
		float ypos=0.55f;
		for(int a=0;a<stats.size();++a){
			font->glPrintAt(box.x1+0.01f,box.y1+ypos,0.8f,stats[a].name.c_str());
			ypos-=0.02f;
		}
		float maxy=1;

		if(dispMode==1)
			maxy=std::max(stats[stat1].max,stat2!=-1?stats[stat2].max:0);
		else
			maxy=std::max(stats[stat1].maxdif,stat2!=-1?stats[stat2].maxdif:0)/CTeam::statsPeriod;

		int numPoints=stats[0].values[0].size();
		float scalex=0.54f/max(1.0f,numPoints-1.0f);
		float scaley=0.54f/maxy;

		for (int a = 0; a < 5; ++a) {
			font->glPrintAt(box.x1 + 0.12f, box.y1 + 0.07f + (a * 0.135f), 0.8f, "%s",
			                FloatToSmallString(maxy * 0.25f * a).c_str());
			font->glPrintAt(box.x1 + 0.135f + (a * 0.135f), box.y1 + 0.057f, 0.8f, "%i:%2i",
			                int(a * 0.25f * numPoints * CTeam::statsPeriod / 60),
			                int(a * 0.25f * (numPoints - 1) * CTeam::statsPeriod) % 60);
		}

		font->glPrintAt(box.x1+0.55f,box.y1+0.65f,0.8f,"%s",stats[stat1].name.c_str());
		font->glPrintAt(box.x1+0.55f,box.y1+0.63f,0.8f,"%s",stat2!=-1?stats[stat2].name.c_str():"");

		glDisable(GL_TEXTURE_2D);
		glBegin(GL_LINES);
				glVertex3f(box.x1+0.50f,box.y1+0.66f,0);
				glVertex3f(box.x1+0.55f,box.y1+0.66f,0);
		glEnd();

		glLineStipple(3,0x5555);
		glEnable(GL_LINE_STIPPLE);
		glBegin(GL_LINES);
				glVertex3f(box.x1+0.50f,box.y1+0.64f,0);
				glVertex3f(box.x1+0.55f,box.y1+0.64f,0);
		glEnd();
		glDisable(GL_LINE_STIPPLE);

		for(int team=0; team<gs->activeTeams; team++){
			if (gs->Team(team)->gaia) continue;
			glColor4ubv(gs->Team(team)->color);

			glBegin(GL_LINE_STRIP);
			for(int a=0;a<numPoints;++a){
				float value=0;
				if(dispMode==1)
					value=stats[stat1].values[team][a];
				else if(a>0)
					value=(stats[stat1].values[team][a]-stats[stat1].values[team][a-1])/CTeam::statsPeriod;

				glVertex3f(box.x1+0.15f+a*scalex,box.y1+0.08f+value*scaley,0);
			}
			glEnd();

			if (stat2!=-1) {
				glLineStipple(3,0x5555);
				glEnable(GL_LINE_STIPPLE);

				glBegin(GL_LINE_STRIP);
				for(int a=0;a<numPoints;++a){
					float value=0;
					if(dispMode==1)
						value=stats[stat2].values[team][a];
					else if(a>0)
						value=(stats[stat2].values[team][a]-stats[stat2].values[team][a-1])/CTeam::statsPeriod;

					glVertex3f(box.x1+0.15f+a*scalex,box.y1+0.08f+value*scaley,0);
				}
				glEnd();

				glDisable(GL_LINE_STIPPLE);
			}
		}
	}
}
コード例 #4
0
ファイル: ResourceBar.cpp プロジェクト: niavok/spring
void CResourceBar::Draw()
{
    if (!enabled) {
        return;
    }

    const CTeam* myTeam = teamHandler->Team(gu->myTeam);

    GLfloat x1, y1, x2, y2, x;

    glDisable(GL_TEXTURE_2D);
    glEnable(GL_BLEND);
    glDisable(GL_ALPHA_TEST);

    glBegin(GL_QUADS);

    // Box
    glColor4f(0.2f,0.2f,0.2f,guiAlpha);
    glVertex2f(box.x1, box.y1);
    glVertex2f(box.x1, box.y2);
    glVertex2f(box.x2, box.y2);
    glVertex2f(box.x2, box.y1);

    //layout metal in box
    GLfloat metalx = box.x1 + .01f;
    GLfloat metaly = box.y1 + .004f;

    GLfloat metalbarx1 = metalx + .08f;
    GLfloat metalbarx2 = box.x1 + (box.x2 - box.x1) / 2.0f - .03f;

    // metal layout
    GLfloat metalbarlen = metalbarx2-metalbarx1;
    x1 = metalbarx1;
    y1 = metaly + .014f;
    x2 = metalbarx2;
    y2 = metaly + .020f;
    x = (1.0f * myTeam->metal / myTeam->metalStorage) * metalbarlen;

    //metal draw
    glColor4f(0.8f, 0.8f, 0.8f, 0.2f);
    glVertex2f(x1, y1);
    glVertex2f(x1, y2);
    glVertex2f(x2, y2);
    glVertex2f(x2, y1);

    glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
    glVertex2f(x1,     y1);
    glVertex2f(x1,     y2);
    glVertex2f(x1 + x, y2);
    glVertex2f(x1 + x, y1);

    x = myTeam->metalShare*metalbarlen;
    glColor4f(0.9f, 0.2f, 0.2f, 0.7f);
    glVertex2f(x1 + x + 0.003f, y1 - 0.003f);
    glVertex2f(x1 + x + 0.003f, y2 + 0.003f);
    glVertex2f(x1 + x - 0.003f, y2 + 0.003f);
    glVertex2f(x1 + x - 0.003f, y1 - 0.003f);

    // Energy

    //layout energy in box
    GLfloat energyx = box.x1 + 0.4f;
    GLfloat energyy = box.y1 + 0.004f;

    GLfloat energybarx1 = energyx + 0.08f;
    GLfloat energybarx2 = box.x2 - 0.03f;

    //energy layout
    GLfloat energybarlen = energybarx2 - energybarx1;
    x1 = energybarx1;
    y1 = energyy + 0.014f;
    x2 = energybarx2;
    y2 = energyy + 0.020f;
    x = (1.0f * myTeam->energy / myTeam->energyStorage) * energybarlen;

    //energy draw
    glColor4f(0.8f, 0.8f, 0.2f, 0.2f);
    glVertex2f(x1, y1);
    glVertex2f(x1, y2);
    glVertex2f(x2, y2);
    glVertex2f(x2, y1);

    glColor4f(1.0f, 1.0f, 0.2f, 1.0f);
    glVertex2f(x1,     y1);
    glVertex2f(x1,     y2);
    glVertex2f(x1 + x, y2);
    glVertex2f(x1 + x, y1);

    x=myTeam->energyShare*energybarlen;
    glColor4f(0.9f, 0.2f, 0.2f, 0.7f);
    glVertex2f(x1 + x + 0.003f, y1 - 0.003f);
    glVertex2f(x1 + x + 0.003f, y2 + 0.003f);
    glVertex2f(x1 + x - 0.003f, y2 + 0.003f);
    glVertex2f(x1 + x - 0.003f, y1 - 0.003f);
    glEnd();


    smallFont->Begin();

    const float headerFontSize = (box.y2 - box.y1) * 0.7 * globalRendering->viewSizeY;
    const float labelsFontSize = (box.y2 - box.y1) * 0.5 * globalRendering->viewSizeY;
    const int fontOptions = (guihandler && guihandler->GetOutlineFonts()) ? FONT_OUTLINE | FONT_NORM : FONT_NORM;

    smallFont->SetTextColor(0.8f, 0.8f, 1, 0.8f);
    smallFont->glPrint(metalx - 0.004f,  (box.y1 + box.y2) * 0.5, headerFontSize, FONT_VCENTER | fontOptions, "Metal");

    smallFont->SetTextColor(1, 1, 0.4f, 0.8f);
    smallFont->glPrint(energyx - 0.018f, (box.y1 + box.y2) * 0.5, headerFontSize, FONT_VCENTER | fontOptions, "Energy");

    smallFont->SetTextColor(1.0f, 0.3f, 0.3f, 1.0f); // Expenses
    smallFont->glFormat(metalx + 0.044f, box.y1, labelsFontSize, FONT_DESCENDER | fontOptions, "-%s(-%s)",
                        FloatToSmallString(fabs(myTeam->prevMetalPull)).c_str(),
                        FloatToSmallString(fabs(myTeam->metalSent)).c_str());
    smallFont->glFormat(energyx + 0.044f, box.y1, labelsFontSize, FONT_DESCENDER | fontOptions, "-%s(-%s)",
                        FloatToSmallString(fabs(myTeam->prevEnergyPull)).c_str(),
                        FloatToSmallString(fabs(myTeam->energySent)).c_str());

    smallFont->SetTextColor(0.4f, 1.0f, 0.4f, 0.95f); // Income
    smallFont->glFormat(metalx + 0.044f, box.y2-2*globalRendering->pixelY, labelsFontSize, FONT_ASCENDER | fontOptions, "+%s",
                        FloatToSmallString(myTeam->prevMetalIncome).c_str());
    // FloatToSmallString(myTeam->metalReceived).c_str());
    smallFont->glFormat(energyx + 0.044f, box.y2-2*globalRendering->pixelY, labelsFontSize, FONT_ASCENDER | fontOptions, "+%s",
                        FloatToSmallString(myTeam->prevEnergyIncome).c_str());
    // FloatToSmallString(myTeam->energyReceived).c_str());

    smallFont->SetTextColor(1, 1, 1, 0.8f);
    smallFont->glPrint(energybarx2 - 0.01f, energyy - 0.005f, labelsFontSize, fontOptions,
                       FloatToSmallString(myTeam->energyStorage));
    smallFont->glPrint(energybarx1 + energybarlen / 2.0f, energyy - 0.005f, labelsFontSize, fontOptions,
                       FloatToSmallString(myTeam->energy));

    smallFont->glPrint(metalbarx2 - 0.01f, metaly - 0.005f, labelsFontSize, fontOptions,
                       FloatToSmallString(myTeam->metalStorage));
    smallFont->glPrint(metalbarx1 + metalbarlen / 2.0f, metaly - 0.005f, labelsFontSize, fontOptions,
                       FloatToSmallString(myTeam->metal));

    smallFont->End();
}
コード例 #5
0
void CResourceBar::Draw(void)
{
	const float mx=float(mouse->lastx - gu->screenxPos) / gu->screenx;
	const float my=(gu->screeny - float(mouse->lasty)) / gu->screeny;

	const CTeam* myTeam = gs->Team(gu->myTeam);

	GLfloat x1,y1,x2,y2,x;

	// Box
	glDisable(GL_TEXTURE_2D);
	glEnable(GL_BLEND);
	glDisable(GL_ALPHA_TEST);
	glColor4f(0.2f,0.2f,0.2f,guiAlpha);

	glBegin(GL_QUADS);
	glVertex2f(box.x1, box.y1);
	glVertex2f(box.x1, box.y2);
	glVertex2f(box.x2, box.y2);
	glVertex2f(box.x2, box.y1);
	glVertex2f(box.x1, box.y1);
	glEnd();

	//layout metal in box
	GLfloat metalx = box.x1+.01f;
	GLfloat metaly = box.y1+.002f;

	GLfloat metalbarx1 = metalx+.08f;
	GLfloat metalbarx2 = box.x1+(box.x2-box.x1)/2.0f-.03f;

	// metal layout
	GLfloat metalbarlen = metalbarx2-metalbarx1;
	x1 = metalbarx1;
	y1 = metaly+.014f;
	x2 = metalbarx2;
	y2 = metaly+.020f;
	x = (1.0f * myTeam->metal / myTeam->metalStorage) * metalbarlen;
	
	glEnable(GL_TEXTURE_2D);
	glColor4f(1,1,1,0.8f);
	font->glPrintAt(metalx, metaly + 0.005f, 0.7f, "");
	glDisable(GL_TEXTURE_2D);

	//metal draw
	glColor4f(0.8f,0.8f,0.8f,0.2f);
	glBegin(GL_QUADS);
	glVertex2f(x1, y1);
	glVertex2f(x1, y2);
	glVertex2f(x2, y2);
	glVertex2f(x2, y1);
	glEnd();

	glColor4f(1.0f,1.0f,1.0f,1.0f);
	glBegin(GL_QUADS);
	glVertex2f(x1, y1);
	glVertex2f(x1, y2);
	glVertex2f(x1+x, y2);
	glVertex2f(x1+x, y1);
	glEnd();
	
	x = myTeam->metalShare*metalbarlen;
	glColor4f(0.9f,0.2f,0.2f,0.7f);
	glBegin(GL_QUADS);
	glVertex2f(x1+x+0.003f, y1-0.003f);
	glVertex2f(x1+x+0.003f, y2+0.003f);
	glVertex2f(x1+x-0.003f, y2+0.003f);
	glVertex2f(x1+x-0.003f, y1-0.003f);
	glEnd();

	glEnable(GL_TEXTURE_2D);
	glColor4f(1,1,1,0.8f);
	
	font->glPrintAt(metalx - 0.004f, metaly + 0.005f, 0.7f, "Metal");

	font->glPrintAt(metalbarx2 - 0.01f, metaly, 0.5f, "%s",
	                FloatToSmallString(myTeam->metalStorage).c_str());
	font->glPrintAt(metalbarx1 + metalbarlen / 2.0f, metaly /*+.02f*/, 0.5f, "%s",
	                FloatToSmallString(myTeam->metal).c_str());

	glColor4f(1.0f, 0.4f, 0.4f, 1.0f); // Expenses
	font->glPrintAt(metalx + 0.044f, metaly - 0.002f, 0.5f, "-%s(-%s)",
	                FloatToSmallString(fabs(myTeam->prevMetalPull)).c_str(),
	                FloatToSmallString(fabs(myTeam->metalSent)).c_str());

	glColor4f(0.6f, 1.0f, 0.6f, 0.95f); // Income
	font->glPrintAt(metalx + 0.044f, metaly + 0.01f, 0.5f, "+%s",
	                FloatToSmallString(myTeam->prevMetalIncome).c_str());
	                // FloatToSmallString(myTeam->metalReceived).c_str());

	// Energy
	glDisable(GL_TEXTURE_2D);

	//layout energy in box
	GLfloat energyx = box.x1 + 0.4f;
	GLfloat energyy = box.y1 + 0.002f;

	GLfloat energybarx1 = energyx + 0.08f;
	GLfloat energybarx2 = box.x2 - 0.03f;

	//energy layout
	GLfloat energybarlen = energybarx2-energybarx1;
	x1 = energybarx1;
	y1 = energyy + 0.014f;
	x2 = energybarx2;
	y2 = energyy + 0.020f;
	x = (1.0f * myTeam->energy / myTeam->energyStorage) * energybarlen;
	
	glEnable(GL_TEXTURE_2D);
	glColor4f(1,1,1,0.8f);
	font->glPrintAt(energyx, energyy + 0.005f, 0.7f, "");
	glDisable(GL_TEXTURE_2D);

	//energy draw
	glColor4f(0.8f,0.8f,0.2f,0.2f);
	glBegin(GL_QUADS);
	glVertex2f(x1, y1);
	glVertex2f(x1, y2);
	glVertex2f(x2, y2);
	glVertex2f(x2, y1);
	glEnd();

	glColor4f(1.0f,1.0f,0.2f,1.0f);
	glBegin(GL_QUADS);
	glVertex2f(x1, y1);
	glVertex2f(x1, y2);
	glVertex2f(x1+x, y2);
	glVertex2f(x1+x, y1);
	glEnd();

	x=myTeam->energyShare*energybarlen;
	glColor4f(0.9f,0.2f,0.2f,0.7f);
	glBegin(GL_QUADS);
	glVertex2f(x1+x+0.003f, y1-0.003f);
	glVertex2f(x1+x+0.003f, y2+0.003f);
	glVertex2f(x1+x-0.003f, y2+0.003f);
	glVertex2f(x1+x-0.003f, y1-0.003f);
	glEnd();

	glEnable(GL_TEXTURE_2D);
	glColor4f(1,1,0.4f,0.8f);
	
	font->glPrintAt(energyx - 0.018f, energyy + 0.005f, 0.7f, "Energy");

	glColor4f(1,1,1,0.8f);
	font->glPrintAt(energybarx2 - .001f, energyy, 0.5f, "%s",
	                FloatToSmallString(myTeam->energyStorage).c_str());
	font->glPrintAt(energybarx1 + energybarlen / 2.0f, energyy /*+.02f*/, 0.5f, "%s",
	                FloatToSmallString(myTeam->energy).c_str());

	glColor4f(1.0f,.4f,.4f,1.0f); // Expenses
	font->glPrintAt(energyx + 0.044f, energyy - 0.002f, 0.5f, "-%s(-%s)",
	                FloatToSmallString(fabs(myTeam->prevEnergyPull)).c_str(),
	                FloatToSmallString(fabs(myTeam->energySent)).c_str());

	glColor4f(.6f,1.0f,.6f,.95f); // Income
	font->glPrintAt(energyx + 0.044f, energyy + 0.01f, 0.5f, "+%s",
	                FloatToSmallString(myTeam->prevEnergyIncome).c_str());
	                // FloatToSmallString(myTeam->energyReceived).c_str());

	glDisable(GL_TEXTURE_2D);

	glLoadIdentity();
}