This question doesn't really seem to be related to Newton directly.
Perhaps, questions of this nature should be posted in the 'scripting' forum category instead.
red: removed elementblue: pay attention toEntity pointers might be reset to null on level_load, but while(1) functions may 'persist' or continue.
Code:
starter move_camera() {
//proc_kill(4); //only one instance of this function should be running
camera.arc=72;
camera.clip_near=20;
camera.clip_far=24000;
var cam_ang[3];
var cam_dist=500;
cam_ang.pan=180;
cam_ang.tilt=18;
cam_ang.roll=0;
//while(!p_vehicle){wait(1);} // removed; probably unnecessary
while(1) {
if (p_vehicle != null) {
if(key_b) {
cam_ang.pan = p_vehicle.pan - 0;
} else {
cam_ang.pan = p_vehicle.pan - 180;
}
//{ //dangling bracket removed
if(mouse_right) {
//cam_angA.pan+=10*mouse_force.x;
cam_ang.tilt=clamp(cam_ang.tilt+(10*mouse_force.y),5,80);
}
cam_dist=clamp(cam_dist-mickey.z,200,2000);
camera.x=p_vehicle.x+cos(cam_ang.pan)*(cam_dist*cos(cam_ang.tilt));
camera.y=p_vehicle.y+sin(cam_ang.pan)*(cam_dist*cos(cam_ang.tilt));
camera.z=p_vehicle.z+sin(cam_ang.tilt)*cam_dist;
vec_set(temp,p_vehicle.x);
vec_sub(temp,camera.x);
vec_to_angle(camera.pan,temp);
}
wait(1);
}
}
function reset_level() {
//dll_handle = newtonHandle;
//NewtonRemoveMap(); //or maybe instead
//NewtonRemoveAllBodies();
loadingscreen.pos_x = (screen_size.x - bmap_width(loading_lv))/2; //centers loading screen
loadingscreen.pos_y = (screen_size.y - bmap_height(loading_lv))/2;
loadingscreen.visible = on; //displays loading screen
wait(3);
sleep(2); //TD: why are we sleeping?
loadingscreen.visible = off; //clears screen
bmap_purge(loading_lv);
LOAD_LEVEL (s_level); //level name
dll_handle=newtonHandle;
NewtonAddMap(s_level,0);
}
//on_t = reset_level(); //the game is going to be restarted
on_t = reset_level; //TD: only use parenthesis when actually calling function
edited: Moved wait(1) into while(1) block.