[Racer-svn] SF.net SVN: racer:[219] trunk/racer/Engine/GameObjects/Car.cpp
Status: Alpha
Brought to you by:
jlegg
From: <jl...@us...> - 2010-01-28 02:50:17
|
Revision: 219 http://racer.svn.sourceforge.net/racer/?rev=219&view=rev Author: jlegg Date: 2010-01-28 02:50:11 +0000 (Thu, 28 Jan 2010) Log Message: ----------- Make cars faster. Scale up all driving forces by 1.5. Use additional acceleration at low speeds (both forward/reverse and when sliding). Modified Paths: -------------- trunk/racer/Engine/GameObjects/Car.cpp Modified: trunk/racer/Engine/GameObjects/Car.cpp =================================================================== --- trunk/racer/Engine/GameObjects/Car.cpp 2010-01-26 04:33:14 UTC (rev 218) +++ trunk/racer/Engine/GameObjects/Car.cpp 2010-01-28 02:50:11 UTC (rev 219) @@ -20,6 +20,9 @@ #include <limits> #include <libtrack/TrackBooster.h> +const btScalar _force_scale = 1.5; + + /* Correction for stupid bouncing my cars up in the air when they drive over the * internal edges of flat triangulated sections of the road. */ @@ -401,13 +404,13 @@ // turning left and right. btVector3 torque_vector = btVector3(0.0, 0.0, - torque.getZ() * 0.02); + torque.getZ() * 0.02 * _force_scale); local_torque = rotation_transform(torque_vector); } } else { // allow reduced stearing in mid air. btVector3 torque_vector = btVector3(0.0, 0.0, - torque.getZ() * 0.01); + torque.getZ() * 0.01 * _force_scale); local_torque = rotation_transform(torque_vector); // note that you carry on in roughly the same direction. // The sliding physics make it slightly more useful. @@ -444,7 +447,7 @@ } else { unforce.setY(unforce.y() + sideways_velocity * 15.0); } - /** additional break force when moving forwards or backwards while the + /* additional break force when moving forwards or backwards while the * accelerate / reverse control is pushing the other way. */ if ((forward_velocity < 0.0 && force.y() > 0) || @@ -459,6 +462,22 @@ } } + // additional force to use for accelerating varies with forward speed. + // With a low speed the force is higher, providing greater acceleration. + btScalar accel_multiplier = 5400000.0 / (forward_velocity * forward_velocity + 1800000.0); + btScalar forward_accel_force = force.getY() * accel_multiplier; + unforce.setY(unforce.getY() + forward_accel_force); + + // something similar for sliding sideways. Sharper, but half as strong. + btScalar slide_accel_multiplier = 150000.0 / (sideways_velocity * sideways_velocity + 100000.0); + // always use maximum if sliding the wrong way + if (sideways_velocity * force.getX() < 0) + { + slide_accel_multiplier = 1.5; + } + btScalar slide_accel_force = force.getX() * slide_accel_multiplier; + unforce.setX(unforce.getX() + slide_accel_force); + // release stored energy while accelerating. used_energy_boost = 0.0; if (force.y() > 0) @@ -482,9 +501,9 @@ if (floor_stick) { - local_force = rotation_transform((force+unforce) * 0.012); + local_force = rotation_transform((force+unforce) * 0.012 * _force_scale); } else { - local_force = rotation_transform((force * btVector3(2.0, 1.0, 1.0) + unforce) * 0.006); + local_force = rotation_transform((force * btVector3(2.0, 1.0, 1.0) + unforce) * 0.006 * _force_scale); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |