return 1;
}
-VG_STATIC int gate_intersect( teleport_gate *gate, v3f pos, v3f last )
+VG_STATIC int gate_intersect_plane( teleport_gate *gate, v3f pos, v3f last,
+ v2f where )
{
v4f surface;
m3x3_mulv( gate->to_world, (v3f){0.0f,0.0f,-1.0f}, surface );
m3x3_mulv( gate->to_world, (v3f){0.0f,1.0f,0.0f}, vup );
m3x3_mulv( gate->to_world, (v3f){1.0f,0.0f,0.0f}, vside );
- v2f xy = { v3_dot( rel, vside ), v3_dot( rel, vup ) };
+ where[0] = v3_dot( rel, vside );
+ where[1] = v3_dot( rel, vup );
+
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+VG_STATIC int gate_intersect( teleport_gate *gate, v3f pos, v3f last )
+{
+ v2f xy;
- if( fabsf(xy[0]) <= gate->dims[0] && fabsf(xy[1]) <= gate->dims[1] )
- {
- return 1;
- }
+ if( gate_intersect_plane( gate, pos, last, xy ) )
+ {
+ if( fabsf(xy[0]) <= gate->dims[0] && fabsf(xy[1]) <= gate->dims[1] )
+ {
+ return 1;
}
}