X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=traffic.h;h=004c62485f470f98580095b2ba5a1cebdbadd679;hb=e311bbe2fa903a7e2a922f202f389b799193195d;hp=8850306b450d9aa534c3e1c024c058343190c3b3;hpb=6d66c67945f84476d6ac75a0497007cc30bcf58c;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/traffic.h b/traffic.h index 8850306..004c624 100644 --- a/traffic.h +++ b/traffic.h @@ -4,6 +4,7 @@ #include "common.h" #include "model.h" #include "rigidbody.h" +#include "world.h" typedef struct traffic_node traffic_node; typedef struct traffic_driver traffic_driver; @@ -28,17 +29,6 @@ struct 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; @@ -148,9 +138,9 @@ static void traffic_drive( traffic_driver *driver ) 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); @@ -189,13 +179,13 @@ static void traffic_drive( traffic_driver *driver ) * 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