#include "common.h"
#include "model.h"
#include "rigidbody.h"
+#include "world.h"
typedef struct traffic_node traffic_node;
typedef struct traffic_driver traffic_driver;
float t, speed;
};
-static void eval_bezier_time( v3f p0, v3f p1, v3f h0, v3f h1, float t, v3f p )
-{
- float tt = t*t,
- ttt = tt*t;
-
- v3_muls( p1, ttt, p );
- v3_muladds( p, h1, 3.0f*tt -3.0f*ttt, p );
- v3_muladds( p, h0, 3.0f*ttt -6.0f*tt +3.0f*t, p );
- v3_muladds( p, p0, 3.0f*tt -ttt -3.0f*t +1.0f, p );
-}
-
static float eval_bezier_length( v3f p0, v3f p1, v3f h0, v3f h1, int res )
{
float length = 0.0f, m = 1.0f/(float)res;
v3_muladds( next->co, next->h, -1.0f, h1 );
eval_bezier_time( p0,p1,h0,h1, driver->t, pc );
- eval_bezier_time( p0,p1,h0,h1, driver->t + ktimestep, pn );
+ eval_bezier_time( p0,p1,h0,h1, driver->t + vg.time_delta, pn );
- float mod = ktimestep / v3_dist( pc, pn );
+ float mod = vg.time_delta / v3_dist( pc, pn );
v3f dir,side,up;
v3_sub( pn, pc, dir );
v3_normalize(dir);
* Jesus take the wheel
*/
float steer_penalty = 1.0f-v3_dot( dir, driver->transform[0] );
- steer_penalty /= ktimestep;
+ steer_penalty /= vg.time_delta;
steer_penalty *= 30.0f;
float target_speed = vg_maxf( 16.0f * (1.0f-steer_penalty), 0.1f ),
accel = target_speed - driver->speed;
- driver->speed = stable_force( driver->speed, accel*ktimestep*2.0f );
- driver->t += driver->speed*mod*ktimestep;
+ driver->speed = stable_force( driver->speed, accel*vg.time_delta*2.0f );
+ driver->t += driver->speed*mod*vg.time_delta;
/*
* Update transform