OSGHUD: first implementation of tires temps widget
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@7812 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: 82c6bd8480021356ef978ade45e9a94424e2c9e9 Former-commit-id: 20000a55cd0ccf5e87538d0fcbb3e1298bbc7b0c
This commit is contained in:
parent
a150de0cdd
commit
cd67b9d0d6
1 changed files with 106 additions and 0 deletions
|
@ -661,6 +661,19 @@ void changeImageSize(osg::Geometry *geom,
|
|||
geom->setTexCoordArray(0,texcoords);
|
||||
}
|
||||
}
|
||||
|
||||
void changeImageAlpha(osg::Geometry *geom,
|
||||
float newAlpha/*where 1.0 fully visible and 0.0 completely hidden*/
|
||||
)
|
||||
{
|
||||
// assign colors
|
||||
osg::Vec4Array* colors = new osg::Vec4Array(1);
|
||||
(*colors)[0].set(1.0f,1.0f,1.0f,newAlpha);
|
||||
geom->setColorArray(colors);
|
||||
geom->setColorBinding(osg::Geometry::BIND_OVERALL);
|
||||
|
||||
}
|
||||
|
||||
// TODO[END]: move this to utils? /src/modules/graphic/osggraph/Utils
|
||||
|
||||
SDHUD::SDHUD()
|
||||
|
@ -1206,11 +1219,104 @@ void SDHUD::Refresh(tSituation *s, const SDFrameInfo* frameInfo,
|
|||
|
||||
prevSteerAngle = angle;
|
||||
|
||||
// tires
|
||||
|
||||
|
||||
for (int i = 0; i < 4; i++) { //for each tires
|
||||
|
||||
std::ostringstream tireName;
|
||||
switch(i) {
|
||||
case 0:
|
||||
tireName << "fr-";
|
||||
break;
|
||||
case 1:
|
||||
tireName << "fl-";
|
||||
break;
|
||||
case 2:
|
||||
tireName << "rr-";
|
||||
break;
|
||||
case 3:
|
||||
tireName << "rl-";
|
||||
break;
|
||||
default:
|
||||
tireName << "";
|
||||
}
|
||||
|
||||
for (int h = 0; h < 3; h++) { //for each part of the tire (in-mid-out)
|
||||
float currentTemp = 0;
|
||||
std::string tirePartName = "";
|
||||
switch(h) {
|
||||
case 0:
|
||||
tirePartName = "in";
|
||||
currentTemp = currCar->_tyreT_in(i);
|
||||
break;
|
||||
case 1:
|
||||
tirePartName = "mid";
|
||||
currentTemp = currCar->_tyreT_mid(i);
|
||||
break;
|
||||
case 2:
|
||||
tirePartName = "out";
|
||||
currentTemp = currCar->_tyreT_out(i);
|
||||
break;
|
||||
default:
|
||||
tirePartName = "";
|
||||
}
|
||||
|
||||
std::ostringstream tireNameCold;
|
||||
std::ostringstream tireNameOptimal;
|
||||
std::ostringstream tireNameHot;
|
||||
|
||||
tireNameCold << "tire-" << tireName.str().c_str() << tirePartName.c_str() << "-cold";
|
||||
tireNameOptimal << "tire-" << tireName.str().c_str() << tirePartName.c_str() << "-optimal";
|
||||
tireNameHot << "tire-" << tireName.str().c_str() << tirePartName.c_str() << "-hot";
|
||||
|
||||
float optimalAlpha = 0.0f;
|
||||
float hotAlpha = 0.0f;
|
||||
|
||||
float tempOptimal = currCar->_tyreT_opt(i);
|
||||
float tempMaxCold = tempOptimal - ( tempOptimal * 10 / 100 ); //temp at witch we will conside the tire maximun cold
|
||||
float tempMaxHot = tempOptimal + ( tempOptimal * 10 / 100 ); //temp at witch we will conside the tire maximun hot
|
||||
|
||||
|
||||
changeImageAlpha(this->hudImgElements[tireNameCold.str().c_str()], 1.0f);
|
||||
optimalAlpha = (currentTemp-tempMaxCold) / (tempOptimal-tempMaxCold);
|
||||
if (optimalAlpha > 1.0f){
|
||||
optimalAlpha = 1.0f;
|
||||
}
|
||||
if (optimalAlpha < 0.0f){
|
||||
optimalAlpha = 0.0f;
|
||||
}
|
||||
changeImageAlpha(this->hudImgElements[tireNameOptimal.str().c_str()], optimalAlpha);
|
||||
|
||||
|
||||
hotAlpha = (tempMaxHot-currentTemp) / (tempMaxHot-tempOptimal);
|
||||
if (hotAlpha > 1.0f){
|
||||
hotAlpha = 1.0f;
|
||||
}
|
||||
if (hotAlpha < 0.0f){
|
||||
hotAlpha = 0.0f;
|
||||
}
|
||||
|
||||
changeImageAlpha(this->hudImgElements[tireNameHot.str().c_str()], 1.0-hotAlpha);
|
||||
}
|
||||
//temps string only do this for middle temps?
|
||||
temp.str("");
|
||||
temp << currCar->_tyreT_mid(i);
|
||||
|
||||
std::ostringstream tireNameText;
|
||||
tireNameText << "tire-" << tireName.str().c_str() << "temps";
|
||||
hudTextElements[tireNameText.str().c_str()]->setText(temp.str());
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// debug info
|
||||
temp.str("");
|
||||
temp << "FPS: " << frameInfo->fAvgFps << " (Inst: " << frameInfo->fInstFps << ")";
|
||||
hudTextElements["debug-info"]->setText(temp.str());
|
||||
|
||||
|
||||
}
|
||||
|
||||
void SDHUD::ToggleHUD()
|
||||
|
|
Loading…
Reference in a new issue