From 2f60d179e9d7ca3c3c228a7695fb3a351bb4520a Mon Sep 17 00:00:00 2001 From: titison Date: Thu, 6 Nov 2014 21:12:47 +0100 Subject: [PATCH] Healthbars * Hotkey now toggles between Default/Off/Always/Damaged/Selected * Code clean up --- source/glest_game/game/game.cpp | 33 ++++++++++++++++++++++--- source/glest_game/game/game.h | 2 +- source/glest_game/graphics/renderer.cpp | 17 +++++++++---- source/glest_game/graphics/renderer.h | 2 +- 4 files changed, 43 insertions(+), 11 deletions(-) diff --git a/source/glest_game/game/game.cpp b/source/glest_game/game/game.cpp index 7daac218..8e57592d 100644 --- a/source/glest_game/game/game.cpp +++ b/source/glest_game/game/game.cpp @@ -115,7 +115,7 @@ Game::Game() : ProgramState(NULL) { renderFpsAvgTest=0; renderExtraTeamColor=0; photoModeEnabled=false; - forcedHealthbars=false; + healthbarMode=hbvUndefined; visibleHUD=false; timeDisplay=false; withRainEffect=false; @@ -236,7 +236,7 @@ void Game::resetMembers() { scrollSpeed = Config::getInstance().getFloat("UiScrollSpeed","1.5"); photoModeEnabled = Config::getInstance().getBool("PhotoMode","false"); - forcedHealthbars = Config::getInstance().getBool("ForcedHealthbars","false"); + healthbarMode = Config::getInstance().getInt("HealthbarMode","0"); visibleHUD = Config::getInstance().getBool("VisibleHud","true"); timeDisplay = Config::getInstance().getBool("TimeDisplay","true"); withRainEffect = Config::getInstance().getBool("RainEffect","true"); @@ -4659,7 +4659,32 @@ void Game::keyDown(SDL_KeyboardEvent key) { } //Toggle Healthbars else if(isKeyPressed(configKeys.getSDLKey("ToggleHealthbars"),key, false) == true) { - forcedHealthbars = !forcedHealthbars; + switch (healthbarMode) { + case hbvUndefined: + healthbarMode=hbvOff; + console.addLine(lang.getString("HealthbarsOff")); + break; + case hbvOff: + healthbarMode=hbvAlways; + console.addLine(lang.getString("HealthbarsAlways")); + break; + case hbvAlways: + healthbarMode=hbvDamaged; + console.addLine(lang.getString("HealthbarsDamaged")); + break; + case hbvDamaged: + healthbarMode=hbvSelected; + console.addLine(lang.getString("HealthbarsSelected")); + break; + case hbvSelected: + healthbarMode=hbvUndefined; + console.addLine(lang.getString("HealthbarsDefault")); + break; + default: + printf("In [%s::%s Line: %d] Toggle Healthbars Hotkey - Invalid Value. Setting to default.\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__); + healthbarMode=hbvUndefined; + break; + } } //Toggle music //else if(key == configKeys.getCharKey("ToggleMusic")) { @@ -5259,7 +5284,7 @@ void Game::render3d(){ //renderOnTopBars (aka Healthbars) if(photoModeEnabled == false) { - renderer.renderHealthBars(forcedHealthbars); + renderer.renderHealthBars(healthbarMode); } //particles diff --git a/source/glest_game/game/game.h b/source/glest_game/game/game.h index d4aae999..05f470fe 100644 --- a/source/glest_game/game/game.h +++ b/source/glest_game/game/game.h @@ -141,7 +141,7 @@ private: static const int renderTeamColorPlaneBit=2; bool photoModeEnabled; - bool forcedHealthbars; + int healthbarMode; bool visibleHUD; bool timeDisplay; bool withRainEffect; diff --git a/source/glest_game/graphics/renderer.cpp b/source/glest_game/graphics/renderer.cpp index 60be150e..38f6e700 100644 --- a/source/glest_game/graphics/renderer.cpp +++ b/source/glest_game/graphics/renderer.cpp @@ -5610,7 +5610,7 @@ void Renderer::renderSelectionEffects() { glPopAttrib(); } -void Renderer::renderHealthBars(bool forceHealthbars){ +void Renderer::renderHealthBars(int healthbarMode){ if(GlobalStaticFlags::getIsNonGraphicalModeEnabled() == true) { return; } @@ -5641,7 +5641,7 @@ void Renderer::renderHealthBars(bool forceHealthbars){ float healthbarheight; float healthbarthickness; - int healthbarVisible; + int healthbarVisible=hbvUndefined; const Texture2D *healthbarTexture; const Texture2D *healthbarBackgroundTexture; bool healthbarLineBorder; @@ -5649,7 +5649,12 @@ void Renderer::renderHealthBars(bool forceHealthbars){ //get settings of the faction healthbarheight=unit->getFaction()->getType()->getHealthbarHeight(); healthbarthickness=unit->getFaction()->getType()->getHealthbarThickness(); - healthbarVisible=unit->getFaction()->getType()->getHealthbarVisible(); + //check options (hotkey) + if(healthbarMode==hbvUndefined) { + healthbarVisible=unit->getFaction()->getType()->getHealthbarVisible(); + } else { + healthbarVisible=healthbarMode; + } healthbarLineBorder=unit->getFaction()->getType()->isHealthbarLineBorder(); CoreData &coreData= CoreData::getInstance(); //First try faction texture then use core Texture @@ -5678,7 +5683,9 @@ void Renderer::renderHealthBars(bool forceHealthbars){ if(unit->getType()->getHealthbarThickness()!=-1.0f) { healthbarthickness=unit->getType()->getHealthbarThickness(); } - healthbarVisible=unit->getType()->getHealthbarVisible(); + if(healthbarMode==hbvUndefined) { //don't override the visible setting when hotkey is not hbvUndefined + healthbarVisible=unit->getType()->getHealthbarVisible(); + } } bool settingsWantToRenderThem=!(healthbarVisible==hbvUndefined || (healthbarVisible&hbvOff)) @@ -5686,7 +5693,7 @@ void Renderer::renderHealthBars(bool forceHealthbars){ || ((healthbarVisible&hbvDamaged) && unit->getHp()!=unit->getType()->getMaxHp()) || ((healthbarVisible&hbvSelected) && game->getGui()->isSelected(unit))); - if(unit->isAlive() && (settingsWantToRenderThem || forceHealthbars)) { + if(unit->isAlive() && (settingsWantToRenderThem)) { Vec3f currVec= unit->getCurrVectorFlat(); if(healthbarheight==-100.0f) { currVec.y+=unit->getType()->getHeight(); diff --git a/source/glest_game/graphics/renderer.h b/source/glest_game/graphics/renderer.h index 724e7375..75a9e010 100644 --- a/source/glest_game/graphics/renderer.h +++ b/source/glest_game/graphics/renderer.h @@ -549,7 +549,7 @@ public: void renderUnitsToBuild(const int renderFps); void renderSelectionEffects(); - void renderHealthBars(bool forceHealthbars=false); + void renderHealthBars(int forceHealthbars=hbvUndefined); void renderWaterEffects(); void renderHud(); void renderMinimap();