#include <acknex.h>
#define PRAGMA_POINTER
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 main ()
{
wait(1);
level_load ( "" );
VECTOR vPoint;
vec_set ( &vPoint, vector(300,240,100) );
VECTOR vMax, vMin;
vec_set ( &vMax, vector(400,200,200) );
vec_set ( &vMin, vector(0,0,0) );
VECTOR vCenter, vBounds;
vec_lerp ( &vCenter, &vMax, &vMin, 0.5 );
vec_diff ( &vBounds, &vMax, &vCenter );
while ( !key_esc )
{
camera->pan = ang ( camera->pan + mickey.x * 0.3 );
camera->tilt = clamp ( camera->tilt + mickey.y * 0.3, -85, 85 );
vec_for_angle ( &camera->x, &camera->pan );
vec_scale ( &camera->x, -1000 );
VECTOR vMove;
vec_set ( &vMove, vector(key_force.y,-key_force.x,0) );
vec_normalize ( &vMove, 10*time_step );
vec2d_rotate ( &vMove, camera->pan );
vec_add ( &vPoint, &vMove );
vec_add ( &camera->x, &vPoint );
var nRotation = total_ticks * 2;
VECTOR vOffset;
vec_diff ( &vOffset, &vPoint, &vCenter );
vec2d_rotate ( &vOffset, -nRotation );
COLOR colCube;
if ( ( abs(vOffset.x) < abs(vBounds.x) ) && ( abs(vOffset.y) < abs(vBounds.y) ) && ( abs(vOffset.z) < abs(vBounds.z) ) )
vec_set ( &colCube, COLOR_GREEN );
else
vec_set ( &colCube, COLOR_RED );
VECTOR vP1, vP2;
vec_set ( &vP1, &vBounds );
vec_set ( &vP2, vector(vBounds.x,-vBounds.y,-vBounds.z) );
vec2d_rotate ( &vP1, nRotation );
vec2d_rotate ( &vP2, nRotation );
draw_point3d ( &vPoint, COLOR_WHITE, 100, 16 );
draw_line3d ( vector ( vCenter.x+vP1.x, vCenter.y+vP1.y, vCenter.z+vP1.z), NULL, 100 );
draw_line3d ( vector ( vCenter.x+vP2.x, vCenter.y+vP2.y, vCenter.z+vP1.z), &colCube, 100 );
draw_line3d ( vector ( vCenter.x-vP1.x, vCenter.y-vP1.y, vCenter.z+vP1.z), &colCube, 100 );
draw_line3d ( vector ( vCenter.x-vP2.x, vCenter.y-vP2.y, vCenter.z+vP1.z), &colCube, 100 );
draw_line3d ( vector ( vCenter.x+vP1.x, vCenter.y+vP1.y, vCenter.z+vP1.z), &colCube, 100 );
draw_line3d ( vector ( vCenter.x+vP1.x, vCenter.y+vP1.y, vCenter.z+vP2.z), &colCube, 100 );
draw_line3d ( vector ( vCenter.x-vP1.x, vCenter.y-vP1.y, vCenter.z+vP2.z), NULL, 100 );
draw_line3d ( vector ( vCenter.x-vP2.x, vCenter.y-vP2.y, vCenter.z+vP2.z), &colCube, 100 );
draw_line3d ( vector ( vCenter.x+vP1.x, vCenter.y+vP1.y, vCenter.z+vP2.z), &colCube, 100 );
draw_line3d ( vector ( vCenter.x+vP2.x, vCenter.y+vP2.y, vCenter.z+vP2.z), &colCube, 100 );
draw_line3d ( vector ( vCenter.x-vP1.x, vCenter.y-vP1.y, vCenter.z+vP2.z), &colCube, 100 );
draw_line3d ( vector ( vCenter.x-vP1.x, vCenter.y-vP1.y, vCenter.z+vP1.z), &colCube, 100 );
draw_line3d ( vector ( vCenter.x+vP2.x, vCenter.y+vP2.y, vCenter.z+vP2.z), NULL, 100 );
draw_line3d ( vector ( vCenter.x+vP2.x, vCenter.y+vP2.y, vCenter.z+vP1.z), &colCube, 100 );
draw_line3d ( vector ( vCenter.x-vP2.x, vCenter.y-vP2.y, vCenter.z+vP2.z), NULL, 100 );
draw_line3d ( vector ( vCenter.x-vP2.x, vCenter.y-vP2.y, vCenter.z+vP1.z), &colCube, 100 );
wait(1);
}
sys_exit ( NULL );
}