Healthbars
Textures (border and background) Faction.xml can specify more healthbars details
This commit is contained in:
parent
d1597334bf
commit
791e1edec6
|
@ -5259,7 +5259,7 @@ void Game::render3d(){
|
|||
|
||||
//renderOnTopBars (aka Healthbars)
|
||||
if(photoModeEnabled == false) {
|
||||
renderer.renderOnTopBars(forcedHealthbars);
|
||||
renderer.renderHealthBars(forcedHealthbars);
|
||||
}
|
||||
|
||||
//particles
|
||||
|
|
|
@ -5610,7 +5610,7 @@ void Renderer::renderSelectionEffects() {
|
|||
glPopAttrib();
|
||||
}
|
||||
|
||||
void Renderer::renderOnTopBars(bool forceHealthbars){
|
||||
void Renderer::renderHealthBars(bool forceHealthbars){
|
||||
if(GlobalStaticFlags::getIsNonGraphicalModeEnabled() == true) {
|
||||
return;
|
||||
}
|
||||
|
@ -5644,15 +5644,31 @@ void Renderer::renderOnTopBars(bool forceHealthbars){
|
|||
int healthbarVisible;
|
||||
const Texture2D *healthbarTexture;
|
||||
const Texture2D *healthbarBackgroundTexture;
|
||||
bool healthbarLineBorder;
|
||||
|
||||
//get settings of the faction
|
||||
healthbarheight=unit->getFaction()->getType()->getHealthbarHeight();
|
||||
healthbarthickness=unit->getFaction()->getType()->getHealthbarThickness();
|
||||
healthbarVisible=unit->getFaction()->getType()->getHealthbarVisible();
|
||||
healthbarLineBorder=unit->getFaction()->getType()->isHealthbarLineBorder();
|
||||
CoreData &coreData= CoreData::getInstance();
|
||||
healthbarTexture=coreData.getHealthbarTexture();
|
||||
healthbarBackgroundTexture=coreData.getHealthbarBackgroundTexture();
|
||||
|
||||
//First try faction texture then use core Texture
|
||||
if(unit->getFaction()->getType()->isHealthbarBorderTextureEnabled()) {
|
||||
healthbarTexture=unit->getFaction()->getType()->getHealthbarTexture();
|
||||
if(healthbarTexture==NULL) {
|
||||
healthbarTexture=coreData.getHealthbarTexture();
|
||||
}
|
||||
} else {
|
||||
healthbarTexture=NULL;
|
||||
}
|
||||
if(unit->getFaction()->getType()->isHealthbarBackgroundTextureEnabled()) {
|
||||
healthbarBackgroundTexture=unit->getFaction()->getType()->getHealthbarBackgroundTexture();
|
||||
if(healthbarBackgroundTexture==NULL) {
|
||||
healthbarBackgroundTexture=coreData.getHealthbarBackgroundTexture();
|
||||
}
|
||||
} else {
|
||||
healthbarBackgroundTexture=NULL;
|
||||
}
|
||||
|
||||
//replace them by the ones from the unit if existent
|
||||
if(unit->getType()->getHealthbarVisible()!=hbvOff && unit->getType()->getHealthbarVisible()!=hbvUndefined) {
|
||||
|
@ -5680,12 +5696,9 @@ void Renderer::renderOnTopBars(bool forceHealthbars){
|
|||
|
||||
if(unit->getType()->getMaxEp() > 0) {
|
||||
healthbarthickness=healthbarthickness*2;
|
||||
}
|
||||
|
||||
if(unit->getType()->getMaxEp() > 0) {
|
||||
renderHealthBar(currVec,unit->getType()->getSize(),unit->getHpRatio(),healthbarthickness,healthbarTexture,healthbarBackgroundTexture,unit->getEpRatio());
|
||||
renderHealthBar(currVec,unit->getType()->getSize(),unit->getHpRatio(),healthbarthickness,healthbarLineBorder,healthbarTexture,healthbarBackgroundTexture,unit->getEpRatio());
|
||||
} else {
|
||||
renderHealthBar(currVec,unit->getType()->getSize(),unit->getHpRatio(),healthbarthickness,healthbarTexture,healthbarBackgroundTexture);
|
||||
renderHealthBar(currVec,unit->getType()->getSize(),unit->getHpRatio(),healthbarthickness,healthbarLineBorder,healthbarTexture,healthbarBackgroundTexture);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8298,7 +8311,7 @@ void Renderer::enableProjectiveTexturing() {
|
|||
}
|
||||
|
||||
// ==================== private aux drawing ====================
|
||||
void Renderer::renderHealthBar(Vec3f v, int size, float hp, float height, const Texture2D *texture, const Texture2D *backgroundTexture , float ep) {
|
||||
void Renderer::renderHealthBar(Vec3f v, int size, float hp, float height, bool lineBorder, const Texture2D *texture, const Texture2D *backgroundTexture , float ep) {
|
||||
if(GlobalStaticFlags::getIsNonGraphicalModeEnabled() == true) {
|
||||
return;
|
||||
}
|
||||
|
@ -8336,23 +8349,24 @@ void Renderer::renderHealthBar(Vec3f v, int size, float hp, float height, const
|
|||
green=brightness+(hp-0.5f)*brightness;
|
||||
}
|
||||
|
||||
//backgroundTexture
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glBindTexture(GL_TEXTURE_2D, static_cast<const Texture2DGl*>(backgroundTexture)->getHandle());
|
||||
glColor4f(1.f,1.f,1.f,1.f);
|
||||
//glColor4f(red+0.1f,green+0.1f,0.1f,0.5f);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2i(0,1);
|
||||
glVertex3fv((v - (rightVectorTexture*width - upVectorTexture*height)).ptr());
|
||||
glTexCoord2i(0,0);
|
||||
glVertex3fv((v - (rightVectorTexture*width + upVectorTexture*height)).ptr());
|
||||
glTexCoord2i(1,0);
|
||||
glVertex3fv((v + (rightVectorTexture*width - upVectorTexture*height)).ptr());
|
||||
glTexCoord2i(1,1);
|
||||
glVertex3fv((v + (rightVectorTexture*width + upVectorTexture*height)).ptr());
|
||||
glEnd();
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
|
||||
if(backgroundTexture!=NULL) {
|
||||
//backgroundTexture
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glBindTexture(GL_TEXTURE_2D, static_cast<const Texture2DGl*>(backgroundTexture)->getHandle());
|
||||
glColor4f(1.f,1.f,1.f,1.f);
|
||||
//glColor4f(red+0.1f,green+0.1f,0.1f,0.5f);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2i(0,1);
|
||||
glVertex3fv((v - (rightVectorTexture*width - upVectorTexture*height)).ptr());
|
||||
glTexCoord2i(0,0);
|
||||
glVertex3fv((v - (rightVectorTexture*width + upVectorTexture*height)).ptr());
|
||||
glTexCoord2i(1,0);
|
||||
glVertex3fv((v + (rightVectorTexture*width - upVectorTexture*height)).ptr());
|
||||
glTexCoord2i(1,1);
|
||||
glVertex3fv((v + (rightVectorTexture*width + upVectorTexture*height)).ptr());
|
||||
glEnd();
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
}
|
||||
|
||||
//healthbar
|
||||
glColor4f(red,green,0.0f,0.4f);
|
||||
|
@ -8379,31 +8393,35 @@ void Renderer::renderHealthBar(Vec3f v, int size, float hp, float height, const
|
|||
}
|
||||
glEnd();
|
||||
|
||||
//border
|
||||
glColor4f(red+0.1f,green+0.1f,0.1f,0.5f);
|
||||
glBegin(GL_LINE_LOOP);
|
||||
glVertex3fv((v - (rightVector*width - upVector*height)).ptr());
|
||||
glVertex3fv((v - (rightVector*width + upVector*height)).ptr());
|
||||
glVertex3fv((v + (rightVector*width - upVector*height)).ptr());
|
||||
glVertex3fv((v + (rightVector*width + upVector*height)).ptr());
|
||||
glEnd();
|
||||
if(lineBorder) {
|
||||
//border
|
||||
glColor4f(red+0.1f,green+0.1f,0.1f,0.5f);
|
||||
glBegin(GL_LINE_LOOP);
|
||||
glVertex3fv((v - (rightVector*width - upVector*height)).ptr());
|
||||
glVertex3fv((v - (rightVector*width + upVector*height)).ptr());
|
||||
glVertex3fv((v + (rightVector*width - upVector*height)).ptr());
|
||||
glVertex3fv((v + (rightVector*width + upVector*height)).ptr());
|
||||
glEnd();
|
||||
}
|
||||
|
||||
//BorderTexture
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glBindTexture(GL_TEXTURE_2D, static_cast<const Texture2DGl*>(texture)->getHandle());
|
||||
glColor4f(1.f,1.f,1.f,1.f);
|
||||
//glColor4f(red+0.1f,green+0.1f,0.1f,0.5f);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2i(0,1);
|
||||
glVertex3fv((v - (rightVectorTexture*width - upVectorTexture*height)).ptr());
|
||||
glTexCoord2i(0,0);
|
||||
glVertex3fv((v - (rightVectorTexture*width + upVectorTexture*height)).ptr());
|
||||
glTexCoord2i(1,0);
|
||||
glVertex3fv((v + (rightVectorTexture*width - upVectorTexture*height)).ptr());
|
||||
glTexCoord2i(1,1);
|
||||
glVertex3fv((v + (rightVectorTexture*width + upVectorTexture*height)).ptr());
|
||||
glEnd();
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
if(texture!=NULL) {
|
||||
//BorderTexture
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glBindTexture(GL_TEXTURE_2D, static_cast<const Texture2DGl*>(texture)->getHandle());
|
||||
glColor4f(1.f,1.f,1.f,1.f);
|
||||
//glColor4f(red+0.1f,green+0.1f,0.1f,0.5f);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2i(0,1);
|
||||
glVertex3fv((v - (rightVectorTexture*width - upVectorTexture*height)).ptr());
|
||||
glTexCoord2i(0,0);
|
||||
glVertex3fv((v - (rightVectorTexture*width + upVectorTexture*height)).ptr());
|
||||
glTexCoord2i(1,0);
|
||||
glVertex3fv((v + (rightVectorTexture*width - upVectorTexture*height)).ptr());
|
||||
glTexCoord2i(1,1);
|
||||
glVertex3fv((v + (rightVectorTexture*width + upVectorTexture*height)).ptr());
|
||||
glEnd();
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
}
|
||||
|
||||
glPopMatrix();
|
||||
}
|
||||
|
|
|
@ -549,7 +549,7 @@ public:
|
|||
void renderUnitsToBuild(const int renderFps);
|
||||
|
||||
void renderSelectionEffects();
|
||||
void renderOnTopBars(bool forceHealthbars=false);
|
||||
void renderHealthBars(bool forceHealthbars=false);
|
||||
void renderWaterEffects();
|
||||
void renderHud();
|
||||
void renderMinimap();
|
||||
|
@ -681,7 +681,7 @@ private:
|
|||
|
||||
//private aux drawing
|
||||
void renderSelectionCircle(Vec3f v, int size, float radius, float thickness=0.2f);
|
||||
void renderHealthBar(Vec3f v, int size, float hp, float height, const Texture2D *texture, const Texture2D *backgroundTexture , float ep=-1.0f);
|
||||
void renderHealthBar(Vec3f v, int size, float hp, float height, bool lineBorder, const Texture2D *texture=NULL, const Texture2D *backgroundTexture=NULL , float ep=-1.0f);
|
||||
void renderTeamColorEffect(Vec3f &v, int heigth, int size, Vec3f color, const Texture2D *texture);
|
||||
void renderArrow(const Vec3f &pos1, const Vec3f &pos2, const Vec3f &color, float width);
|
||||
void renderTile(const Vec2i &pos);
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include "xml_parser.h"
|
||||
#include "tech_tree.h"
|
||||
#include "resource.h"
|
||||
#include "renderer.h"
|
||||
#include "platform_util.h"
|
||||
#include "game_util.h"
|
||||
#include "conversion.h"
|
||||
|
@ -37,6 +38,11 @@ FactionType::FactionType() {
|
|||
healthbarheight= -100.0f;
|
||||
healthbarthickness= 0.05f;
|
||||
healthbarVisible=hbvUndefined;
|
||||
healthbarBorderTextureEnabled=false;
|
||||
healthbarBackgroundTextureEnabled=false;
|
||||
healthbarLineBorder=true;
|
||||
healthbarTexture=NULL;
|
||||
healthbarBackgroundTexture=NULL;
|
||||
}
|
||||
|
||||
//load a faction, given a directory
|
||||
|
@ -277,15 +283,15 @@ void FactionType::load(const string &factionName, const TechTree *techTree, Chec
|
|||
|
||||
//healthbar
|
||||
if(factionNode->hasChild("healthbar")) {
|
||||
const XmlNode *HealthbarNode= factionNode->getChild("healthbar");
|
||||
if(HealthbarNode->hasChild("height")) {
|
||||
healthbarheight= HealthbarNode->getChild("height")->getAttribute("value")->getFloatValue();
|
||||
const XmlNode *healthbarNode= factionNode->getChild("healthbar");
|
||||
if(healthbarNode->hasChild("height")) {
|
||||
healthbarheight= healthbarNode->getChild("height")->getAttribute("value")->getFloatValue();
|
||||
}
|
||||
if(HealthbarNode->hasChild("thickness")) {
|
||||
healthbarthickness= HealthbarNode->getChild("thickness")->getAttribute("value")->getFloatValue(0.f, 1.f);
|
||||
if(healthbarNode->hasChild("thickness")) {
|
||||
healthbarthickness= healthbarNode->getChild("thickness")->getAttribute("value")->getFloatValue(0.f, 1.f);
|
||||
}
|
||||
if(HealthbarNode->hasChild("visible")) {
|
||||
string healthbarVisibleString=HealthbarNode->getChild("visible")->getAttribute("value")->getValue();
|
||||
if(healthbarNode->hasChild("visible")) {
|
||||
string healthbarVisibleString=healthbarNode->getChild("visible")->getAttribute("value")->getValue();
|
||||
vector<string> v=split(healthbarVisibleString,"|");
|
||||
for (int i = 0; i < (int)v.size(); ++i) {
|
||||
string current=trim(v[i]);
|
||||
|
@ -302,6 +308,30 @@ void FactionType::load(const string &factionName, const TechTree *techTree, Chec
|
|||
}
|
||||
}
|
||||
}
|
||||
if(healthbarNode->hasChild("borderTexture")) {
|
||||
healthbarBorderTextureEnabled=healthbarNode->getChild("borderTexture")->getAttribute("enabled")->getBoolValue();
|
||||
if(healthbarBorderTextureEnabled && healthbarNode->getChild("borderTexture")->hasAttribute("path")) {
|
||||
healthbarTexture= Renderer::getInstance().newTexture2D(rsGame);
|
||||
if(healthbarTexture) {
|
||||
healthbarTexture->load(healthbarNode->getChild("borderTexture")->getAttribute("path")->getRestrictedValue(currentPath));
|
||||
}
|
||||
loadedFileList[healthbarNode->getChild("borderTexture")->getAttribute("path")->getRestrictedValue(currentPath)].push_back(make_pair(path,healthbarNode->getChild("borderTexture")->getAttribute("path")->getRestrictedValue()));
|
||||
}
|
||||
}
|
||||
if(healthbarNode->hasChild("backgroundTexture")) {
|
||||
healthbarBackgroundTextureEnabled=healthbarNode->getChild("backgroundTexture")->getAttribute("enabled")->getBoolValue();
|
||||
if(healthbarBackgroundTextureEnabled && healthbarNode->getChild("backgroundTexture")->hasAttribute("path")) {
|
||||
healthbarBackgroundTexture= Renderer::getInstance().newTexture2D(rsGame);
|
||||
if(healthbarBackgroundTexture) {
|
||||
healthbarBackgroundTexture->load(healthbarNode->getChild("backgroundTexture")->getAttribute("path")->getRestrictedValue(currentPath));
|
||||
}
|
||||
loadedFileList[healthbarNode->getChild("backgroundTexture")->getAttribute("path")->getRestrictedValue(currentPath)].push_back(make_pair(path,healthbarNode->getChild("backgroundTexture")->getAttribute("path")->getRestrictedValue()));
|
||||
}
|
||||
}
|
||||
if(healthbarNode->hasChild("lineBorder")) {
|
||||
healthbarLineBorder= healthbarNode->getChild("lineBorder")->getAttribute("enabled")->getBoolValue();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//read ai behavior
|
||||
|
|
|
@ -95,9 +95,15 @@ private:
|
|||
std::map<AIBehaviorStaticValueCategory, int > mapAIBehaviorStaticOverrideValues;
|
||||
|
||||
bool isLinked;
|
||||
|
||||
float healthbarheight;
|
||||
float healthbarthickness;
|
||||
int healthbarVisible;
|
||||
bool healthbarBorderTextureEnabled;
|
||||
bool healthbarBackgroundTextureEnabled;
|
||||
bool healthbarLineBorder;
|
||||
Texture2D *healthbarTexture;
|
||||
Texture2D *healthbarBackgroundTexture;
|
||||
|
||||
|
||||
public:
|
||||
|
@ -127,6 +133,11 @@ public:
|
|||
inline float getHealthbarHeight() const {return healthbarheight;}
|
||||
inline float getHealthbarThickness() const {return healthbarthickness;}
|
||||
inline int getHealthbarVisible() const {return healthbarVisible;}
|
||||
inline bool isHealthbarBorderTextureEnabled() const {return healthbarBorderTextureEnabled;}
|
||||
inline bool isHealthbarBackgroundTextureEnabled() const {return healthbarBackgroundTextureEnabled;}
|
||||
inline bool isHealthbarLineBorder() const {return healthbarLineBorder;}
|
||||
Texture2D *getHealthbarTexture() const {return healthbarTexture;}
|
||||
Texture2D *getHealthbarBackgroundTexture() const {return healthbarBackgroundTexture;}
|
||||
|
||||
|
||||
const UnitType *getUnitType(const string &name) const;
|
||||
|
|
|
@ -451,15 +451,15 @@ void UnitType::loaddd(int id,const string &dir, const TechTree *techTree,
|
|||
|
||||
//healthbar
|
||||
if(parametersNode->hasChild("healthbar")) {
|
||||
const XmlNode *HealthbarNode= parametersNode->getChild("healthbar");
|
||||
if(HealthbarNode->hasChild("height")) {
|
||||
healthbarheight= HealthbarNode->getChild("height")->getAttribute("value")->getFloatValue();
|
||||
const XmlNode *healthbarNode= parametersNode->getChild("healthbar");
|
||||
if(healthbarNode->hasChild("height")) {
|
||||
healthbarheight= healthbarNode->getChild("height")->getAttribute("value")->getFloatValue();
|
||||
}
|
||||
if(HealthbarNode->hasChild("thickness")) {
|
||||
healthbarthickness= HealthbarNode->getChild("thickness")->getAttribute("value")->getFloatValue(0.f, 1.f);
|
||||
if(healthbarNode->hasChild("thickness")) {
|
||||
healthbarthickness= healthbarNode->getChild("thickness")->getAttribute("value")->getFloatValue(0.f, 1.f);
|
||||
}
|
||||
if(HealthbarNode->hasChild("visible")) {
|
||||
string healthbarVisibleString=HealthbarNode->getChild("visible")->getAttribute("value")->getValue();
|
||||
if(healthbarNode->hasChild("visible")) {
|
||||
string healthbarVisibleString=healthbarNode->getChild("visible")->getAttribute("value")->getValue();
|
||||
vector<string> v=split(healthbarVisibleString,"|");
|
||||
for (int i = 0; i < (int)v.size(); ++i) {
|
||||
string current=trim(v[i]);
|
||||
|
|
Loading…
Reference in New Issue