mirror of
https://github.com/glest/glest-source.git
synced 2025-09-02 20:42:34 +02:00
- 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:
@@ -1387,6 +1387,25 @@ Vec2i computeCenteredPos(const string &text, Font3D *font, int x, int y) {
|
|||||||
return textPos;
|
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) {
|
void Renderer::renderText3D(const string &text, Font3D *font, float alpha, int x, int y, bool centered) {
|
||||||
glPushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT);
|
glPushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
@@ -1624,16 +1643,17 @@ void Renderer::renderLabel(GraphicLabel *label,const Vec4f *color) {
|
|||||||
int w= label->getW();
|
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->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);
|
textPos= Vec2i(x+w/2, y+h/2);
|
||||||
}
|
}
|
||||||
else{
|
else {
|
||||||
textPos= Vec2i(x, y+h/4);
|
textPos= Vec2i(x, y+h/4);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(color != NULL) {
|
if(color != NULL) {
|
||||||
if(renderText3DEnabled == true) {
|
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 {
|
else {
|
||||||
renderText(lines[i], label->getFont(), (*color), textPos.x, textPos.y, label->getCentered());
|
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 {
|
else {
|
||||||
if(renderText3DEnabled == true) {
|
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 {
|
else {
|
||||||
renderText(lines[i], label->getFont(), GraphicComponent::getFade(), textPos.x, textPos.y, label->getCentered());
|
renderText(lines[i], label->getFont(), GraphicComponent::getFade(), textPos.x, textPos.y, label->getCentered());
|
||||||
@@ -1841,9 +1862,11 @@ void Renderer::renderCheckBox(const GraphicCheckBox *box) {
|
|||||||
|
|
||||||
//lighting
|
//lighting
|
||||||
float anim= GraphicComponent::getAnim();
|
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 int lightSize= 0;
|
||||||
const Vec4f color1= Vec4f(color.x, color.y, color.z, 0.1f+anim*0.5f);
|
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);
|
const Vec4f color2= Vec4f(color.x, color.y, color.z, 0.3f+anim);
|
||||||
@@ -5489,6 +5512,49 @@ VisibleQuadContainerCache & Renderer::getQuadCache( bool updateOnDirtyFrame,
|
|||||||
return quadCache;
|
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,
|
void Renderer::renderMapPreview( const MapPreview *map, bool renderAll,
|
||||||
int screenPosX, int screenPosY,
|
int screenPosX, int screenPosY,
|
||||||
Texture2D **renderToTexture) {
|
Texture2D **renderToTexture) {
|
||||||
|
@@ -371,6 +371,10 @@ public:
|
|||||||
Vec2f getCentered3DPos(const string &text, Font3D *font, Vec2f &pos, int w, int h);
|
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 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, 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
|
//components
|
||||||
void renderLabel(GraphicLabel *label);
|
void renderLabel(GraphicLabel *label);
|
||||||
|
@@ -42,6 +42,7 @@ BattleEnd::BattleEnd(Program *program, const Stats *stats): ProgramState(program
|
|||||||
mouseX = 0;
|
mouseX = 0;
|
||||||
mouseY = 0;
|
mouseY = 0;
|
||||||
mouse2d = 0;
|
mouse2d = 0;
|
||||||
|
renderToTexture = NULL;
|
||||||
|
|
||||||
const Metrics &metrics= Metrics::getInstance();
|
const Metrics &metrics= Metrics::getInstance();
|
||||||
Lang &lang= Lang::getInstance();
|
Lang &lang= Lang::getInstance();
|
||||||
@@ -59,7 +60,14 @@ BattleEnd::BattleEnd(Program *program, const Stats *stats): ProgramState(program
|
|||||||
|
|
||||||
BattleEnd::~BattleEnd() {
|
BattleEnd::~BattleEnd() {
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
SoundRenderer::getInstance().playMusic(CoreData::getInstance().getMenuMusic());
|
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__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,291 +78,319 @@ void BattleEnd::update() {
|
|||||||
mouse2d= (mouse2d+1) % Renderer::maxMouse2dAnim;
|
mouse2d= (mouse2d+1) % Renderer::maxMouse2dAnim;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleEnd::render(){
|
void BattleEnd::render() {
|
||||||
Renderer &renderer= Renderer::getInstance();
|
Renderer &renderer= Renderer::getInstance();
|
||||||
|
|
||||||
TextRenderer2D *textRenderer2D = renderer.getTextRenderer();
|
if(renderToTexture != NULL) {
|
||||||
TextRenderer3D *textRenderer3D = renderer.getTextRenderer3D();
|
//printf("Rendering from texture!\n");
|
||||||
TextRenderer *textRenderer = NULL;
|
|
||||||
|
|
||||||
if(Renderer::renderText3DEnabled == true) {
|
renderer.clearBuffers();
|
||||||
textRenderer= textRenderer3D;
|
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 {
|
else {
|
||||||
textRenderer= textRenderer2D;
|
//printf("Rendering to texture!\n");
|
||||||
}
|
|
||||||
|
|
||||||
Lang &lang= Lang::getInstance();
|
renderer.beginRenderToTexture(&renderToTexture);
|
||||||
|
|
||||||
renderer.clearBuffers();
|
TextRenderer2D *textRenderer2D = renderer.getTextRenderer();
|
||||||
renderer.reset2d();
|
TextRenderer3D *textRenderer3D = renderer.getTextRenderer3D();
|
||||||
renderer.renderBackground(CoreData::getInstance().getBackgroundTexture());
|
TextRenderer *textRenderer = NULL;
|
||||||
|
|
||||||
int winnerIndex = -1;
|
if(Renderer::renderText3DEnabled == true) {
|
||||||
int bestScore = -1;
|
textRenderer= textRenderer3D;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
switch(stats.getControl(i)) {
|
textRenderer= textRenderer2D;
|
||||||
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);
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Lang &lang= Lang::getInstance();
|
||||||
|
|
||||||
|
renderer.clearBuffers();
|
||||||
|
renderer.reset2d();
|
||||||
|
renderer.renderBackground(CoreData::getInstance().getBackgroundTexture());
|
||||||
|
|
||||||
if(stats.getControl(i) != ctHuman && stats.getControl(i) != ctNetwork ) {
|
int winnerIndex = -1;
|
||||||
controlString += " x " + floatToStr(stats.getResourceMultiplier(i),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)) {
|
for(int i=0; i<stats.getFactionCount(); ++i) {
|
||||||
if(CoreData::getInstance().getGameWinnerTexture() != NULL) {
|
if(stats.getTeam(i) == GameConstants::maxPlayers -1 + fpt_Observer) {
|
||||||
renderer.renderTextureQuad(textX, bm+380,-1,-1,CoreData::getInstance().getGameWinnerTexture(),0.7f);
|
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);
|
bool disableStatsColorCoding = Config::getInstance().getBool("DisableBattleEndColorCoding","false");
|
||||||
if(stats.getPlayerName(i) != "") {
|
|
||||||
textRenderer->render(stats.getPlayerName(i).c_str(), textX, bm+400, false, &color);
|
if(Renderer::renderText3DEnabled == true) {
|
||||||
|
textRenderer3D->begin(CoreData::getInstance().getMenuFontNormal3D());
|
||||||
}
|
}
|
||||||
else {
|
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);
|
int lm= 20;
|
||||||
if(disableStatsColorCoding == false) {
|
int bm= 100;
|
||||||
highliteColor.x = 0.85;
|
|
||||||
highliteColor.y = 0.8;
|
|
||||||
highliteColor.z = 0.07;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(stats.getPersonalityType(i) == fpt_Observer) {
|
for(int i = 0; i < stats.getFactionCount(); ++i) {
|
||||||
textRenderer->render(lang.get("GameOver").c_str(), textX, bm+360);
|
if(stats.getTeam(i) == GameConstants::maxPlayers -1 + fpt_Observer) {
|
||||||
}
|
continue;
|
||||||
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);
|
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 {
|
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(lang.get("Result"), lm, bm+360);
|
||||||
textRenderer->render(stats.getFactionTypeName(i), textX, bm+280);
|
textRenderer->render(lang.get("Control"), lm, bm+320);
|
||||||
textRenderer->render(intToStr(team).c_str(), textX, bm+240);
|
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->end();
|
||||||
textRenderer->render(intToStr(kills).c_str(), textX, bm+200, false,&highliteColor);
|
|
||||||
|
if(Renderer::renderText3DEnabled == true) {
|
||||||
|
textRenderer3D->begin(CoreData::getInstance().getMenuFontVeryBig3D());
|
||||||
}
|
}
|
||||||
else {
|
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 {
|
else {
|
||||||
textRenderer->render(intToStr(enemykills).c_str(), textX, bm+180);
|
header += "Observer";
|
||||||
}
|
}
|
||||||
if(deaths == leastDeaths) {
|
textRenderer->render(header, lm+250, bm+550);
|
||||||
textRenderer->render(intToStr(deaths).c_str(), textX, bm+160,false,&highliteColor);
|
|
||||||
|
//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(renderToTexture == NULL) {
|
||||||
}
|
renderer.renderMouse2d(mouseX, mouseY, mouse2d, 0.f);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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){
|
void BattleEnd::keyDown(char key){
|
||||||
|
@@ -33,6 +33,7 @@ private:
|
|||||||
int mouseY;
|
int mouseY;
|
||||||
int mouse2d;
|
int mouse2d;
|
||||||
GraphicMessageBox mainMessageBox;
|
GraphicMessageBox mainMessageBox;
|
||||||
|
Texture2D *renderToTexture;
|
||||||
|
|
||||||
void showMessageBox(const string &text, const string &header, bool toggle);
|
void showMessageBox(const string &text, const string &header, bool toggle);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user