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); );