MCPcopy Create free account
hub / github.com/BoomingTech/Piccolo / moveEntity

Method moveEntity

engine/source/editor/source/editor_scene_manager.cpp:301–537  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

299 }
300
301 void EditorSceneManager::moveEntity(float new_mouse_pos_x,
302 float new_mouse_pos_y,
303 float last_mouse_pos_x,
304 float last_mouse_pos_y,
305 Vector2 engine_window_pos,
306 Vector2 engine_window_size,
307 size_t cursor_on_axis,
308 Matrix4x4 model_matrix)
309 {
310 std::shared_ptr<GObject> selected_object = getSelectedGObject().lock();
311 if (selected_object == nullptr)
312 return;
313
314 float angularVelocity =
315 18.0f / Math::max(engine_window_size.x, engine_window_size.y); // 18 degrees while moving full screen
316 Vector2 delta_mouse_move_uv = {(new_mouse_pos_x - last_mouse_pos_x), (new_mouse_pos_y - last_mouse_pos_y)};
317
318 Vector3 model_scale;
319 Quaternion model_rotation;
320 Vector3 model_translation;
321 model_matrix.decomposition(model_translation, model_scale, model_rotation);
322
323 Matrix4x4 axis_model_matrix = Matrix4x4::IDENTITY;
324 axis_model_matrix.setTrans(model_translation);
325
326 Matrix4x4 view_matrix = m_camera->getLookAtMatrix();
327 Matrix4x4 proj_matrix = m_camera->getPersProjMatrix();
328
329 Vector4 model_world_position_4(model_translation, 1.f);
330
331 Vector4 model_origin_clip_position = proj_matrix * view_matrix * model_world_position_4;
332 model_origin_clip_position /= model_origin_clip_position.w;
333 Vector2 model_origin_clip_uv =
334 Vector2((model_origin_clip_position.x + 1) / 2.0f, (model_origin_clip_position.y + 1) / 2.0f);
335
336 Vector4 axis_x_local_position_4(1, 0, 0, 1);
337 if (m_axis_mode == EditorAxisMode::ScaleMode)
338 {
339 axis_x_local_position_4 = Matrix4x4(model_rotation) * axis_x_local_position_4;
340 }
341 Vector4 axis_x_world_position_4 = axis_model_matrix * axis_x_local_position_4;
342 axis_x_world_position_4.w = 1.0f;
343 Vector4 axis_x_clip_position = proj_matrix * view_matrix * axis_x_world_position_4;
344 axis_x_clip_position /= axis_x_clip_position.w;
345 Vector2 axis_x_clip_uv((axis_x_clip_position.x + 1) / 2.0f, (axis_x_clip_position.y + 1) / 2.0f);
346 Vector2 axis_x_direction_uv = axis_x_clip_uv - model_origin_clip_uv;
347 axis_x_direction_uv.normalise();
348
349 Vector4 axis_y_local_position_4(0, 1, 0, 1);
350 if (m_axis_mode == EditorAxisMode::ScaleMode)
351 {
352 axis_y_local_position_4 = Matrix4x4(model_rotation) * axis_y_local_position_4;
353 }
354 Vector4 axis_y_world_position_4 = axis_model_matrix * axis_y_local_position_4;
355 axis_y_world_position_4.w = 1.0f;
356 Vector4 axis_y_clip_position = proj_matrix * view_matrix * axis_y_world_position_4;
357 axis_y_clip_position /= axis_y_clip_position.w;
358 Vector2 axis_y_clip_uv((axis_y_clip_position.x + 1) / 2.0f, (axis_y_clip_position.y + 1) / 2.0f);

Callers 1

onCursorPosMethod · 0.80

Calls 15

decompositionMethod · 0.80
setTransMethod · 0.80
getLookAtMatrixMethod · 0.80
getPersProjMatrixMethod · 0.80
tryGetComponentMethod · 0.80
makeTransformMethod · 0.80
setVisibleAxisMethod · 0.80
forwardMethod · 0.80
Vector2Class · 0.50
Matrix4x4Class · 0.50
RadianFunction · 0.50
lockMethod · 0.45

Tested by

no test coverage detected