Skip to content

Commit

Permalink
Fix some Node3DEditor snapping issues
Browse files Browse the repository at this point in the history
  • Loading branch information
kleonc authored and GuybrushThreepwood-GitHub committed Jan 27, 2024
1 parent 333516a commit 4c5c66f
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 29 deletions.
41 changes: 15 additions & 26 deletions editor/plugins/node_3d_editor_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4939,8 +4939,7 @@ void Node3DEditorViewport::update_transform(bool p_shift) {
if (_edit.snap || spatial_editor->is_snap_enabled()) {
snap = spatial_editor->get_rotate_snap();
}
angle = Math::rad_to_deg(angle) + snap * 0.5; //else it won't reach +180
angle -= Math::fmod(angle, snap);
angle = Math::snapped(Math::rad_to_deg(angle), snap);
set_message(vformat(TTR("Rotating %s degrees."), String::num(angle, snap_step_decimals)));
angle = Math::deg_to_rad(angle);

Expand Down Expand Up @@ -5928,9 +5927,9 @@ Dictionary Node3DEditor::get_state() const {
Dictionary d;

d["snap_enabled"] = snap_enabled;
d["translate_snap"] = get_translate_snap();
d["rotate_snap"] = get_rotate_snap();
d["scale_snap"] = get_scale_snap();
d["translate_snap"] = snap_translate_value;
d["rotate_snap"] = snap_rotate_value;
d["scale_snap"] = snap_scale_value;

d["local_coords"] = tool_option_button[TOOL_OPT_LOCAL_COORDS]->is_pressed();

Expand Down Expand Up @@ -8943,9 +8942,8 @@ void Node3DEditorPlugin::set_state(const Dictionary &p_state) {

Vector3 Node3DEditor::snap_point(Vector3 p_target, Vector3 p_start) const {
if (is_snap_enabled()) {
p_target.x = Math::snap_scalar(0.0, get_translate_snap(), p_target.x);
p_target.y = Math::snap_scalar(0.0, get_translate_snap(), p_target.y);
p_target.z = Math::snap_scalar(0.0, get_translate_snap(), p_target.z);
real_t snap = get_translate_snap();
p_target.snap(Vector3(snap, snap, snap));
}
return p_target;
}
Expand All @@ -8957,36 +8955,27 @@ bool Node3DEditor::is_gizmo_visible() const {
return gizmo.visible;
}

double Node3DEditor::get_translate_snap() const {
double snap_value;
real_t Node3DEditor::get_translate_snap() const {
real_t snap_value = snap_translate_value;
if (Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
snap_value = snap_translate->get_text().to_float() / 10.0;
} else {
snap_value = snap_translate->get_text().to_float();
snap_value /= 10.0f;
}

return snap_value;
}

double Node3DEditor::get_rotate_snap() const {
double snap_value;
real_t Node3DEditor::get_rotate_snap() const {
real_t snap_value = snap_rotate_value;
if (Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
snap_value = snap_rotate->get_text().to_float() / 3.0;
} else {
snap_value = snap_rotate->get_text().to_float();
snap_value /= 3.0f;
}

return snap_value;
}

double Node3DEditor::get_scale_snap() const {
double snap_value;
real_t Node3DEditor::get_scale_snap() const {
real_t snap_value = snap_scale_value;
if (Input::get_singleton()->is_key_pressed(Key::SHIFT)) {
snap_value = snap_scale->get_text().to_float() / 2.0;
} else {
snap_value = snap_scale->get_text().to_float();
snap_value /= 2.0f;
}

return snap_value;
}

Expand Down
6 changes: 3 additions & 3 deletions editor/plugins/node_3d_editor_plugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -855,9 +855,9 @@ class Node3DEditor : public VBoxContainer {
bool are_local_coords_enabled() const { return tool_option_button[Node3DEditor::TOOL_OPT_LOCAL_COORDS]->is_pressed(); }
void set_local_coords_enabled(bool on) const { tool_option_button[Node3DEditor::TOOL_OPT_LOCAL_COORDS]->set_pressed(on); }
bool is_snap_enabled() const { return snap_enabled ^ snap_key_enabled; }
double get_translate_snap() const;
double get_rotate_snap() const;
double get_scale_snap() const;
real_t get_translate_snap() const;
real_t get_rotate_snap() const;
real_t get_scale_snap() const;

Ref<ArrayMesh> get_move_gizmo(int idx) const { return move_gizmo[idx]; }
Ref<ArrayMesh> get_axis_gizmo(int idx) const { return axis_gizmo[idx]; }
Expand Down

0 comments on commit 4c5c66f

Please sign in to comment.