diff --git a/src/modules/simu/simuv4/aero.cpp b/src/modules/simu/simuv4/aero.cpp index c9f5b5805..6513e234a 100644 --- a/src/modules/simu/simuv4/aero.cpp +++ b/src/modules/simu/simuv4/aero.cpp @@ -237,9 +237,13 @@ SimWingConfig(tCar *car, int index) void *hdle = car->params; tWing *wing = &(car->wing[index]); tdble area; + tCarSetupItem *setupAngle = &(car->carElt->setup.wingAngle[index]); area = GfParmGetNum(hdle, WingSect[index], PRM_WINGAREA, (char*)NULL, 0); - wing->angle = GfParmGetNum(hdle, WingSect[index], PRM_WINGANGLE, (char*)NULL, 0); + setupAngle->desired_value = setupAngle->min = setupAngle->max = 0.0; + GfParmGetNumWithLimits(hdle, WingSect[index], PRM_WINGANGLE, (char*)NULL, &(setupAngle->desired_value), &(setupAngle->min), &(setupAngle->max)); + setupAngle->changed = TRUE; + setupAngle->stepsize = DEG2RAD(0.1); wing->staticPos.x = GfParmGetNum(hdle, WingSect[index], PRM_XPOS, (char*)NULL, 0); wing->staticPos.z = GfParmGetNum(hdle, WingSect[index], PRM_ZPOS, (char*)NULL, 0); wing->staticPos.y = 0.0; @@ -328,28 +332,10 @@ SimWingConfig(tCar *car, int index) if (wing->WingType == 0) { wing->Kz = 4.0f * wing->Kx; - if (index == 1) - { - car->aero.Cd = car->aero.CdBody - wing->Kx*sin(wing->angle); - //fprintf(stderr,"Kz: %g Kx: %g\n",wing->Kz,wing->Kx); - //fprintf(stderr,"car->aero.Cd: %g angle: %g\n",car->aero.Cd,wing->angle*180/PI); - } } else if (wing->WingType == 1) { - wing->Kz = CliftFromAoA(wing) * wing->Kx; - //fprintf(stderr,"Kz: %g Kx: %g\n",wing->Kz,wing->Kx); - - if (index == 0) - { - car->aero.Cd = (tdble)(car->aero.CdBody - wing->Kx*sin(wing->angle - wing->AoAatZRad)); - //fprintf(stderr,"car->aero.Cd: %g wing->Kx: %g angle: %g wing->AoAatZero: %g\n",car->aero.Cd,wing->Kx,wing->angle*180/PI,wing->AoAatZero); - } - else - { - car->aero.Cd -= (tdble)(wing->Kx*sin(wing->angle - wing->AoAatZRad)); - //fprintf(stderr,"car->aero.Cd: %g wing->Kx: %g wing->angle: %g wing->AoAatZero: %g\n",car->aero.Cd,wing->Kx,wing->angle*180/PI,wing->AoAatZero); - } + wing->Kz = CliftFromAoA(wing) * wing->Kx; } else if (wing->WingType == 2) { @@ -363,8 +349,30 @@ SimWingConfig(tCar *car, int index) wing->Kx3 = 1.0f; wing->Kx4 = 0.9f; } + SimWingReConfig(car, index); } +void +SimWingReConfig(tCar *car, int index) +{ + tWing *wing = &(car->wing[index]); + tCarSetupItem *angle = &(car->carElt->setup.wingAngle[index]); + + if (angle->changed) { + wing->angle = MIN(angle->max,MAX(angle->min,angle->desired_value)); + angle->value = wing->angle; + + if (wing->WingType == 0) { + if (index==1) { + car->aero.Cd = car->aero.CdBody - wing->Kx*sin(wing->angle); + } + } else if (wing->WingType == 1) { + tWing *otherwing = &(car->wing[1-index]); + car->aero.Cd = (tdble)(car->aero.CdBody - wing->Kx*sin(wing->angle - wing->AoAatZRad) - otherwing->Kx*sin(otherwing->angle - otherwing->AoAatZRad)); + } + angle->changed = FALSE; + } +} void SimWingUpdate(tCar *car, int index, tSituation* s) diff --git a/src/modules/simu/simuv4/brake.cpp b/src/modules/simu/simuv4/brake.cpp index bf74f66d7..d9ed0c384 100644 --- a/src/modules/simu/simuv4/brake.cpp +++ b/src/modules/simu/simuv4/brake.cpp @@ -88,11 +88,41 @@ void SimBrakeSystemConfig(tCar *car) { void *hdle = car->params; + tCarSetupItem *setupBrkRep = &(car->carElt->setup.brakeRepartition); + tCarSetupItem *setupBrkPress = &(car->carElt->setup.brakePressure); + + setupBrkRep->desired_value = setupBrkRep->min = setupBrkRep->max = 0.5; + GfParmGetNumWithLimits(hdle, SECT_BRKSYST, PRM_BRKREP, (char*)NULL, &(setupBrkRep->desired_value), &(setupBrkRep->min), &(setupBrkRep->max)); + setupBrkRep->changed = TRUE; + setupBrkRep->stepsize = 0.5; + + setupBrkPress->desired_value = setupBrkPress->min = setupBrkPress->max = 1000000; + GfParmGetNumWithLimits(hdle, SECT_BRKSYST, PRM_BRKPRESS, (char*)NULL, &(setupBrkPress->desired_value), &(setupBrkPress->min), &(setupBrkPress->max)); + setupBrkPress->changed = TRUE; + setupBrkPress->stepsize = 1000; - car->brkSyst.rep = GfParmGetNum(hdle, SECT_BRKSYST, PRM_BRKREP, (char*)NULL, 0.5); - car->brkSyst.coeff = GfParmGetNum(hdle, SECT_BRKSYST, PRM_BRKPRESS, (char*)NULL, 1000000); car->brkSyst.ebrake_pressure = GfParmGetNum(hdle, SECT_BRKSYST, PRM_EBRKPRESS, (char*)NULL, 0.0); + SimBrakeSystemReConfig(car); +} + +void +SimBrakeSystemReConfig(tCar *car) +{ + tCarSetupItem *setupBrkRep = &(car->carElt->setup.brakeRepartition); + tCarSetupItem *setupBrkPress = &(car->carElt->setup.brakePressure); + + if (setupBrkRep->changed) { + car->brkSyst.rep = MIN(setupBrkRep->max, MAX(setupBrkRep->min, setupBrkRep->desired_value)); + setupBrkRep->value = car->brkSyst.rep; + setupBrkRep->changed = FALSE; + } + + if (setupBrkPress->changed) { + car->brkSyst.coeff = MIN(setupBrkPress->max, MAX(setupBrkPress->min, setupBrkPress->desired_value)); + setupBrkPress->value = car->brkSyst.coeff; + setupBrkPress->changed = FALSE; + } } void diff --git a/src/modules/simu/simuv4/sim.h b/src/modules/simu/simuv4/sim.h index fbd6fd798..7c5d2e79c 100644 --- a/src/modules/simu/simuv4/sim.h +++ b/src/modules/simu/simuv4/sim.h @@ -70,11 +70,13 @@ extern void SimSteerUpdate(tCar *car); extern void SimBrakeConfig(void *hdle, const char *section, tBrake *brake); extern void SimBrakeUpdate(tCar *car, tWheel *wheel, tBrake *brake); extern void SimBrakeSystemConfig(tCar *car); +extern void SimBrakeSystemReConfig(tCar *car); extern void SimBrakeSystemUpdate(tCar *car); extern void SimAeroConfig(tCar *car); extern void SimAeroUpdate(tCar *car, tSituation *s); extern void SimWingConfig(tCar *car, int index); +extern void SimWingReConfig(tCar *car, int index); extern void SimWingUpdate(tCar *car, int index, tSituation *s); extern void SimCarUpdateWheelPos(tCar *car);