Skip to content

Commit b991176

Browse files
committed
noggit: add object transform speed modifiers
- makes it easier to transform small objects, especially fences - use k/l keys in object mode to change transformation speed
1 parent d2723e5 commit b991176

File tree

3 files changed

+47
-6
lines changed

3 files changed

+47
-6
lines changed

src/noggit/MapView.cpp

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@
7171
static const float XSENS = 15.0f;
7272
static const float YSENS = 15.0f;
7373

74+
static const float OBJ_TRANSFORM_SENSITIVITY_MIN = 0.05f;
75+
static const float OBJ_TRANSFORM_SENSITIVITY_MAX = 1.0f;
76+
static const float OBJ_TRANSFORM_SENSITIVITY_STEP = 0.2f;
77+
7478
void MapView::set_editing_mode (editing_mode mode)
7579
{
7680
makeCurrent();
@@ -1000,6 +1004,32 @@ void MapView::createGUI()
10001004
, [this] { return terrainMode == editing_mode::object; }
10011005
);
10021006

1007+
addHotkey( Qt::Key_L
1008+
, MOD_none
1009+
, [this]
1010+
{
1011+
obj_transform_sens = std::min
1012+
(
1013+
obj_transform_sens + OBJ_TRANSFORM_SENSITIVITY_STEP
1014+
, OBJ_TRANSFORM_SENSITIVITY_MAX
1015+
);
1016+
}
1017+
, [this] { return terrainMode == editing_mode::object; }
1018+
);
1019+
1020+
addHotkey( Qt::Key_K
1021+
, MOD_none
1022+
, [this]
1023+
{
1024+
obj_transform_sens = std::max
1025+
(
1026+
obj_transform_sens - OBJ_TRANSFORM_SENSITIVITY_STEP
1027+
, OBJ_TRANSFORM_SENSITIVITY_MIN
1028+
);
1029+
}
1030+
, [this] { return terrainMode == editing_mode::object; }
1031+
);
1032+
10031033
ADD_ACTION (view_menu, "Invert mouse", "I", [this] { mousedir *= -1.f; });
10041034

10051035
ADD_ACTION (view_menu, "Decrease camera speed", Qt::Key_O, [this] { _camera.move_speed *= 0.5f; });
@@ -1714,11 +1744,15 @@ void MapView::tick (float dt)
17141744
{
17151745
if (_mod_alt_down)
17161746
{
1717-
_world->scale_selected_models(std::pow(2.f, mv*4.f), World::m2_scaling_type::mult);
1747+
_world->scale_selected_models
1748+
(
1749+
std::pow(2.f, mv*4.f*obj_transform_sens)
1750+
, World::m2_scaling_type::mult
1751+
);
17181752
}
17191753
else if (_mod_shift_down)
17201754
{
1721-
_world->move_selected_models(0.f, mv*80.f, 0.f);
1755+
_world->move_selected_models(0.f, mv*80.f*obj_transform_sens, 0.f);
17221756
}
17231757
else
17241758
{
@@ -1737,7 +1771,10 @@ void MapView::tick (float dt)
17371771
{
17381772
if (!_move_model_to_cursor_position.get())
17391773
{
1740-
_world->move_selected_models((mv * dirUp - mh * dirRight)*80.f);
1774+
_world->move_selected_models
1775+
(
1776+
(mv * dirUp - mh * dirRight)*80.f*obj_transform_sens
1777+
);
17411778
}
17421779
else
17431780
{
@@ -1793,7 +1830,7 @@ void MapView::tick (float dt)
17931830
{
17941831
if (_mod_ctrl_down) // X
17951832
{
1796-
_world->rotate_selected_models( math::degrees(rh + rv)
1833+
_world->rotate_selected_models( math::degrees((rh + rv)*obj_transform_sens)
17971834
, math::degrees(0.f)
17981835
, math::degrees(0.f)
17991836
, _use_median_pivot_point.get()
@@ -1802,7 +1839,7 @@ void MapView::tick (float dt)
18021839
if (_mod_shift_down) // Y
18031840
{
18041841
_world->rotate_selected_models( math::degrees(0.f)
1805-
, math::degrees(rh + rv)
1842+
, math::degrees((rh + rv)*obj_transform_sens)
18061843
, math::degrees(0.f)
18071844
, _use_median_pivot_point.get()
18081845
);
@@ -1811,7 +1848,7 @@ void MapView::tick (float dt)
18111848
{
18121849
_world->rotate_selected_models( math::degrees(0.f)
18131850
, math::degrees(0.f)
1814-
, math::degrees(rh + rv)
1851+
, math::degrees((rh + rv)*obj_transform_sens)
18151852
, _use_median_pivot_point.get()
18161853
);
18171854
}

src/noggit/MapView.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ class MapView : public QOpenGLWidget
141141

142142
bool MoveObj;
143143
float numpad_moveratio = 0.001f;
144+
float obj_transform_sens = 1.0f;
144145

145146
math::vector_3d objMove;
146147

src/noggit/ui/Help.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,9 @@ namespace noggit
280280
generate_hotkey_row({ font_noggit::shift }, "Holding \a 1 / 3 - Double speed", object_layout);
281281
generate_hotkey_row({ font_noggit::ctrl }, "Holding \a 1 / 3 - Triple speed", object_layout);
282282
generate_hotkey_row({ font_noggit::shift, font_noggit::ctrl }, "Holding \a and \a together - half speed", object_layout);
283+
generate_hotkey_row({ font_noggit::k }, "\a Decrease object transform sensitivity", object_layout);
284+
generate_hotkey_row({ font_noggit::l }, "\a Increase object transform sensitivity", object_layout);
285+
283286

284287
auto shader_widget (new QWidget (this));
285288
auto shader_layout (new QFormLayout (shader_widget));

0 commit comments

Comments
 (0)