- added compounds model in OsgGraph
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9176 30fe4595-0a0c-4342-8851-515496e4dcbd
This commit is contained in:
parent
3359fba8db
commit
4a998d9883
|
@ -841,6 +841,7 @@ typedef struct CarElt
|
|||
#define PRM_ENGBRKCOEFF "brake coefficient"
|
||||
#define PRM_ENGBRKLINCOEFF "brake linear coefficient"
|
||||
#define PRM_ENGINEMAXTEMPWATER "max temperature water"
|
||||
#define PRM_ENGINETEMPCOEFF "engine temperature coefficient"
|
||||
#define PRM_POWER "power"
|
||||
#define PRM_TURBO "turbo"
|
||||
#define PRM_TURBO_RPM "turbo rpm"
|
||||
|
|
|
@ -33,6 +33,17 @@ osg::ref_ptr<osg::Node> SDWheels::initWheels(tCarElt *car_elt,void *handle)
|
|||
|
||||
this->brakes.setCar(car);
|
||||
|
||||
const char *wheelSoft3DModNamePrfx =
|
||||
GfParmGetStr(handle, SECT_GROBJECTS, PRM_WHEELSOFT_3D, "");
|
||||
const char *wheelMedium3DModNamePrfx =
|
||||
GfParmGetStr(handle, SECT_GROBJECTS, PRM_WHEELMEDIUM_3D, "");
|
||||
const char *wheelHard3DModNamePrfx =
|
||||
GfParmGetStr(handle, SECT_GROBJECTS, PRM_WHEELHARD_3D, "");
|
||||
const char *wheelWet3DModNamePrfx =
|
||||
GfParmGetStr(handle, SECT_GROBJECTS, PRM_WHEELWET_3D, "");
|
||||
const char *wheelExtremWet3DModNamePrfx =
|
||||
GfParmGetStr(handle, SECT_GROBJECTS, PRM_WHEELEXTWET_3D, "");
|
||||
|
||||
const char *wheelFront3DModFileNamePrfx =
|
||||
GfParmGetStr(handle, SECT_GROBJECTS, PRM_FRONT_WHEEL_3D, "");
|
||||
const char *wheelRear3DModFileNamePrfx =
|
||||
|
@ -40,26 +51,41 @@ osg::ref_ptr<osg::Node> SDWheels::initWheels(tCarElt *car_elt,void *handle)
|
|||
const char *wheel3DModFileNamePrfx =
|
||||
GfParmGetStr(handle, SECT_GROBJECTS, PRM_WHEEL_3D, "wheel");
|
||||
|
||||
if (*wheelFront3DModFileNamePrfx)
|
||||
if (*wheelSoft3DModNamePrfx)
|
||||
{
|
||||
wheels[FRNT_RGT] = initWheel(FRNT_RGT, wheelFront3DModFileNamePrfx);
|
||||
wheels[FRNT_LFT] = initWheel(FRNT_LFT, wheelFront3DModFileNamePrfx);
|
||||
}
|
||||
else
|
||||
{
|
||||
wheels[FRNT_RGT] =initWheel(FRNT_RGT, wheel3DModFileNamePrfx);
|
||||
wheels[FRNT_LFT] =initWheel(FRNT_LFT, wheel3DModFileNamePrfx);
|
||||
}
|
||||
wheels[FRNT_RGT] =initWheel(FRNT_RGT, true, wheelSoft3DModNamePrfx, wheelMedium3DModNamePrfx,
|
||||
wheelHard3DModNamePrfx, wheelWet3DModNamePrfx, wheelExtremWet3DModNamePrfx);
|
||||
wheels[FRNT_LFT] =initWheel(FRNT_LFT, true, wheelSoft3DModNamePrfx, wheelMedium3DModNamePrfx,
|
||||
wheelHard3DModNamePrfx, wheelWet3DModNamePrfx, wheelExtremWet3DModNamePrfx);
|
||||
|
||||
if (*wheelRear3DModFileNamePrfx)
|
||||
{
|
||||
wheels[REAR_RGT] =initWheel(REAR_RGT, wheelRear3DModFileNamePrfx);
|
||||
wheels[REAR_LFT] =initWheel(REAR_LFT, wheelRear3DModFileNamePrfx);
|
||||
wheels[REAR_RGT] =initWheel(REAR_RGT, true, wheelSoft3DModNamePrfx, wheelMedium3DModNamePrfx,
|
||||
wheelHard3DModNamePrfx, wheelWet3DModNamePrfx, wheelExtremWet3DModNamePrfx);
|
||||
wheels[REAR_LFT] =initWheel(REAR_LFT, true, wheelSoft3DModNamePrfx, wheelMedium3DModNamePrfx,
|
||||
wheelHard3DModNamePrfx, wheelWet3DModNamePrfx, wheelExtremWet3DModNamePrfx);
|
||||
}
|
||||
else
|
||||
{
|
||||
wheels[REAR_RGT] =initWheel(REAR_RGT, wheel3DModFileNamePrfx);
|
||||
wheels[REAR_LFT] =initWheel(REAR_LFT, wheel3DModFileNamePrfx);
|
||||
if (*wheelFront3DModFileNamePrfx)
|
||||
{
|
||||
wheels[FRNT_RGT] = initWheel(FRNT_RGT, false, wheelFront3DModFileNamePrfx, NULL, NULL, NULL, NULL);
|
||||
wheels[FRNT_LFT] = initWheel(FRNT_LFT, false, wheelFront3DModFileNamePrfx, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
wheels[FRNT_RGT] =initWheel(FRNT_RGT, false, wheel3DModFileNamePrfx, NULL, NULL, NULL, NULL);
|
||||
wheels[FRNT_LFT] =initWheel(FRNT_LFT, false, wheel3DModFileNamePrfx, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
if (*wheelRear3DModFileNamePrfx)
|
||||
{
|
||||
wheels[REAR_RGT] =initWheel(REAR_RGT, false, wheelRear3DModFileNamePrfx, NULL, NULL, NULL, NULL);
|
||||
wheels[REAR_LFT] =initWheel(REAR_LFT, false, wheelRear3DModFileNamePrfx, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
wheels[REAR_RGT] =initWheel(REAR_RGT, false, wheel3DModFileNamePrfx, NULL, NULL, NULL, NULL);
|
||||
wheels[REAR_LFT] =initWheel(REAR_LFT, false, wheel3DModFileNamePrfx, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
osg::ref_ptr<osg::Group> group = new osg::Group;
|
||||
|
@ -72,12 +98,15 @@ osg::ref_ptr<osg::Node> SDWheels::initWheels(tCarElt *car_elt,void *handle)
|
|||
return group.get();
|
||||
}
|
||||
|
||||
osg::ref_ptr<osg::MatrixTransform> SDWheels::initWheel(int wheelIndex, const char * wheel_mod_name)
|
||||
osg::ref_ptr<osg::MatrixTransform> SDWheels::initWheel(int wheelIndex, bool compound, const char *wheel_mod_name,
|
||||
const char *medium_mod_name, const char *hard_mod_name,
|
||||
const char *wet_mod_name, const char *extwet_mod_name)
|
||||
{
|
||||
osgLoader loader;
|
||||
char wheel_file_name[32];
|
||||
static const int MaxPathSize = 512;
|
||||
char buf[MaxPathSize];
|
||||
compounds = compound;
|
||||
|
||||
const bool bCustomSkin = strlen(this->car->_skinName) != 0;
|
||||
|
||||
|
@ -92,7 +121,7 @@ osg::ref_ptr<osg::MatrixTransform> SDWheels::initWheel(int wheelIndex, const cha
|
|||
GfLogInfo("Car Texture = %s\n", bSkinName.c_str());
|
||||
|
||||
if (!exist)
|
||||
bSkinName.clear();
|
||||
bSkinName.clear();
|
||||
else
|
||||
{
|
||||
snprintf(buf, MaxPathSize, "wheel3d-%s", car->_skinName);
|
||||
|
@ -121,15 +150,81 @@ osg::ref_ptr<osg::MatrixTransform> SDWheels::initWheel(int wheelIndex, const cha
|
|||
|
||||
wheels_switches[wheelIndex] = new osg::Switch;
|
||||
|
||||
// Load speed-dependant 3D wheel model if available
|
||||
for(int j=0;j<4;j++)
|
||||
if (compounds)
|
||||
{
|
||||
osg::ref_ptr<osg::Node> wheel = 0;
|
||||
if (wheel_mod_name && strlen(wheel_mod_name))
|
||||
for(int j=0; j<4; j++)
|
||||
{
|
||||
snprintf(wheel_file_name, 32, "%s%d.acc", wheel_mod_name, j);
|
||||
wheel = loader.Load3dFile(wheel_file_name, true, bSkinName);
|
||||
wheels_switches[wheelIndex]->addChild(wheel.get(), false);
|
||||
osg::ref_ptr<osg::Node> wheel = 0;
|
||||
if (wheel_mod_name && strlen(wheel_mod_name))
|
||||
{
|
||||
snprintf(wheel_file_name, 32, "%s%d.acc", wheel_mod_name, j);
|
||||
wheel = loader.Load3dFile(wheel_file_name, true, bSkinName);
|
||||
wheels_switches[wheelIndex]->addChild(wheel.get(), false);
|
||||
GfLogDebug("Loading compound %s\n", wheel_mod_name);
|
||||
}
|
||||
}
|
||||
|
||||
for(int j=0; j<4; j++)
|
||||
{
|
||||
osg::ref_ptr<osg::Node> wheel = 0;
|
||||
if (medium_mod_name && strlen(medium_mod_name))
|
||||
{
|
||||
snprintf(wheel_file_name, 32, "%s%d.acc", medium_mod_name, j);
|
||||
wheel = loader.Load3dFile(wheel_file_name, true, bSkinName);
|
||||
wheels_switches[wheelIndex]->addChild(wheel.get(), false);
|
||||
GfLogDebug("Loading compound %s\n", medium_mod_name);
|
||||
}
|
||||
}
|
||||
|
||||
for(int j=0; j<4; j++)
|
||||
{
|
||||
osg::ref_ptr<osg::Node> wheel = 0;
|
||||
if (hard_mod_name && strlen(hard_mod_name))
|
||||
{
|
||||
snprintf(wheel_file_name, 32, "%s%d.acc", hard_mod_name, j);
|
||||
wheel = loader.Load3dFile(wheel_file_name, true, bSkinName);
|
||||
wheels_switches[wheelIndex]->addChild(wheel.get(), false);
|
||||
GfLogDebug("Loading compound %s\n", hard_mod_name);
|
||||
}
|
||||
}
|
||||
|
||||
for(int j=0; j<4; j++)
|
||||
{
|
||||
osg::ref_ptr<osg::Node> wheel = 0;
|
||||
if (wet_mod_name && strlen(wet_mod_name))
|
||||
{
|
||||
snprintf(wheel_file_name, 32, "%s%d.acc", wet_mod_name, j);
|
||||
wheel = loader.Load3dFile(wheel_file_name, true, bSkinName);
|
||||
wheels_switches[wheelIndex]->addChild(wheel.get(), false);
|
||||
GfLogDebug("Loading compound %s\n", wet_mod_name);
|
||||
}
|
||||
}
|
||||
|
||||
for(int j=0; j<4; j++)
|
||||
{
|
||||
osg::ref_ptr<osg::Node> wheel = 0;
|
||||
if (extwet_mod_name && strlen(extwet_mod_name))
|
||||
{
|
||||
snprintf(wheel_file_name, 32, "%s%d.acc", extwet_mod_name, j);
|
||||
wheel = loader.Load3dFile(wheel_file_name, true, bSkinName);
|
||||
wheels_switches[wheelIndex]->addChild(wheel.get(), false);
|
||||
GfLogDebug("Loading compound %s\n", extwet_mod_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
// Load speed-dependant 3D wheel model if available
|
||||
for(int j=0; j<4; j++)
|
||||
{
|
||||
osg::ref_ptr<osg::Node> wheel = 0;
|
||||
if (wheel_mod_name && strlen(wheel_mod_name))
|
||||
{
|
||||
snprintf(wheel_file_name, 32, "%s%d.acc", wheel_mod_name, j);
|
||||
wheel = loader.Load3dFile(wheel_file_name, true, bSkinName);
|
||||
wheels_switches[wheelIndex]->addChild(wheel.get(), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -185,12 +280,23 @@ void SDWheels::updateWheels()
|
|||
trans->setMatrix(spinMatrix);
|
||||
wheels[i]->setMatrix(posMatrix);
|
||||
|
||||
|
||||
for (j = 0; j < 3; j++)
|
||||
{
|
||||
if (fabs(car->_wheelSpinVel(i)) < maxVel[j])
|
||||
break;
|
||||
}
|
||||
|
||||
this->wheels_switches[i]->setSingleChildOn(j);
|
||||
int compoundSelector = (car->priv.wheel[i].compound - 1);
|
||||
int selectchild = compoundSelector * 4;
|
||||
int v = j + selectchild;
|
||||
|
||||
if (compounds)
|
||||
{
|
||||
this->wheels_switches[i]->setSingleChildOn(v);
|
||||
GfLogDebug("Drawing Compounds = %i\n", v);
|
||||
}
|
||||
else
|
||||
this->wheels_switches[i]->setSingleChildOn(j);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,7 +37,10 @@ private :
|
|||
osg::ref_ptr<osg::Switch> wheels_switches[4];
|
||||
osg::ref_ptr<osg::MatrixTransform> wheels[4];
|
||||
SDBrakes brakes;
|
||||
osg::ref_ptr<osg::MatrixTransform> initWheel(int wheelIndex, const char *wheel_mod_name);
|
||||
osg::ref_ptr<osg::MatrixTransform> initWheel(int wheelIndex, bool compound, const char *wheel_mod_name,
|
||||
const char *medium_mod_name, const char *hard_mod_name,
|
||||
const char *wet_mod_name, const char *extwet_mod_name);
|
||||
bool compounds;
|
||||
|
||||
public :
|
||||
SDWheels() : car(nullptr) { }
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "sim.h"
|
||||
|
||||
float enginePressure;
|
||||
double engineCoefficient;
|
||||
|
||||
void
|
||||
SimEngineConfig(tCar *car)
|
||||
|
@ -56,6 +57,7 @@ SimEngineConfig(tCar *car)
|
|||
car->engine.I_joint = car->engine.I;
|
||||
car->engine.timeInLimiter = 0.0f;
|
||||
car->engine.max_temp_water = GfParmGetNum(hdle, SECT_ENGINE, PRM_ENGINEMAXTEMPWATER, (char*)NULL, 95.0f);
|
||||
engineCoefficient = GfParmGetNum(hdle, SECT_ENGINE, PRM_ENGINETEMPCOEFF, (char*)NULL, 0.0000047f);
|
||||
car->carElt->_engineMaxTempWater = car->engine.max_temp_water;
|
||||
|
||||
if(car->options->engine_temperature)
|
||||
|
@ -407,7 +409,7 @@ tdble SimEngineUpdateWater(tCar *car)
|
|||
else
|
||||
temp2 = Tair;
|
||||
|
||||
tdble temp = 35.0 / K2C(temp2);
|
||||
tdble temp = 32.0 / K2C(temp2);
|
||||
|
||||
if (water < engine->max_temp_water - 20.0f)
|
||||
water = engine->temp_water + (1.0f / (engine->rads * Tair * SimDeltaTime));
|
||||
|
@ -426,8 +428,6 @@ tdble SimEngineUpdateWater(tCar *car)
|
|||
car->airSpeed2, SimAirPressure, air,gain);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(car->options->engine_damage)
|
||||
damage = tdble(car->dammage) / 10000.0;
|
||||
else
|
||||
|
@ -451,7 +451,7 @@ tdble SimEngineUpdateWater(tCar *car)
|
|||
|
||||
engine->temp_water = water;
|
||||
|
||||
if(engine->temp_water > engine->max_temp_water + 10.0f)
|
||||
if(engine->temp_water > engine->max_temp_water + 6.0f)
|
||||
car->carElt->_state |= RM_CAR_STATE_BROKEN;
|
||||
|
||||
return 0.0;
|
||||
|
|
Loading…
Reference in New Issue