function main_canvas_up(e) { if (e.button != 0) return; if (e.preventDefault) e.preventDefault(); var x = m_mouse.get_coords_x(e); var y = m_mouse.get_coords_y(e); var obj = m_scenes.pick_object(x, y); if (obj) switch(m_scenes.get_object_name(obj)) { case "Cube": var target = m_scenes.get_object_by_name("Target_cube"); var eye = m_scenes.get_object_by_name("Eye_cube"); break; case "Cone": var target = m_scenes.get_object_by_name("Target_cone"); var eye = m_scenes.get_object_by_name("Eye_cone"); break; default: return; } if (eye && target) { var camobj = m_scenes.get_active_camera(); var pos_view = m_transform.get_translation(eye); var pos_target = m_transform.get_translation(target); start_camera_animation(camobj, pos_view, pos_target); } }
function move_rocket(e) { if (!_current_rocket) return; var x = m_mouse.get_coords_x(e); var y = m_mouse.get_coords_y(e); set_rocket_translation(x, y); set_rocket_rotation(x, y); }
function main_canvas_move(e) { if (_drag_mode) if (_selected_obj) { // disable camera controls while moving the object if (_enable_camera_controls) { m_app.disable_camera_controls(); _enable_camera_controls = false; } // calculate viewport coordinates var cam = m_scenes.get_active_camera(); var x = m_mouse.get_coords_x(e); var y = m_mouse.get_coords_y(e); if (x >= 0 && y >= 0) { x -= _obj_delta_xy[0]; y -= _obj_delta_xy[1]; // emit ray from the camera var pline = m_cam.calc_ray(cam, x, y, _pline_tmp); var camera_ray = m_math.get_pline_directional_vec(pline, _vec3_tmp); // calculate ray/floor_plane intersection point var cam_trans = m_trans.get_translation(cam, _vec3_tmp2); m_math.set_pline_initial_point(_pline_tmp, cam_trans); m_math.set_pline_directional_vec(_pline_tmp, camera_ray); var point = m_math.line_plane_intersect(FLOOR_PLANE_NORMAL, 0, _pline_tmp, _vec3_tmp3); // do not process the parallel case and intersections behind the camera if (point && camera_ray[2] < 0) { var obj_parent = m_obj.get_parent(_selected_obj); if (obj_parent && m_obj.is_armature(obj_parent)) // translate the parent (armature) of the animated object m_trans.set_translation_v(obj_parent, point); else m_trans.set_translation_v(_selected_obj, point); limit_object_position(_selected_obj); } } } }
function get_clicked_object(e) { if (e.preventDefault) e.preventDefault(); var x = m_mouse.get_coords_x(e); var y = m_mouse.get_coords_y(e); var obj = m_scs.pick_object(x, y); if (obj) switch (m_scs.get_object_name(obj)) { case "rockets_box": create_new_rocket(x, y); break; case "control_box_button": _camera_state = 2; action_rails(); break; } }
function main_canvas_down(e) { _drag_mode = true; if (e.preventDefault) e.preventDefault(); var x = m_mouse.get_coords_x(e); var y = m_mouse.get_coords_y(e); var obj = m_scenes.pick_object(x, y); // handling outline effect if (_selected_obj != obj) { if (_selected_obj) m_scenes.clear_outline_anim(_selected_obj); if (obj) m_scenes.apply_outline_anim(obj, 1, 1, 0); _selected_obj = obj; } // calculate delta in viewport coordinates if (_selected_obj) { var cam = m_scenes.get_active_camera(); var obj_parent = m_obj.get_parent(_selected_obj); if (obj_parent && m_obj.is_armature(obj_parent)) // get translation from the parent (armature) of the animated object m_trans.get_translation(obj_parent, _vec3_tmp); else m_trans.get_translation(_selected_obj, _vec3_tmp); m_cam.project_point(cam, _vec3_tmp, _obj_delta_xy); _obj_delta_xy[0] = x - _obj_delta_xy[0]; _obj_delta_xy[1] = y - _obj_delta_xy[1]; } }