commit
26db981702
|
@ -115,6 +115,7 @@ Game::Game() : ProgramState(NULL) {
|
||||||
renderFpsAvgTest=0;
|
renderFpsAvgTest=0;
|
||||||
renderExtraTeamColor=0;
|
renderExtraTeamColor=0;
|
||||||
photoModeEnabled=false;
|
photoModeEnabled=false;
|
||||||
|
healthbarMode=hbvUndefined;
|
||||||
visibleHUD=false;
|
visibleHUD=false;
|
||||||
timeDisplay=false;
|
timeDisplay=false;
|
||||||
withRainEffect=false;
|
withRainEffect=false;
|
||||||
|
@ -235,6 +236,7 @@ void Game::resetMembers() {
|
||||||
|
|
||||||
scrollSpeed = Config::getInstance().getFloat("UiScrollSpeed","1.5");
|
scrollSpeed = Config::getInstance().getFloat("UiScrollSpeed","1.5");
|
||||||
photoModeEnabled = Config::getInstance().getBool("PhotoMode","false");
|
photoModeEnabled = Config::getInstance().getBool("PhotoMode","false");
|
||||||
|
healthbarMode = Config::getInstance().getInt("HealthbarMode","0");
|
||||||
visibleHUD = Config::getInstance().getBool("VisibleHud","true");
|
visibleHUD = Config::getInstance().getBool("VisibleHud","true");
|
||||||
timeDisplay = Config::getInstance().getBool("TimeDisplay","true");
|
timeDisplay = Config::getInstance().getBool("TimeDisplay","true");
|
||||||
withRainEffect = Config::getInstance().getBool("RainEffect","true");
|
withRainEffect = Config::getInstance().getBool("RainEffect","true");
|
||||||
|
@ -4655,6 +4657,35 @@ void Game::keyDown(SDL_KeyboardEvent key) {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
//Toggle Healthbars
|
||||||
|
else if(isKeyPressed(configKeys.getSDLKey("ToggleHealthbars"),key, false) == true) {
|
||||||
|
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
|
//Toggle music
|
||||||
//else if(key == configKeys.getCharKey("ToggleMusic")) {
|
//else if(key == configKeys.getCharKey("ToggleMusic")) {
|
||||||
else if(isKeyPressed(configKeys.getSDLKey("ToggleMusic"),key, false) == true) {
|
else if(isKeyPressed(configKeys.getSDLKey("ToggleMusic"),key, false) == true) {
|
||||||
|
@ -5252,7 +5283,9 @@ void Game::render3d(){
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled && chrono.getMillis() > 0) chrono.start();
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled && chrono.getMillis() > 0) chrono.start();
|
||||||
|
|
||||||
//renderOnTopBars (aka Healthbars)
|
//renderOnTopBars (aka Healthbars)
|
||||||
renderer.renderOnTopBars();
|
if(photoModeEnabled == false) {
|
||||||
|
renderer.renderHealthBars(healthbarMode);
|
||||||
|
}
|
||||||
|
|
||||||
//particles
|
//particles
|
||||||
renderer.renderParticleManager(rsGame);
|
renderer.renderParticleManager(rsGame);
|
||||||
|
|
|
@ -141,6 +141,7 @@ private:
|
||||||
static const int renderTeamColorPlaneBit=2;
|
static const int renderTeamColorPlaneBit=2;
|
||||||
|
|
||||||
bool photoModeEnabled;
|
bool photoModeEnabled;
|
||||||
|
int healthbarMode;
|
||||||
bool visibleHUD;
|
bool visibleHUD;
|
||||||
bool timeDisplay;
|
bool timeDisplay;
|
||||||
bool withRainEffect;
|
bool withRainEffect;
|
||||||
|
|
|
@ -78,6 +78,9 @@ CoreData::CoreData() {
|
||||||
statusNotReadyTexture=NULL;
|
statusNotReadyTexture=NULL;
|
||||||
statusBRBTexture=NULL;
|
statusBRBTexture=NULL;
|
||||||
|
|
||||||
|
healthbarTexture=NULL;
|
||||||
|
healthbarBackgroundTexture=NULL;
|
||||||
|
|
||||||
miscTextureList.clear();
|
miscTextureList.clear();
|
||||||
|
|
||||||
displayFont=NULL;
|
displayFont=NULL;
|
||||||
|
@ -181,6 +184,12 @@ Texture2D *CoreData::getTextureBySystemId(TextureSystemType type) const {
|
||||||
case tsyst_statusBRBTexture:
|
case tsyst_statusBRBTexture:
|
||||||
result = statusBRBTexture;
|
result = statusBRBTexture;
|
||||||
break;
|
break;
|
||||||
|
case tsyst_healthbarTexture:
|
||||||
|
result = healthbarTexture;
|
||||||
|
break;
|
||||||
|
case tsyst_healthbarBackgroundTexture:
|
||||||
|
result = healthbarBackgroundTexture;
|
||||||
|
break;
|
||||||
|
|
||||||
//std::vector<Texture2D *> miscTextureList;
|
//std::vector<Texture2D *> miscTextureList;
|
||||||
}
|
}
|
||||||
|
@ -417,6 +426,24 @@ Texture2D *CoreData::getGameWinnerTexture() {
|
||||||
return gameWinnerTexture;
|
return gameWinnerTexture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Texture2D *CoreData::getHealthbarTexture() {
|
||||||
|
string data_path = getDataPath();
|
||||||
|
loadTextureIfRequired(&healthbarTexture,data_path,
|
||||||
|
CORE_MISC_TEXTURES_PATH + "healthbar.png", tsyst_healthbarTexture,
|
||||||
|
true, false, false, true);
|
||||||
|
|
||||||
|
return healthbarTexture;
|
||||||
|
}
|
||||||
|
|
||||||
|
Texture2D *CoreData::getHealthbarBackgroundTexture() {
|
||||||
|
string data_path = getDataPath();
|
||||||
|
loadTextureIfRequired(&healthbarBackgroundTexture,data_path,
|
||||||
|
CORE_MISC_TEXTURES_PATH + "healthbarBackground.png", tsyst_healthbarBackgroundTexture,
|
||||||
|
true, false, false, true);
|
||||||
|
|
||||||
|
return healthbarBackgroundTexture;
|
||||||
|
}
|
||||||
|
|
||||||
void CoreData::loadLogoTextureExtraIfRequired() {
|
void CoreData::loadLogoTextureExtraIfRequired() {
|
||||||
int loadAttemptLookupKey = tsyst_COUNT + 1;
|
int loadAttemptLookupKey = tsyst_COUNT + 1;
|
||||||
if(itemLoadAttempted.find(loadAttemptLookupKey) == itemLoadAttempted.end()) {
|
if(itemLoadAttempted.find(loadAttemptLookupKey) == itemLoadAttempted.end()) {
|
||||||
|
|
|
@ -78,6 +78,9 @@ private:
|
||||||
Texture2D *statusNotReadyTexture;
|
Texture2D *statusNotReadyTexture;
|
||||||
Texture2D *statusBRBTexture;
|
Texture2D *statusBRBTexture;
|
||||||
|
|
||||||
|
Texture2D *healthbarTexture;
|
||||||
|
Texture2D *healthbarBackgroundTexture;
|
||||||
|
|
||||||
std::vector<Texture2D *> miscTextureList;
|
std::vector<Texture2D *> miscTextureList;
|
||||||
|
|
||||||
Font2D *displayFont;
|
Font2D *displayFont;
|
||||||
|
@ -133,6 +136,8 @@ public:
|
||||||
tsyst_statusReadyTexture,
|
tsyst_statusReadyTexture,
|
||||||
tsyst_statusNotReadyTexture,
|
tsyst_statusNotReadyTexture,
|
||||||
tsyst_statusBRBTexture,
|
tsyst_statusBRBTexture,
|
||||||
|
tsyst_healthbarTexture,
|
||||||
|
tsyst_healthbarBackgroundTexture,
|
||||||
|
|
||||||
tsyst_COUNT
|
tsyst_COUNT
|
||||||
};
|
};
|
||||||
|
@ -171,6 +176,9 @@ public:
|
||||||
Texture2D *getStatusBRBTexture();
|
Texture2D *getStatusBRBTexture();
|
||||||
Texture2D *getGameWinnerTexture();
|
Texture2D *getGameWinnerTexture();
|
||||||
|
|
||||||
|
Texture2D *getHealthbarTexture();
|
||||||
|
Texture2D *getHealthbarBackgroundTexture();
|
||||||
|
|
||||||
size_t getLogoTextureExtraCount();
|
size_t getLogoTextureExtraCount();
|
||||||
Texture2D *getLogoTextureExtra(int idx);
|
Texture2D *getLogoTextureExtra(int idx);
|
||||||
|
|
||||||
|
|
|
@ -5641,7 +5641,7 @@ void Renderer::renderSelectionEffects() {
|
||||||
glPopAttrib();
|
glPopAttrib();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::renderOnTopBars(){
|
void Renderer::renderHealthBars(int healthbarMode){
|
||||||
if(GlobalStaticFlags::getIsNonGraphicalModeEnabled() == true) {
|
if(GlobalStaticFlags::getIsNonGraphicalModeEnabled() == true) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -5651,6 +5651,10 @@ void Renderer::renderOnTopBars(){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(config.getBool("PhotoMode")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
glPushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT | GL_DEPTH_BUFFER_BIT);
|
glPushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
glDisable(GL_LIGHTING);
|
glDisable(GL_LIGHTING);
|
||||||
glDisable(GL_TEXTURE_2D);
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
@ -5668,12 +5672,39 @@ void Renderer::renderOnTopBars(){
|
||||||
|
|
||||||
float healthbarheight;
|
float healthbarheight;
|
||||||
float healthbarthickness;
|
float healthbarthickness;
|
||||||
int healthbarVisible;
|
int healthbarVisible=hbvUndefined;
|
||||||
|
const Texture2D *healthbarTexture;
|
||||||
|
const Texture2D *healthbarBackgroundTexture;
|
||||||
|
bool healthbarLineBorder;
|
||||||
|
|
||||||
//get settings of the faction
|
//get settings of the faction
|
||||||
healthbarheight=unit->getFaction()->getType()->getHealthbarHeight();
|
healthbarheight=unit->getFaction()->getType()->getHealthbarHeight();
|
||||||
healthbarthickness=unit->getFaction()->getType()->getHealthbarThickness();
|
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
|
||||||
|
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
|
//replace them by the ones from the unit if existent
|
||||||
if(unit->getType()->getHealthbarVisible()!=hbvOff && unit->getType()->getHealthbarVisible()!=hbvUndefined) {
|
if(unit->getType()->getHealthbarVisible()!=hbvOff && unit->getType()->getHealthbarVisible()!=hbvUndefined) {
|
||||||
|
@ -5683,28 +5714,29 @@ void Renderer::renderOnTopBars(){
|
||||||
if(unit->getType()->getHealthbarThickness()!=-1.0f) {
|
if(unit->getType()->getHealthbarThickness()!=-1.0f) {
|
||||||
healthbarthickness=unit->getType()->getHealthbarThickness();
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(unit->isAlive() && !(healthbarVisible==hbvUndefined || (healthbarVisible&hbvOff))
|
bool settingsWantToRenderThem=!(healthbarVisible==hbvUndefined || (healthbarVisible&hbvOff))
|
||||||
&& ((healthbarVisible&hbvAlways)
|
&& ((healthbarVisible&hbvAlways)
|
||||||
|| ((healthbarVisible&hbvDamaged) && unit->getHp()!=unit->getType()->getMaxHp())
|
|| ((healthbarVisible&hbvDamaged) && unit->getHp()!=unit->getType()->getMaxHp())
|
||||||
|| ((healthbarVisible&hbvSelected) && game->getGui()->isSelected(unit)))) {
|
|| ((healthbarVisible&hbvSelected) && game->getGui()->isSelected(unit)));
|
||||||
|
|
||||||
|
if(unit->isAlive() && (settingsWantToRenderThem)) {
|
||||||
Vec3f currVec= unit->getCurrVectorFlat();
|
Vec3f currVec= unit->getCurrVectorFlat();
|
||||||
if(healthbarheight==-100.0f) {
|
if(healthbarheight==-100.0f) {
|
||||||
currVec.y+=unit->getType()->getHeight()+1;
|
currVec.y+=unit->getType()->getHeight();
|
||||||
} else {
|
} else {
|
||||||
currVec.y+=healthbarheight;
|
currVec.y+=healthbarheight;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(unit->getType()->getMaxEp() > 0) {
|
if(unit->getType()->getMaxEp() > 0) {
|
||||||
healthbarthickness=healthbarthickness*2;
|
healthbarthickness=healthbarthickness*2;
|
||||||
}
|
renderHealthBar(currVec,unit->getType()->getSize(),unit->getHpRatio(),healthbarthickness,healthbarLineBorder,healthbarTexture,healthbarBackgroundTexture,unit->getEpRatio());
|
||||||
|
|
||||||
if(unit->getType()->getMaxEp() > 0) {
|
|
||||||
renderSelectionHpBar(currVec,unit->getType()->getSize(),unit->getHpRatio(),healthbarthickness,unit->getEpRatio());
|
|
||||||
} else {
|
} else {
|
||||||
renderSelectionHpBar(currVec,unit->getType()->getSize(),unit->getHpRatio(),healthbarthickness);
|
renderHealthBar(currVec,unit->getType()->getSize(),unit->getHpRatio(),healthbarthickness,healthbarLineBorder,healthbarTexture,healthbarBackgroundTexture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8317,9 +8349,15 @@ void Renderer::enableProjectiveTexturing() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== private aux drawing ====================
|
// ==================== private aux drawing ====================
|
||||||
void Renderer::renderSelectionHpBar(Vec3f v, int size, float hp, float height, 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;
|
||||||
|
}
|
||||||
|
|
||||||
Vec3f rightVector;
|
Vec3f rightVector;
|
||||||
Vec3f upVector;
|
Vec3f upVector;
|
||||||
|
Vec3f rightVectorTexture;
|
||||||
|
Vec3f upVectorTexture;
|
||||||
v.y+=1;
|
v.y+=1;
|
||||||
float modelview[16];
|
float modelview[16];
|
||||||
float width=(float)size/6+0.25f;
|
float width=(float)size/6+0.25f;
|
||||||
|
@ -8334,19 +8372,41 @@ void Renderer::renderSelectionHpBar(Vec3f v, int size, float hp, float height, f
|
||||||
glGetFloatv(GL_MODELVIEW_MATRIX , modelview);
|
glGetFloatv(GL_MODELVIEW_MATRIX , modelview);
|
||||||
rightVector= Vec3f(modelview[0], modelview[4], modelview[8]);
|
rightVector= Vec3f(modelview[0], modelview[4], modelview[8]);
|
||||||
upVector= Vec3f(modelview[1], modelview[5], modelview[9]);
|
upVector= Vec3f(modelview[1], modelview[5], modelview[9]);
|
||||||
|
rightVectorTexture=rightVector*2;
|
||||||
|
upVectorTexture=upVector*4;
|
||||||
|
|
||||||
hp=hp*2-1;
|
hp=hp*2-1;
|
||||||
ep=ep*2-1;
|
ep=ep*2-1;
|
||||||
|
|
||||||
//from green to yellow to red
|
//from green to yellow to red
|
||||||
if(hp >= 0.0f) {
|
if(hp >= 0.5f) {
|
||||||
green=brightness;
|
green=brightness;
|
||||||
red=brightness-hp*brightness;
|
red=brightness-(hp-0.5f)*brightness;
|
||||||
} else {
|
} else {
|
||||||
red=brightness;
|
red=brightness;
|
||||||
green=brightness+hp*brightness;
|
green=brightness+(hp-0.5f)*brightness;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
glColor4f(red,green,0.0f,0.4f);
|
||||||
glBegin(GL_QUADS);
|
glBegin(GL_QUADS);
|
||||||
if(ep < -2.0f) {
|
if(ep < -2.0f) {
|
||||||
|
@ -8371,15 +8431,35 @@ void Renderer::renderSelectionHpBar(Vec3f v, int size, float hp, float height, f
|
||||||
}
|
}
|
||||||
glEnd();
|
glEnd();
|
||||||
|
|
||||||
//border
|
if(lineBorder) {
|
||||||
glColor4f(red+0.1f,green+0.1f,0.1f,0.5f);
|
//border
|
||||||
glBegin(GL_LINE_LOOP);
|
glColor4f(red+0.1f,green+0.1f,0.1f,0.5f);
|
||||||
glVertex3fv((v - (rightVector*width - upVector*height)).ptr());
|
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());
|
||||||
glVertex3fv((v + (rightVector*width + upVector*height)).ptr());
|
glVertex3fv((v + (rightVector*width - upVector*height)).ptr());
|
||||||
glEnd();
|
glVertex3fv((v + (rightVector*width + upVector*height)).ptr());
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
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();
|
glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
|
@ -558,7 +558,7 @@ public:
|
||||||
void renderUnitsToBuild(const int renderFps);
|
void renderUnitsToBuild(const int renderFps);
|
||||||
|
|
||||||
void renderSelectionEffects();
|
void renderSelectionEffects();
|
||||||
void renderOnTopBars();
|
void renderHealthBars(int forceHealthbars=hbvUndefined);
|
||||||
void renderWaterEffects();
|
void renderWaterEffects();
|
||||||
void renderHud();
|
void renderHud();
|
||||||
void renderMinimap();
|
void renderMinimap();
|
||||||
|
@ -690,7 +690,7 @@ private:
|
||||||
|
|
||||||
//private aux drawing
|
//private aux drawing
|
||||||
void renderSelectionCircle(Vec3f v, int size, float radius, float thickness=0.2f);
|
void renderSelectionCircle(Vec3f v, int size, float radius, float thickness=0.2f);
|
||||||
void renderSelectionHpBar(Vec3f v, int size, float hp, float height, 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 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 renderArrow(const Vec3f &pos1, const Vec3f &pos2, const Vec3f &color, float width);
|
||||||
void renderTile(const Vec2i &pos);
|
void renderTile(const Vec2i &pos);
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "xml_parser.h"
|
#include "xml_parser.h"
|
||||||
#include "tech_tree.h"
|
#include "tech_tree.h"
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
|
#include "renderer.h"
|
||||||
#include "platform_util.h"
|
#include "platform_util.h"
|
||||||
#include "game_util.h"
|
#include "game_util.h"
|
||||||
#include "conversion.h"
|
#include "conversion.h"
|
||||||
|
@ -37,6 +38,11 @@ FactionType::FactionType() {
|
||||||
healthbarheight= -100.0f;
|
healthbarheight= -100.0f;
|
||||||
healthbarthickness= 0.05f;
|
healthbarthickness= 0.05f;
|
||||||
healthbarVisible=hbvUndefined;
|
healthbarVisible=hbvUndefined;
|
||||||
|
healthbarBorderTextureEnabled=false;
|
||||||
|
healthbarBackgroundTextureEnabled=false;
|
||||||
|
healthbarLineBorder=true;
|
||||||
|
healthbarTexture=NULL;
|
||||||
|
healthbarBackgroundTexture=NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
//load a faction, given a directory
|
//load a faction, given a directory
|
||||||
|
@ -277,15 +283,15 @@ void FactionType::load(const string &factionName, const TechTree *techTree, Chec
|
||||||
|
|
||||||
//healthbar
|
//healthbar
|
||||||
if(factionNode->hasChild("healthbar")) {
|
if(factionNode->hasChild("healthbar")) {
|
||||||
const XmlNode *HealthbarNode= factionNode->getChild("healthbar");
|
const XmlNode *healthbarNode= factionNode->getChild("healthbar");
|
||||||
if(HealthbarNode->hasChild("height")) {
|
if(healthbarNode->hasChild("height")) {
|
||||||
healthbarheight= HealthbarNode->getChild("height")->getAttribute("value")->getFloatValue();
|
healthbarheight= healthbarNode->getChild("height")->getAttribute("value")->getFloatValue();
|
||||||
}
|
}
|
||||||
if(HealthbarNode->hasChild("thickness")) {
|
if(healthbarNode->hasChild("thickness")) {
|
||||||
healthbarthickness= HealthbarNode->getChild("thickness")->getAttribute("value")->getFloatValue(0.f, 1.f);
|
healthbarthickness= healthbarNode->getChild("thickness")->getAttribute("value")->getFloatValue(0.f, 1.f);
|
||||||
}
|
}
|
||||||
if(HealthbarNode->hasChild("visible")) {
|
if(healthbarNode->hasChild("visible")) {
|
||||||
string healthbarVisibleString=HealthbarNode->getChild("visible")->getAttribute("value")->getValue();
|
string healthbarVisibleString=healthbarNode->getChild("visible")->getAttribute("value")->getValue();
|
||||||
vector<string> v=split(healthbarVisibleString,"|");
|
vector<string> v=split(healthbarVisibleString,"|");
|
||||||
for (int i = 0; i < (int)v.size(); ++i) {
|
for (int i = 0; i < (int)v.size(); ++i) {
|
||||||
string current=trim(v[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
|
//read ai behavior
|
||||||
|
|
|
@ -95,9 +95,15 @@ private:
|
||||||
std::map<AIBehaviorStaticValueCategory, int > mapAIBehaviorStaticOverrideValues;
|
std::map<AIBehaviorStaticValueCategory, int > mapAIBehaviorStaticOverrideValues;
|
||||||
|
|
||||||
bool isLinked;
|
bool isLinked;
|
||||||
|
|
||||||
float healthbarheight;
|
float healthbarheight;
|
||||||
float healthbarthickness;
|
float healthbarthickness;
|
||||||
int healthbarVisible;
|
int healthbarVisible;
|
||||||
|
bool healthbarBorderTextureEnabled;
|
||||||
|
bool healthbarBackgroundTextureEnabled;
|
||||||
|
bool healthbarLineBorder;
|
||||||
|
Texture2D *healthbarTexture;
|
||||||
|
Texture2D *healthbarBackgroundTexture;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -127,6 +133,11 @@ public:
|
||||||
inline float getHealthbarHeight() const {return healthbarheight;}
|
inline float getHealthbarHeight() const {return healthbarheight;}
|
||||||
inline float getHealthbarThickness() const {return healthbarthickness;}
|
inline float getHealthbarThickness() const {return healthbarthickness;}
|
||||||
inline int getHealthbarVisible() const {return healthbarVisible;}
|
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;
|
const UnitType *getUnitType(const string &name) const;
|
||||||
|
|
|
@ -451,15 +451,15 @@ void UnitType::loaddd(int id,const string &dir, const TechTree *techTree,
|
||||||
|
|
||||||
//healthbar
|
//healthbar
|
||||||
if(parametersNode->hasChild("healthbar")) {
|
if(parametersNode->hasChild("healthbar")) {
|
||||||
const XmlNode *HealthbarNode= parametersNode->getChild("healthbar");
|
const XmlNode *healthbarNode= parametersNode->getChild("healthbar");
|
||||||
if(HealthbarNode->hasChild("height")) {
|
if(healthbarNode->hasChild("height")) {
|
||||||
healthbarheight= HealthbarNode->getChild("height")->getAttribute("value")->getFloatValue();
|
healthbarheight= healthbarNode->getChild("height")->getAttribute("value")->getFloatValue();
|
||||||
}
|
}
|
||||||
if(HealthbarNode->hasChild("thickness")) {
|
if(healthbarNode->hasChild("thickness")) {
|
||||||
healthbarthickness= HealthbarNode->getChild("thickness")->getAttribute("value")->getFloatValue(0.f, 1.f);
|
healthbarthickness= healthbarNode->getChild("thickness")->getAttribute("value")->getFloatValue(0.f, 1.f);
|
||||||
}
|
}
|
||||||
if(HealthbarNode->hasChild("visible")) {
|
if(healthbarNode->hasChild("visible")) {
|
||||||
string healthbarVisibleString=HealthbarNode->getChild("visible")->getAttribute("value")->getValue();
|
string healthbarVisibleString=healthbarNode->getChild("visible")->getAttribute("value")->getValue();
|
||||||
vector<string> v=split(healthbarVisibleString,"|");
|
vector<string> v=split(healthbarVisibleString,"|");
|
||||||
for (int i = 0; i < (int)v.size(); ++i) {
|
for (int i = 0; i < (int)v.size(); ++i) {
|
||||||
string current=trim(v[i]);
|
string current=trim(v[i]);
|
||||||
|
|
Loading…
Reference in New Issue