Skip to content

Commit 8756a9e

Browse files
committed
More editor code quality
1 parent 1a2ae11 commit 8756a9e

File tree

1 file changed

+77
-71
lines changed

1 file changed

+77
-71
lines changed

src/editor/overlay_widget.cpp

Lines changed: 77 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
#include "video/viewport.hpp"
4343
#include "worldmap/worldmap_object.hpp"
4444

45+
using namespace std::chrono;
46+
4547
namespace {
4648

4749
const int snap_grid_sizes[4] = {4, 8, 16, 32};
@@ -482,10 +484,15 @@ void
482484
EditorOverlayWidget::replace()
483485
{
484486
auto tilemap = m_editor.get_selected_tilemap();
487+
auto tiles = m_editor.get_tiles();
488+
485489
uint32_t replace_tile = tilemap->get_tile_id(m_hovered_tile);
486490

487491
// Don't do anything if the old and new tiles are the same tile.
488-
if (m_editor.get_tiles()->m_width == 1 && m_editor.get_tiles()->m_height == 1 && replace_tile == m_editor.get_tiles()->pos(0, 0)) return;
492+
if (tiles->m_width == 1 && tiles->m_height == 1 && replace_tile == tiles->pos(0, 0))
493+
{
494+
return;
495+
}
489496

490497
tilemap->save_state();
491498
for (int x = 0; x < tilemap->get_width(); ++x)
@@ -494,9 +501,9 @@ EditorOverlayWidget::replace()
494501
{
495502
if (tilemap->get_tile_id(x, y) == replace_tile)
496503
{
497-
tilemap->change(x, y, m_editor.get_tiles()->pos(
498-
(x - static_cast<int>(m_hovered_tile.x)) % m_editor.get_tiles()->m_width,
499-
(y - static_cast<int>(m_hovered_tile.y)) % m_editor.get_tiles()->m_height)
504+
tilemap->change(x, y, tiles->pos(
505+
(x - static_cast<int>(m_hovered_tile.x)) % tiles->m_width,
506+
(y - static_cast<int>(m_hovered_tile.y)) % tiles->m_height)
500507
);
501508
}
502509
}
@@ -517,43 +524,41 @@ EditorOverlayWidget::hover_object()
517524
for (auto& moving_object : m_editor.get_sector()->get_objects_by_type<MovingObject>())
518525
{
519526
const Rectf& bbox = moving_object.get_bbox();
520-
if (bbox.contains(m_sector_pos))
527+
if (!bbox.contains(m_sector_pos) || &moving_object == m_hovered_object)
521528
{
522-
if (&moving_object != m_hovered_object)
523-
{
529+
continue;
530+
}
524531

525-
// Ignore BezierMarkers if ctrl isn't pressed... (1/2)
526-
auto* bezier_marker = dynamic_cast<BezierMarker*>(&moving_object);
527-
if (bezier_marker)
528-
{
529-
if (!m_editor.m_ctrl_pressed)
530-
{
531-
marker_hovered_without_ctrl = bezier_marker;
532-
continue;
533-
}
534-
else
535-
{
536-
cache_is_marker = true;
537-
cache_layer = 2147483647;
538-
m_hovered_object = &moving_object;
539-
}
540-
}
532+
// Ignore BezierMarkers if ctrl isn't pressed... (1/2)
533+
auto* bezier_marker = dynamic_cast<BezierMarker*>(&moving_object);
534+
if (bezier_marker)
535+
{
536+
if (!m_editor.m_ctrl_pressed)
537+
{
538+
marker_hovered_without_ctrl = bezier_marker;
539+
continue;
540+
}
541+
else
542+
{
543+
cache_is_marker = true;
544+
cache_layer = INT_MAX;
545+
m_hovered_object = &moving_object;
546+
}
547+
}
541548

542-
// Pick objects in this priority:
543-
// 1. Markers
544-
// 2. Objects with a higher layer ID
545-
// 3. If many objects are on the highest layer, pick the last created one
546-
// (Which will be the one rendererd on top)
549+
// Pick objects in this priority:
550+
// 1. Markers
551+
// 2. Objects with a higher layer ID
552+
// 3. If many objects are on the highest layer, pick the last created one
553+
// (Which will be the one rendererd on top)
547554

548-
bool is_marker = dynamic_cast<MarkerObject*>(&moving_object);
549-
// The "=" part of ">=" ensures that for equal layer, the last object is picked; don't remove the "="!
550-
if ((is_marker && !cache_is_marker) || moving_object.get_layer() >= cache_layer)
551-
{
552-
cache_is_marker = is_marker;
553-
cache_layer = moving_object.get_layer();
554-
m_hovered_object = &moving_object;
555-
}
556-
}
555+
bool is_marker = dynamic_cast<MarkerObject*>(&moving_object);
556+
// The "=" part of ">=" ensures that for equal layer, the last object is picked; don't remove the "="!
557+
if ((is_marker && !cache_is_marker) || moving_object.get_layer() >= cache_layer)
558+
{
559+
cache_is_marker = is_marker;
560+
cache_layer = moving_object.get_layer();
561+
m_hovered_object = &moving_object;
557562
}
558563
}
559564

@@ -692,40 +697,38 @@ EditorOverlayWidget::show_object_menu(GameObject& object)
692697
void
693698
EditorOverlayWidget::move_object()
694699
{
695-
if (m_dragged_object)
700+
if (m_dragged_object == nullptr || !m_dragged_object->is_valid())
696701
{
697-
if (!m_dragged_object->is_valid())
698-
{
699-
m_dragged_object = nullptr;
700-
return;
701-
}
702-
Vector new_pos = m_sector_pos - m_obj_mouse_desync;
703-
if (g_config->editor_snap_to_grid)
704-
{
705-
auto& snap_grid_size = snap_grid_sizes[g_config->editor_selected_snap_grid_size];
706-
new_pos = glm::floor(new_pos / static_cast<float>(snap_grid_size)) * static_cast<float>(snap_grid_size);
702+
m_dragged_object = nullptr;
703+
return;
704+
}
707705

708-
auto pm = dynamic_cast<MarkerObject*>(m_dragged_object.get());
709-
if (pm)
710-
new_pos -= pm->get_offset();
711-
}
706+
Vector new_pos = m_sector_pos - m_obj_mouse_desync;
707+
if (g_config->editor_snap_to_grid)
708+
{
709+
auto& snap_grid_size = snap_grid_sizes[g_config->editor_selected_snap_grid_size];
710+
new_pos = glm::floor(new_pos / static_cast<float>(snap_grid_size)) * static_cast<float>(snap_grid_size);
712711

713-
// TODO: Temporarily disabled during ongoing discussion
714-
// Special case: Bezier markers should influence each other when holding shift
715-
//if (alt_pressed) {
716-
// auto bm = dynamic_cast<BezierMarker*>(m_dragged_object);
717-
// if (bm) {
718-
// auto nm = bm->get_parent();
719-
// if (nm) {
720-
// nm->move_other_marker(bm->get_uid(), nm->get_pos() * 2.f - new_pos);
721-
// } else {
722-
// log_warning << "Moving bezier handles without parent NodeMarker" << std::endl;
723-
// }
724-
// }
725-
//}
726-
727-
m_dragged_object->move_to(new_pos);
712+
auto pm = dynamic_cast<MarkerObject*>(m_dragged_object.get());
713+
if (pm)
714+
new_pos -= pm->get_offset();
728715
}
716+
717+
// TODO: Temporarily disabled during ongoing discussion
718+
// Special case: Bezier markers should influence each other when holding shift
719+
//if (alt_pressed) {
720+
// auto bm = dynamic_cast<BezierMarker*>(m_dragged_object);
721+
// if (bm) {
722+
// auto nm = bm->get_parent();
723+
// if (nm) {
724+
// nm->move_other_marker(bm->get_uid(), nm->get_pos() * 2.f - new_pos);
725+
// } else {
726+
// log_warning << "Moving bezier handles without parent NodeMarker" << std::endl;
727+
// }
728+
// }
729+
//}
730+
731+
m_dragged_object->move_to(new_pos);
729732
}
730733

731734
void
@@ -776,15 +779,18 @@ EditorOverlayWidget::add_path_node()
776779
{
777780
m_edited_path->save_state();
778781

779-
Path::Node new_node(&m_edited_path->get_path());
782+
auto& path = m_edited_path->get_path();
783+
auto& path_nodes = path.m_nodes;
784+
785+
Path::Node new_node(&path);
780786
new_node.position = m_sector_pos;
781787
new_node.bezier_before = new_node.position;
782788
new_node.bezier_after = new_node.position;
783789
new_node.time = 1;
784790
m_edited_path->get_path().m_nodes.insert(m_last_node_marker->m_node + 1, new_node);
785-
auto& bezier_before = Sector::get().add<BezierMarker>(&(*(m_edited_path->get_path().m_nodes.end() - 1)), &((m_edited_path->get_path().m_nodes.end() - 1)->bezier_before));
786-
auto& bezier_after = Sector::get().add<BezierMarker>(&(*(m_edited_path->get_path().m_nodes.end() - 1)), &((m_edited_path->get_path().m_nodes.end() - 1)->bezier_after));
787-
auto& new_marker = Sector::get().add<NodeMarker>(m_edited_path->get_path().m_nodes.end() - 1, m_edited_path->get_path().m_nodes.size() - 1, bezier_before.get_uid(), bezier_after.get_uid());
791+
auto& bezier_before = Sector::get().add<BezierMarker>(&(*(path_nodes.end() - 1)), &((path_nodes.end() - 1)->bezier_before));
792+
auto& bezier_after = Sector::get().add<BezierMarker>(&(*(path_nodes.end() - 1)), &((path_nodes.end() - 1)->bezier_after));
793+
auto& new_marker = Sector::get().add<NodeMarker>(path_nodes.end() - 1, path_nodes.size() - 1, bezier_before.get_uid(), bezier_after.get_uid());
788794
bezier_before.set_parent(new_marker.get_uid());
789795
bezier_after.set_parent(new_marker.get_uid());
790796
//last_node_marker = dynamic_cast<NodeMarker*>(marker.get());

0 commit comments

Comments
 (0)