v3_copy( launch_v, p->v );
+ m3x3f basis;
+ m3x3_copy( player->basis, basis );
+
for( int i=1; i<=50; i++ )
{
float t = (float)i * k_trace_delta;
v3_muls( launch_v, t, co1 );
- v3_muladds( co1, player->basis[1], -0.5f * gravity * t*t, co1 );
+ v3_muladds( co1, basis[1], -0.5f * gravity * t*t, co1 );
v3_add( launch_co, co1, co1 );
- float launch_vy = v3_dot( launch_v,player->basis[1] );
+ float launch_vy = v3_dot( launch_v,basis[1] );
if( !grind_located && (launch_vy - gravity*t < 0.0f) )
{
v3f closest;
{
v3f ve;
v3_copy( launch_v, ve );
- v3_muladds( ve, player->basis[1], -gravity * t, ve );
+ v3_muladds( ve, basis[1], -gravity * t, ve );
if( skate_grind_scansq( player, closest, ve, 0.5f, &grind ) )
{
/* check alignment */
- v2f v0 = { v3_dot( ve, player->basis[0] ),
- v3_dot( ve, player->basis[2] ) },
- v1 = { v3_dot( grind.dir, player->basis[0] ),
- v3_dot( grind.dir, player->basis[2] ) };
+ v2f v0 = { v3_dot( ve, basis[0] ),
+ v3_dot( ve, basis[2] ) },
+ v1 = { v3_dot( grind.dir, basis[0] ),
+ v3_dot( grind.dir, basis[2] ) };
v2_normalize( v0 );
v2_normalize( v1 );
}
}
+ if( world->rendering_gate ){
+ ent_gate *gate = world->rendering_gate;
+ if( gate_intersect( gate, co1, co0 ) ){
+ m4x3_mulv( gate->transport, co0, co0 );
+ m4x3_mulv( gate->transport, co1, co1 );
+ m3x3_mulv( gate->transport, launch_v, launch_v);
+ m4x3_mulv( gate->transport, launch_co, launch_co );
+ m3x3_mul( gate->transport, basis, basis );
+ }
+ }
+
float t1;
v3f n;
mesh_free( &world->mesh_route_lines );
mesh_free( &world->mesh_geo );
mesh_free( &world->mesh_no_collide );
-
+
+ /* glDeleteBuffers silently ignores 0's and names that do not correspond to
+ * existing buffer objects.
+ * */
glDeleteBuffers( 1, &world->tbo_light_entities );
glDeleteTextures( 1, &world->tex_light_entities );
glDeleteTextures( 1, &world->tex_light_cubes );
/* FIXME: CANT DO THIS HERE */
/* whynot? */
+ /* oh this should be moved to a global function */
world_global.time = 0.0;
world_global.rewind_from = 0.0;
world_global.rewind_to = 0.0;
vg_linear_clear( world->audio_vgl );
#endif
-
vg_release_thread_sync();
}
memset( &world->meta, 0, sizeof(mdl_context) );
/*
- * TODO: Theres probably a better way to do this?
- */
+ * TODO: Theres probably a better way to do this? */
+ /* yep, find all members that can be memsetted to 0. this is probably
+ * every member anyway, given the below is just setting to 0
+ *
+ * also: rename clean to init? */
world->textures = NULL;
world->texture_count = 0;
world->geo_bh = NULL;
world->volume_bh = NULL;
world->audio_bh = NULL;
+ world->rendering_gate = NULL;
world->water.enabled = 0;