#include <acknex.h>
void vec2d_rotate ( VECTOR *_v, var angle )
{
var x = fcos(angle,_v->x) - fsin(angle,_v->y);
_v->y = fsin(angle,_v->x) + fcos(angle,_v->y);
_v->x = x;
}
void mouseOnZ0 ( VECTOR *_v )
{
vec_set ( _v, &mouse_dir3d );
vec_scale ( _v, -camera->z/_v->z );
vec_add ( _v, &camera->x );
}
void onMouseLeft ()
{
VECTOR vStart, vEnd;
mouseOnZ0 ( &vStart );
while ( mouse_left )
{
mouseOnZ0 ( &vEnd );
VECTOR vCenter, vBounds;
vec_lerp ( &vCenter, &vStart, &vEnd, 0.5 );
vec_diff ( &vBounds, &vStart, &vCenter );
vec2d_rotate ( &vBounds, -camera->pan );
VECTOR vP1, vP2;
vec_set ( &vP1, &vBounds );
vec_set ( &vP2, vector(vBounds.x,-vBounds.y,-vBounds.z) );
vec2d_rotate ( &vP1, camera->pan );
vec2d_rotate ( &vP2, camera->pan );
draw_line3d ( vector ( vCenter.x+vP1.x, vCenter.y+vP1.y, 0), COLOR_RED, 0 );
draw_line3d ( vector ( vCenter.x+vP1.x, vCenter.y+vP1.y, 0), COLOR_RED, 100 );
draw_line3d ( vector ( vCenter.x+vP2.x, vCenter.y+vP2.y, 0), COLOR_RED, 100 );
draw_line3d ( vector ( vCenter.x-vP1.x, vCenter.y-vP1.y, 0), COLOR_RED, 100 );
draw_line3d ( vector ( vCenter.x-vP2.x, vCenter.y-vP2.y, 0), COLOR_RED, 100 );
draw_line3d ( vector ( vCenter.x+vP1.x, vCenter.y+vP1.y, 0), COLOR_RED, 100 );
draw_line3d ( vector ( vCenter.x+vP1.x, vCenter.y+vP1.y, 0), COLOR_RED, 0 );
wait(1);
}
}
void main ()
{
video_mode = 10;
mouse_mode = 4;
wait(1);
level_load ( "" );
camera->tilt = -30;
camera->pan = 30;
on_mouse_left = onMouseLeft;
while ( !key_esc )
{
camera->pan += key_force.x * 10 * time_step;
vec_for_angle ( &camera->x, &camera->pan );
vec_scale ( &camera->x, -1000 );
// World space axis
draw_line3d ( vector(1000,0,0), COLOR_WHITE, 0 );
draw_line3d ( vector(1000,0,0), COLOR_WHITE, 100 );
draw_line3d ( vector(-1000,0,0), COLOR_WHITE, 100 );
draw_line3d ( vector(-1000,0,0), COLOR_WHITE, 0 );
draw_line3d ( vector(0,1000,0), COLOR_WHITE, 0 );
draw_line3d ( vector(0,1000,0), COLOR_WHITE, 100 );
draw_line3d ( vector(0,-1000,0), COLOR_WHITE, 100 );
draw_line3d ( vector(0,-1000,0), COLOR_WHITE, 0 );
wait(1);
}
sys_exit ( NULL );
}