- render battle end screen to texture buffer on first render so it takes less fps to render after the 1st frame

This commit is contained in:
Mark Vejvoda 2011-06-12 05:54:54 +00:00
parent 722261e212
commit f0c636d2ff
4 changed files with 362 additions and 255 deletions

View File

@ -1387,6 +1387,25 @@ Vec2i computeCenteredPos(const string &text, Font3D *font, int x, int y) {
return textPos;
}
void Renderer::renderTextBoundingBox3D(const string &text, Font3D *font, float alpha, int x, int y, int w, int h, bool centered) {
glPushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT);
glEnable(GL_BLEND);
glColor4fv(Vec4f(1.f, 1.f, 1.f, alpha).ptr());
Vec2f pos= Vec2f(x, y);
//Vec2i pos= centered? computeCenteredPos(text, font, x, y): Vec2i(x, y);
if(centered == true) {
getCentered3DPos(text, font, pos, w, h);
}
textRenderer3D->begin(font);
textRenderer3D->render(text, pos.x, pos.y);
textRenderer3D->end();
glDisable(GL_BLEND);
glPopAttrib();
}
void Renderer::renderText3D(const string &text, Font3D *font, float alpha, int x, int y, bool centered) {
glPushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT);
glEnable(GL_BLEND);
@ -1624,16 +1643,17 @@ void Renderer::renderLabel(GraphicLabel *label,const Vec4f *color) {
int w= label->getW();
//if(label->getInstanceName() == "modDescrLabel") printf("~~~ lines.size() [%u] i = %d lines[i] [%s] y = %d\n",lines.size(),i,lines[i].c_str(),y);
if(label->getCentered()){
if(label->getCentered()) {
textPos= Vec2i(x+w/2, y+h/2);
}
else{
else {
textPos= Vec2i(x, y+h/4);
}
if(color != NULL) {
if(renderText3DEnabled == true) {
renderText3D(lines[i], label->getFont3D(), (*color), textPos.x, textPos.y, label->getCentered());
//renderText3D(lines[i], label->getFont3D(), (*color), textPos.x, textPos.y, label->getCentered());
renderTextBoundingBox3D(lines[i], label->getFont3D(), (*color), x, y, w, h, label->getCentered());
}
else {
renderText(lines[i], label->getFont(), (*color), textPos.x, textPos.y, label->getCentered());
@ -1641,7 +1661,8 @@ void Renderer::renderLabel(GraphicLabel *label,const Vec4f *color) {
}
else {
if(renderText3DEnabled == true) {
renderText3D(lines[i], label->getFont3D(), GraphicComponent::getFade(), textPos.x, textPos.y, label->getCentered());
//renderText3D(lines[i], label->getFont3D(), GraphicComponent::getFade(), textPos.x, textPos.y, label->getCentered());
renderTextBoundingBox3D(lines[i], label->getFont3D(), GraphicComponent::getFade(), x, y, w, h, label->getCentered());
}
else {
renderText(lines[i], label->getFont(), GraphicComponent::getFade(), textPos.x, textPos.y, label->getCentered());
@ -1841,9 +1862,11 @@ void Renderer::renderCheckBox(const GraphicCheckBox *box) {
//lighting
float anim= GraphicComponent::getAnim();
if(anim>0.5f) anim= 1.f-anim;
if(anim > 0.5f) {
anim = 1.f - anim;
}
if(box->getLighted() && box->getEditable()){
if(box->getLighted() && box->getEditable()) {
const int lightSize= 0;
const Vec4f color1= Vec4f(color.x, color.y, color.z, 0.1f+anim*0.5f);
const Vec4f color2= Vec4f(color.x, color.y, color.z, 0.3f+anim);
@ -5489,6 +5512,49 @@ VisibleQuadContainerCache & Renderer::getQuadCache( bool updateOnDirtyFrame,
return quadCache;
}
void Renderer::beginRenderToTexture(Texture2D **renderToTexture) {
static bool supportFBOs = Texture2DGl().supports_FBO_RBO();
if(supportFBOs == true && renderToTexture != NULL) {
Config &config= Config::getInstance();
Texture2D::Filter textureFilter = strToTextureFilter(config.getString("Filter"));
int maxAnisotropy = config.getInt("FilterMaxAnisotropy");
const Metrics &metrics = Metrics::getInstance();
*renderToTexture = GraphicsInterface::getInstance().getFactory()->newTexture2D();
Texture2DGl *texture = static_cast<Texture2DGl *>(*renderToTexture);
texture->setMipmap(false);
Pixmap2D *pixmapScreenShot = texture->getPixmap();
pixmapScreenShot->init(metrics.getScreenW(), metrics.getScreenH(), 4);
texture->setForceCompressionDisabled(true);
texture->init(textureFilter,maxAnisotropy);
texture->setup_FBO_RBO();
assertGl();
if(texture->checkFrameBufferStatus() == false) {
//printf("******************** WARNING CANNOT Attach to FBO!\n");
texture->end();
delete texture;
*renderToTexture=NULL;
}
}
}
void Renderer::endRenderToTexture(Texture2D **renderToTexture) {
static bool supportFBOs = Texture2DGl().supports_FBO_RBO();
if(supportFBOs == true && renderToTexture != NULL) {
Texture2DGl *texture = static_cast<Texture2DGl *>(*renderToTexture);
if(texture != NULL) {
texture->dettachFrameBufferFromTexture();
}
assertGl();
}
}
void Renderer::renderMapPreview( const MapPreview *map, bool renderAll,
int screenPosX, int screenPosY,
Texture2D **renderToTexture) {

View File

@ -371,6 +371,10 @@ public:
Vec2f getCentered3DPos(const string &text, Font3D *font, Vec2f &pos, int w, int h);
void renderTextBoundingBox3D(const string &text, Font3D *font, const Vec4f &color, int x, int y, int w, int h, bool centered);
void renderTextBoundingBox3D(const string &text, Font3D *font, const Vec3f &color, int x, int y, int w, int h, bool centered);
void renderTextBoundingBox3D(const string &text, Font3D *font, float alpha, int x, int y, int w, int h, bool centered);
void beginRenderToTexture(Texture2D **renderToTexture);
void endRenderToTexture(Texture2D **renderToTexture);
//components
void renderLabel(GraphicLabel *label);

View File

@ -42,6 +42,7 @@ BattleEnd::BattleEnd(Program *program, const Stats *stats): ProgramState(program
mouseX = 0;
mouseY = 0;
mouse2d = 0;
renderToTexture = NULL;
const Metrics &metrics= Metrics::getInstance();
Lang &lang= Lang::getInstance();
@ -59,7 +60,14 @@ BattleEnd::BattleEnd(Program *program, const Stats *stats): ProgramState(program
BattleEnd::~BattleEnd() {
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__);
SoundRenderer::getInstance().playMusic(CoreData::getInstance().getMenuMusic());
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__);
delete renderToTexture;
renderToTexture = NULL;
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__);
}
@ -70,291 +78,319 @@ void BattleEnd::update() {
mouse2d= (mouse2d+1) % Renderer::maxMouse2dAnim;
}
void BattleEnd::render(){
void BattleEnd::render() {
Renderer &renderer= Renderer::getInstance();
TextRenderer2D *textRenderer2D = renderer.getTextRenderer();
TextRenderer3D *textRenderer3D = renderer.getTextRenderer3D();
TextRenderer *textRenderer = NULL;
if(renderToTexture != NULL) {
//printf("Rendering from texture!\n");
if(Renderer::renderText3DEnabled == true) {
textRenderer= textRenderer3D;
renderer.clearBuffers();
renderer.reset2d();
renderer.renderBackground(renderToTexture);
renderer.renderButton(&buttonExit);
//exit message box
if(mainMessageBox.getEnabled()){
renderer.renderMessageBox(&mainMessageBox);
}
renderer.renderMouse2d(mouseX, mouseY, mouse2dAnim);
renderer.swapBuffers();
}
else {
textRenderer= textRenderer2D;
}
//printf("Rendering to texture!\n");
Lang &lang= Lang::getInstance();
renderer.beginRenderToTexture(&renderToTexture);
renderer.clearBuffers();
renderer.reset2d();
renderer.renderBackground(CoreData::getInstance().getBackgroundTexture());
TextRenderer2D *textRenderer2D = renderer.getTextRenderer();
TextRenderer3D *textRenderer3D = renderer.getTextRenderer3D();
TextRenderer *textRenderer = NULL;
int winnerIndex = -1;
int bestScore = -1;
int mostKillsIndex = -1;
int bestKills = -1;
int mostEnemyKillsIndex = -1;
int bestEnemyKills = -1;
int leastDeathsIndex = -1;
int leastDeaths = -1;
int mostUnitsProducedIndex = -1;
int bestUnitsProduced = -1;
int mostResourcesHarvestedIndex = -1;
int bestResourcesHarvested = -1;
for(int i=0; i<stats.getFactionCount(); ++i) {
if(stats.getTeam(i) == GameConstants::maxPlayers -1 + fpt_Observer) {
continue;
}
int team= stats.getTeam(i) + 1;
int kills= stats.getKills(i);
if(kills > bestKills) {
bestKills = kills;
mostKillsIndex = i;
}
int enemykills= stats.getEnemyKills(i);
if(enemykills > bestEnemyKills) {
bestEnemyKills = enemykills;
mostEnemyKillsIndex = i;
}
int deaths= stats.getDeaths(i);
if(deaths < leastDeaths || leastDeaths < 0) {
leastDeaths = deaths;
leastDeathsIndex = i;
}
int unitsProduced= stats.getUnitsProduced(i);
if(unitsProduced > bestUnitsProduced) {
bestUnitsProduced = unitsProduced;
mostUnitsProducedIndex = i;
}
int resourcesHarvested = stats.getResourcesHarvested(i);
if(resourcesHarvested > bestResourcesHarvested) {
bestResourcesHarvested = resourcesHarvested;
mostResourcesHarvestedIndex = i;
}
int score= enemykills*100 + unitsProduced*50 + resourcesHarvested/10;
if(score > bestScore) {
bestScore = score;
winnerIndex = i;
}
}
bool disableStatsColorCoding = Config::getInstance().getBool("DisableBattleEndColorCoding","false");
if(Renderer::renderText3DEnabled == true) {
textRenderer3D->begin(CoreData::getInstance().getMenuFontNormal3D());
}
else {
textRenderer2D->begin(CoreData::getInstance().getMenuFontNormal());
}
int lm= 20;
int bm= 100;
for(int i = 0; i < stats.getFactionCount(); ++i) {
if(stats.getTeam(i) == GameConstants::maxPlayers -1 + fpt_Observer) {
continue;
}
int textX= lm+160+i*100;
int team= stats.getTeam(i) + 1;
int kills= stats.getKills(i);
int enemykills= stats.getEnemyKills(i);
int deaths= stats.getDeaths(i);
int unitsProduced= stats.getUnitsProduced(i);
int resourcesHarvested= stats.getResourcesHarvested(i);
int score= enemykills*100 + unitsProduced*50 + resourcesHarvested/10;
string controlString;
if(stats.getPersonalityType(i) == fpt_Observer) {
controlString= GameConstants::OBSERVER_SLOTNAME;
if(Renderer::renderText3DEnabled == true) {
textRenderer= textRenderer3D;
}
else {
switch(stats.getControl(i)) {
case ctCpuEasy:
controlString= lang.get("CpuEasy");
break;
case ctCpu:
controlString= lang.get("Cpu");
break;
case ctCpuUltra:
controlString= lang.get("CpuUltra");
break;
case ctCpuMega:
controlString= lang.get("CpuMega");
break;
case ctNetwork:
controlString= lang.get("Network");
break;
case ctHuman:
controlString= lang.get("Human");
break;
case ctNetworkCpuEasy:
controlString= lang.get("NetworkCpuEasy");
break;
case ctNetworkCpu:
controlString= lang.get("NetworkCpu");
break;
case ctNetworkCpuUltra:
controlString= lang.get("NetworkCpuUltra");
break;
case ctNetworkCpuMega:
controlString= lang.get("NetworkCpuMega");
break;
default:
assert(false);
};
textRenderer= textRenderer2D;
}
Lang &lang= Lang::getInstance();
renderer.clearBuffers();
renderer.reset2d();
renderer.renderBackground(CoreData::getInstance().getBackgroundTexture());
if(stats.getControl(i) != ctHuman && stats.getControl(i) != ctNetwork ) {
controlString += " x " + floatToStr(stats.getResourceMultiplier(i),1);
}
int winnerIndex = -1;
int bestScore = -1;
int mostKillsIndex = -1;
int bestKills = -1;
int mostEnemyKillsIndex = -1;
int bestEnemyKills = -1;
int leastDeathsIndex = -1;
int leastDeaths = -1;
int mostUnitsProducedIndex = -1;
int bestUnitsProduced = -1;
int mostResourcesHarvestedIndex = -1;
int bestResourcesHarvested = -1;
if(score == bestScore && stats.getVictory(i)) {
if(CoreData::getInstance().getGameWinnerTexture() != NULL) {
renderer.renderTextureQuad(textX, bm+380,-1,-1,CoreData::getInstance().getGameWinnerTexture(),0.7f);
for(int i=0; i<stats.getFactionCount(); ++i) {
if(stats.getTeam(i) == GameConstants::maxPlayers -1 + fpt_Observer) {
continue;
}
int team= stats.getTeam(i) + 1;
int kills= stats.getKills(i);
if(kills > bestKills) {
bestKills = kills;
mostKillsIndex = i;
}
int enemykills= stats.getEnemyKills(i);
if(enemykills > bestEnemyKills) {
bestEnemyKills = enemykills;
mostEnemyKillsIndex = i;
}
int deaths= stats.getDeaths(i);
if(deaths < leastDeaths || leastDeaths < 0) {
leastDeaths = deaths;
leastDeathsIndex = i;
}
int unitsProduced= stats.getUnitsProduced(i);
if(unitsProduced > bestUnitsProduced) {
bestUnitsProduced = unitsProduced;
mostUnitsProducedIndex = i;
}
int resourcesHarvested = stats.getResourcesHarvested(i);
if(resourcesHarvested > bestResourcesHarvested) {
bestResourcesHarvested = resourcesHarvested;
mostResourcesHarvestedIndex = i;
}
int score= enemykills*100 + unitsProduced*50 + resourcesHarvested/10;
if(score > bestScore) {
bestScore = score;
winnerIndex = i;
}
}
Vec3f color = stats.getPlayerColor(i);
if(stats.getPlayerName(i) != "") {
textRenderer->render(stats.getPlayerName(i).c_str(), textX, bm+400, false, &color);
bool disableStatsColorCoding = Config::getInstance().getBool("DisableBattleEndColorCoding","false");
if(Renderer::renderText3DEnabled == true) {
textRenderer3D->begin(CoreData::getInstance().getMenuFontNormal3D());
}
else {
textRenderer->render((lang.get("Player") + " " + intToStr(i+1)).c_str(), textX, bm+400,false, &color);
textRenderer2D->begin(CoreData::getInstance().getMenuFontNormal());
}
Vec3f highliteColor = Vec3f(WHITE.x,WHITE.y,WHITE.z);
if(disableStatsColorCoding == false) {
highliteColor.x = 0.85;
highliteColor.y = 0.8;
highliteColor.z = 0.07;
}
int lm= 20;
int bm= 100;
if(stats.getPersonalityType(i) == fpt_Observer) {
textRenderer->render(lang.get("GameOver").c_str(), textX, bm+360);
}
else {
if(stats.getVictory(i)) {
textRenderer->render(stats.getVictory(i)? lang.get("Victory").c_str(): lang.get("Defeat").c_str(), textX, bm+360, false, &highliteColor);
for(int i = 0; i < stats.getFactionCount(); ++i) {
if(stats.getTeam(i) == GameConstants::maxPlayers -1 + fpt_Observer) {
continue;
}
int textX= lm+160+i*100;
int team= stats.getTeam(i) + 1;
int kills= stats.getKills(i);
int enemykills= stats.getEnemyKills(i);
int deaths= stats.getDeaths(i);
int unitsProduced= stats.getUnitsProduced(i);
int resourcesHarvested= stats.getResourcesHarvested(i);
int score= enemykills*100 + unitsProduced*50 + resourcesHarvested/10;
string controlString;
if(stats.getPersonalityType(i) == fpt_Observer) {
controlString= GameConstants::OBSERVER_SLOTNAME;
}
else {
textRenderer->render(stats.getVictory(i)? lang.get("Victory").c_str(): lang.get("Defeat").c_str(), textX, bm+360);
switch(stats.getControl(i)) {
case ctCpuEasy:
controlString= lang.get("CpuEasy");
break;
case ctCpu:
controlString= lang.get("Cpu");
break;
case ctCpuUltra:
controlString= lang.get("CpuUltra");
break;
case ctCpuMega:
controlString= lang.get("CpuMega");
break;
case ctNetwork:
controlString= lang.get("Network");
break;
case ctHuman:
controlString= lang.get("Human");
break;
case ctNetworkCpuEasy:
controlString= lang.get("NetworkCpuEasy");
break;
case ctNetworkCpu:
controlString= lang.get("NetworkCpu");
break;
case ctNetworkCpuUltra:
controlString= lang.get("NetworkCpuUltra");
break;
case ctNetworkCpuMega:
controlString= lang.get("NetworkCpuMega");
break;
default:
assert(false);
};
}
if(stats.getControl(i) != ctHuman && stats.getControl(i) != ctNetwork ) {
controlString += " x " + floatToStr(stats.getResourceMultiplier(i),1);
}
if(score == bestScore && stats.getVictory(i)) {
if(CoreData::getInstance().getGameWinnerTexture() != NULL) {
renderer.renderTextureQuad(textX, bm+380,-1,-1,CoreData::getInstance().getGameWinnerTexture(),0.7f);
}
}
Vec3f color = stats.getPlayerColor(i);
if(stats.getPlayerName(i) != "") {
textRenderer->render(stats.getPlayerName(i).c_str(), textX, bm+400, false, &color);
}
else {
textRenderer->render((lang.get("Player") + " " + intToStr(i+1)).c_str(), textX, bm+400,false, &color);
}
Vec3f highliteColor = Vec3f(WHITE.x,WHITE.y,WHITE.z);
if(disableStatsColorCoding == false) {
highliteColor.x = 0.85;
highliteColor.y = 0.8;
highliteColor.z = 0.07;
}
if(stats.getPersonalityType(i) == fpt_Observer) {
textRenderer->render(lang.get("GameOver").c_str(), textX, bm+360);
}
else {
if(stats.getVictory(i)) {
textRenderer->render(stats.getVictory(i)? lang.get("Victory").c_str(): lang.get("Defeat").c_str(), textX, bm+360, false, &highliteColor);
}
else {
textRenderer->render(stats.getVictory(i)? lang.get("Victory").c_str(): lang.get("Defeat").c_str(), textX, bm+360);
}
}
textRenderer->render(controlString, textX, bm+320);
textRenderer->render(stats.getFactionTypeName(i), textX, bm+280);
textRenderer->render(intToStr(team).c_str(), textX, bm+240);
if(kills == bestKills) {
textRenderer->render(intToStr(kills).c_str(), textX, bm+200, false,&highliteColor);
}
else {
textRenderer->render(intToStr(kills).c_str(), textX, bm+200);
}
if(enemykills == bestEnemyKills) {
textRenderer->render(intToStr(enemykills).c_str(), textX, bm+180, false , &highliteColor);
}
else {
textRenderer->render(intToStr(enemykills).c_str(), textX, bm+180);
}
if(deaths == leastDeaths) {
textRenderer->render(intToStr(deaths).c_str(), textX, bm+160,false,&highliteColor);
}
else {
textRenderer->render(intToStr(deaths).c_str(), textX, bm+160);
}
if(unitsProduced == bestUnitsProduced) {
textRenderer->render(intToStr(unitsProduced).c_str(), textX, bm+120,false,&highliteColor);
}
else {
textRenderer->render(intToStr(unitsProduced).c_str(), textX, bm+120);
}
if(resourcesHarvested == bestResourcesHarvested) {
textRenderer->render(intToStr(resourcesHarvested).c_str(), textX, bm+80,false,&highliteColor);
}
else {
textRenderer->render(intToStr(resourcesHarvested).c_str(), textX, bm+80);
}
if(score == bestScore) {
textRenderer->render(intToStr(score).c_str(), textX, bm+20,false,&highliteColor);
}
else {
textRenderer->render(intToStr(score).c_str(), textX, bm+20);
}
}
textRenderer->render(controlString, textX, bm+320);
textRenderer->render(stats.getFactionTypeName(i), textX, bm+280);
textRenderer->render(intToStr(team).c_str(), textX, bm+240);
textRenderer->render(lang.get("Result"), lm, bm+360);
textRenderer->render(lang.get("Control"), lm, bm+320);
textRenderer->render(lang.get("Faction"), lm, bm+280);
textRenderer->render(lang.get("Team"), lm, bm+240);
textRenderer->render(lang.get("Kills"), lm, bm+200);
textRenderer->render(lang.get("EnemyKills"), lm, bm+180);
textRenderer->render(lang.get("Deaths"), lm, bm+160);
textRenderer->render(lang.get("UnitsProduced"), lm, bm+120);
textRenderer->render(lang.get("ResourcesHarvested"), lm, bm+80);
textRenderer->render(lang.get("Score"), lm, bm+20);
if(kills == bestKills) {
textRenderer->render(intToStr(kills).c_str(), textX, bm+200, false,&highliteColor);
textRenderer->end();
if(Renderer::renderText3DEnabled == true) {
textRenderer3D->begin(CoreData::getInstance().getMenuFontVeryBig3D());
}
else {
textRenderer->render(intToStr(kills).c_str(), textX, bm+200);
textRenderer2D->begin(CoreData::getInstance().getMenuFontVeryBig());
}
if(enemykills == bestEnemyKills) {
textRenderer->render(intToStr(enemykills).c_str(), textX, bm+180, false , &highliteColor);
string header = stats.getDescription() + " - ";
if(stats.getTeam(stats.getThisFactionIndex()) != GameConstants::maxPlayers -1 + fpt_Observer) {
if(stats.getVictory(stats.getThisFactionIndex())){
header += lang.get("Victory");
}
else{
header += lang.get("Defeat");
}
}
else {
textRenderer->render(intToStr(enemykills).c_str(), textX, bm+180);
header += "Observer";
}
if(deaths == leastDeaths) {
textRenderer->render(intToStr(deaths).c_str(), textX, bm+160,false,&highliteColor);
textRenderer->render(header, lm+250, bm+550);
//GameConstants::updateFps
//string header2 = lang.get("GameDuration") + " " + floatToStr(stats.getWorldTimeElapsed() / 24.0,2);
string header2 = lang.get("GameDuration") + ": " + intToStr(stats.getFramesToCalculatePlaytime()/GameConstants::updateFps/60);
textRenderer->render(header2, lm+250, bm+530);
header2 = lang.get("GameMaxConcurrentUnitCount") + ": " + intToStr(stats.getMaxConcurrentUnitCount());
textRenderer->render(header2, lm+250, bm+510);
header2 = lang.get("GameTotalEndGameConcurrentUnitCount") + ": " + intToStr(stats.getTotalEndGameConcurrentUnitCount());
textRenderer->render(header2, lm+250, bm+490);
textRenderer->end();
renderer.renderButton(&buttonExit);
//exit message box
if(mainMessageBox.getEnabled()){
renderer.renderMessageBox(&mainMessageBox);
}
else {
textRenderer->render(intToStr(deaths).c_str(), textX, bm+160);
}
if(unitsProduced == bestUnitsProduced) {
textRenderer->render(intToStr(unitsProduced).c_str(), textX, bm+120,false,&highliteColor);
}
else {
textRenderer->render(intToStr(unitsProduced).c_str(), textX, bm+120);
}
if(resourcesHarvested == bestResourcesHarvested) {
textRenderer->render(intToStr(resourcesHarvested).c_str(), textX, bm+80,false,&highliteColor);
}
else {
textRenderer->render(intToStr(resourcesHarvested).c_str(), textX, bm+80);
}
if(score == bestScore) {
textRenderer->render(intToStr(score).c_str(), textX, bm+20,false,&highliteColor);
}
else {
textRenderer->render(intToStr(score).c_str(), textX, bm+20);
if(renderToTexture == NULL) {
renderer.renderMouse2d(mouseX, mouseY, mouse2d, 0.f);
}
renderer.endRenderToTexture(&renderToTexture);
renderer.swapBuffers();
}
textRenderer->render(lang.get("Result"), lm, bm+360);
textRenderer->render(lang.get("Control"), lm, bm+320);
textRenderer->render(lang.get("Faction"), lm, bm+280);
textRenderer->render(lang.get("Team"), lm, bm+240);
textRenderer->render(lang.get("Kills"), lm, bm+200);
textRenderer->render(lang.get("EnemyKills"), lm, bm+180);
textRenderer->render(lang.get("Deaths"), lm, bm+160);
textRenderer->render(lang.get("UnitsProduced"), lm, bm+120);
textRenderer->render(lang.get("ResourcesHarvested"), lm, bm+80);
textRenderer->render(lang.get("Score"), lm, bm+20);
textRenderer->end();
if(Renderer::renderText3DEnabled == true) {
textRenderer3D->begin(CoreData::getInstance().getMenuFontVeryBig3D());
}
else {
textRenderer2D->begin(CoreData::getInstance().getMenuFontVeryBig());
}
string header = stats.getDescription() + " - ";
if(stats.getTeam(stats.getThisFactionIndex()) != GameConstants::maxPlayers -1 + fpt_Observer) {
if(stats.getVictory(stats.getThisFactionIndex())){
header += lang.get("Victory");
}
else{
header += lang.get("Defeat");
}
}
else {
header += "Observer";
}
textRenderer->render(header, lm+250, bm+550);
//GameConstants::updateFps
//string header2 = lang.get("GameDuration") + " " + floatToStr(stats.getWorldTimeElapsed() / 24.0,2);
string header2 = lang.get("GameDuration") + ": " + intToStr(stats.getFramesToCalculatePlaytime()/GameConstants::updateFps/60);
textRenderer->render(header2, lm+250, bm+530);
header2 = lang.get("GameMaxConcurrentUnitCount") + ": " + intToStr(stats.getMaxConcurrentUnitCount());
textRenderer->render(header2, lm+250, bm+510);
header2 = lang.get("GameTotalEndGameConcurrentUnitCount") + ": " + intToStr(stats.getTotalEndGameConcurrentUnitCount());
textRenderer->render(header2, lm+250, bm+490);
textRenderer->end();
renderer.renderButton(&buttonExit);
//exit message box
if(mainMessageBox.getEnabled()){
renderer.renderMessageBox(&mainMessageBox);
}
renderer.renderMouse2d(mouseX, mouseY, mouse2d, 0.f);
renderer.swapBuffers();
}
void BattleEnd::keyDown(char key){

View File

@ -33,6 +33,7 @@ private:
int mouseY;
int mouse2d;
GraphicMessageBox mainMessageBox;
Texture2D *renderToTexture;
void showMessageBox(const string &text, const string &header, bool toggle);