forked from speed-dreams/speed-dreams-code
Re #735: add an optional new gear changing mechanism
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@5384 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: 2be7d13e64dce4f422d7b696f8cb0461b14af8e4 Former-commit-id: 28907b01aa335f77a5a37cf980dad49f5b632ece
This commit is contained in:
parent
4d9deafdb5
commit
fc7fd2b15e
2 changed files with 37 additions and 6 deletions
|
@ -38,7 +38,7 @@ SimTransmissionConfig(tCar *car)
|
|||
|
||||
//clutchI = GfParmGetNum(hdle, SECT_CLUTCH, PRM_INERTIA, (char*)NULL, 0.12f);
|
||||
transType = GfParmGetStr(hdle, SECT_DRIVETRAIN, PRM_TYPE, VAL_TRANS_RWD);
|
||||
clutch->releaseTime = GfParmGetNum(hdle, SECT_GEARBOX, PRM_SHIFTTIME, (char*)NULL, 0.2f);
|
||||
trans->gearbox.shiftTime = clutch->releaseTime = GfParmGetNum(hdle, SECT_GEARBOX, PRM_SHIFTTIME, (char*)NULL, 0.2f);
|
||||
|
||||
fRatio = 0;
|
||||
gEff = 0;
|
||||
|
@ -119,6 +119,8 @@ SimTransmissionConfig(tCar *car)
|
|||
clutch->timeToRelease = 0;
|
||||
|
||||
trans->gearbox.gear = 0; /* neutral */
|
||||
trans->gearbox.gearNext = 0;
|
||||
trans->gearbox.timeToEngage = 0.0f;
|
||||
trans->curI = trans->freeI[1];
|
||||
switch(trans->type) {
|
||||
case TRANS_RWD:
|
||||
|
@ -178,6 +180,31 @@ SimGearboxUpdate(tCar *car)
|
|||
}
|
||||
|
||||
trans->curI = trans->driveI[gearbox->gear + 1] * clutch->transferValue + trans->freeI[gearbox->gear + 1] * (1.0f - clutch->transferValue);
|
||||
|
||||
if (car->features & FEAT_REALGEARCHANGE) {/* simuv4 new gear change code */
|
||||
if ( (car->ctrl->gear != gearbox->gear) && (car->ctrl->gear <= gearbox->gearMax) && (car->ctrl->gear >= gearbox->gearMin) ) {
|
||||
/* initiate a shift, go to neutral */
|
||||
gearbox->gearNext = car->ctrl->gear;
|
||||
if (gearbox->timeToEngage <= 0.0f) {
|
||||
if (gearbox->gearNext == 0) {gearbox->timeToEngage = 0.0f;} /* disengaging gears happens immediately */
|
||||
else {gearbox->timeToEngage = gearbox->shiftTime * 0.67f;}
|
||||
gearbox->gear = 0;
|
||||
trans->curOverallRatio = trans->overallRatio[1];
|
||||
trans->curI = trans->driveI[1] * clutch->transferValue + trans->freeI[1] * (1.0f - clutch->transferValue);
|
||||
}
|
||||
}
|
||||
|
||||
if (gearbox->timeToEngage > 0.0f) {
|
||||
gearbox->timeToEngage -= SimDeltaTime;
|
||||
if (gearbox->timeToEngage <= 0.0f) {
|
||||
/* engage new gear */
|
||||
gearbox->gear = gearbox->gearNext;
|
||||
gearbox->gearNext = 0;
|
||||
trans->curOverallRatio = trans->overallRatio[gearbox->gear+1];
|
||||
trans->curI = trans->driveI[gearbox->gear + 1] * clutch->transferValue + trans->freeI[gearbox->gear + 1] * (1.0f - clutch->transferValue);
|
||||
}
|
||||
}
|
||||
} else {/* old gear change code */
|
||||
if (clutch->state == CLUTCH_RELEASING && gearbox->gear != car->ctrl->gear) {
|
||||
/* Fast change during clutch release, re-releasing it */
|
||||
clutch->state = CLUTCH_RELEASED;
|
||||
|
@ -225,6 +252,7 @@ SimGearboxUpdate(tCar *car)
|
|||
trans->curI = trans->freeI[gearbox->gear+1];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
differential->in.I = trans->curI + differential->feedBack.I;
|
||||
|
|
|
@ -31,6 +31,9 @@ typedef struct
|
|||
int gear;
|
||||
int gearMin;
|
||||
int gearMax;
|
||||
int gearNext;
|
||||
tdble shiftTime; /* time of shifting in sec */
|
||||
tdble timeToEngage; /* time to engage gearNext, in sec */
|
||||
} tGearbox;
|
||||
|
||||
typedef struct
|
||||
|
|
Loading…
Reference in a new issue