diff --git a/src/ui/GameWorldView.cpp b/src/ui/GameWorldView.cpp index 0ae6735..7deeb6c 100644 --- a/src/ui/GameWorldView.cpp +++ b/src/ui/GameWorldView.cpp @@ -117,6 +117,7 @@ GameWorldView::GameWorldView(Simulation* sim, const GameConfig* config, , m_dragging(false) , m_demolishMode(false) , m_demolishHoverId(kInvalidEntityId) + , m_debugDraw(false) , m_boxSelecting(false) , m_scrollLeft(false) , m_scrollRight(false) @@ -246,6 +247,7 @@ void GameWorldView::paintGL() drawBuildings(painter); drawBeltItems(painter); drawScrap(painter); + if (m_debugDraw) { drawDebugSensorRanges(painter); } drawShips(painter); drawBeams(painter); drawOverlays(painter); @@ -775,6 +777,42 @@ void GameWorldView::drawShips(QPainter& painter) } } +void GameWorldView::drawDebugSensorRanges(QPainter& painter) +{ + painter.setBrush(Qt::NoBrush); + for (const Ship& ship : m_sim->ships().allShips()) + { + const ShipRole role = shipRole(ship); + const std::map::const_iterator it = + m_visuals->ships.find(role); + if (it == m_visuals->ships.end()) { continue; } + + float range = 0.0f; + if (ship.weapon.has_value()) + { + range = ship.weapon->range; + } + else if (ship.repairTool.has_value()) + { + range = ship.repairTool->range; + } + else if (ship.cargo.has_value()) + { + range = ship.cargo->collectionRange * 5.0f; + } + else + { + continue; + } + + const QPointF center = worldToWidget(ship.position); + const qreal radiusPx = static_cast(range) + * static_cast(tilePx()); + painter.setPen(QPen(it->second.outline, 1)); + painter.drawEllipse(center, radiusPx, radiusPx); + } +} + void GameWorldView::drawBeams(QPainter& painter) { painter.setPen(QPen(m_visuals->beams.color, m_visuals->beams.widthPx)); @@ -996,6 +1034,9 @@ void GameWorldView::keyPressEvent(QKeyEvent* event) case Qt::Key_Backspace: toggleDemolishMode(); break; + case Qt::Key_M: + m_debugDraw = !m_debugDraw; + break; default: QOpenGLWidget::keyPressEvent(event); break; diff --git a/src/ui/GameWorldView.h b/src/ui/GameWorldView.h index 816e33c..304c8bd 100644 --- a/src/ui/GameWorldView.h +++ b/src/ui/GameWorldView.h @@ -81,6 +81,7 @@ private: void drawBeltItems(QPainter& painter); void drawScrap(QPainter& painter); void drawShips(QPainter& painter); + void drawDebugSensorRanges(QPainter& painter); void drawBeams(QPainter& painter); void drawOverlays(QPainter& painter); void drawScreenSpace(QPainter& painter); @@ -156,6 +157,7 @@ private: bool m_demolishMode; EntityId m_demolishHoverId; + bool m_debugDraw; std::vector m_selectedIds; bool m_boxSelecting;