function Switch_Views()
{
if(camera_ViewMode == 1) // 1st Person
{
vec_for_vertex(eyespot,my,69);
camera.genius = my;
camera.arc = 80;
vec_set(camera.x,vector(my.x,my.y,my.z+30));
my.pan = camera.pan;
camera.roll = my.roll;
if(key_o){
camera.tilt += 50 * mouse_force.y * time_step;
camera.pan -= 50 * mouse_force.x * time_step;
}
else
camera.pan -= 10 * mouse_force.x * time_step;
camera.tilt += 10 * mouse_force.y * time_step;
camera.tilt = clamp(camera.tilt,-90,90);
if(key_e)
{camera.roll = 30;
camera.y = 20;
}
if(key_q)
{camera.roll = -30;
camera.y = -20;
}
}
else // 3rd Person
{
my.pan = camera.pan;
camera.pan -= mouse_force.x * 12 * time_step;
camera.tilt += mouse_force.y * 8 * time_step;
camera.tilt = clamp(camera.tilt,-30,10);
temp = fcos(camera.tilt,-camera_distance);
vec_set(camera.x,vector(my.x + fcos(camera.pan,temp),my.y +
fsin(camera.pan,temp),my.z + 20 + fsin(camera.tilt,-camera_distance)));
vec_diff(temp.x,camera.x,my.x);
vec_normalize(temp.x,16);
vec_normalize(temp.z,50);
vec_set(camera.x,target.x);
vec_add(camera.x,temp.x);
result = c_trace(my.x,temp.x,vector(temp.x,temp.y,temp.z-10),IGNORE_PASSABLE|IGNORE_MODELS);
if (result > 0) {
vec_diff(temp.x,my.x,target.x);
vec_normalize(temp.x,16);
vec_set(camera.x,target.x);
vec_add(camera.x,temp.x);
}
}
}