From e62dce70113e41e8f004b6c94528d149e097d7e6 Mon Sep 17 00:00:00 2001 From: kakukri Date: Tue, 22 Dec 2015 00:18:02 +0000 Subject: [PATCH] Fix the car elevating logic in SimCarCollideZ git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@6312 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: 6fbe931ea88e324ea50701be6f14b6a758751cbe Former-commit-id: 3c56977a3bf8c946306f5b8f60901505cd3fb79a --- src/modules/simu/simuv4/collide.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/modules/simu/simuv4/collide.cpp b/src/modules/simu/simuv4/collide.cpp index 5ef6f77af..8ed4294e2 100644 --- a/src/modules/simu/simuv4/collide.cpp +++ b/src/modules/simu/simuv4/collide.cpp @@ -29,6 +29,7 @@ void SimCarCollideZ(tCar *car) tdble dotProd; tWheel *wheel; const float CRASH_THRESHOLD = -5.0f; + tdble dz = 0.0f; if (car->carElt->_state & RM_CAR_STATE_NO_SIMU) { return; @@ -36,8 +37,9 @@ void SimCarCollideZ(tCar *car) for (i = 0; i < 4; i++) { wheel = &(car->wheel[i]); - if (wheel->state & SIM_SUSP_COMP) { - car->DynGCg.pos.z += wheel->susp.spring.packers - wheel->rideHeight; + if ( (wheel->state & SIM_SUSP_COMP)&&(!(wheel->state & SIM_WH_INAIR)) ) { + dz = MAX(dz, wheel->susp.spring.packers - wheel->rideHeight); + wheel->rideHeight = wheel->susp.spring.packers; RtTrackSurfaceNormalL(&(wheel->trkPos), &normal); dotProd = (car->DynGCg.vel.x * normal.x + car->DynGCg.vel.y * normal.y + car->DynGCg.vel.z * normal.z) * wheel->trkPos.seg->surface->kRebound; if (dotProd < 0.0f) { @@ -59,6 +61,7 @@ void SimCarCollideZ(tCar *car) } } } + car->DynGCg.pos.z += dz; //elevate car when it is slightly sinken into ground } const tdble BorderFriction = 0.0f;