set(zoom_delay, 2.0);
set(movement_tolerance, 0.01);
set(zoom_speed, 1.0);
set(max_zoom, 10);
set(maxwidth, get(global.image.hres));
if(tolower(global.image.type) == 'cube',
calc(maxwidth, maxwidth * Math.PI);
,tolower(global.image.type) == 'flat',
calc(maxwidth, maxwidth * 360 / 90);
,
calc(maxwidth, maxwidth * 360 / global.image.hfov);
);
calc(max_zoom, maxwidth / 4000);
clearinterval(webvr_autozoom);
copy(last_tick, global.timertick);
copy(last_movement_tick, last_tick);
copy(last_view_hlookat, global.view.hlookat);
copy(last_view_vlookat, global.view.vlookat);
setinterval(webvr_autozoom, 0.1,
copy(cur_tick, global.timertick);
if(global.webvr.isenabled,
getlooktodistance(move_distance, last_view_hlookat, last_view_vlookat);
calc(movespeed, move_distance / (cur_tick-last_tick));
calc(movement_tolerance, 0.01 / (global.webvr.zoom^0.5));
if(movespeed GT movement_tolerance,
copy(last_movement_tick, cur_tick);
tween(zoom_speed, 1.0, 0);
Math.pow(movespeed, 0.5);
);
if((cur_tick - last_movement_tick) GT (zoom_delay*1000),
tween(zoom_speed, 1.04);
);
calc(new_zoom, global.webvr.zoom * (zoom_speed * (1.0 - movespeed)) );
clamp(new_zoom, 1, get(max_zoom));
tween(global.webvr.zoom, get(new_zoom), 0.1, linear);
calc(global.webvr.friction, new_zoom GT 2.0 ? (new_zoom - 2.0) / 100.0 : 0);
,
copy(last_movement_tick, cur_tick);
);
copy(last_tick, cur_tick);
copy(last_view_hlookat, global.view.hlookat);
copy(last_view_vlookat, global.view.vlookat);
);