File indexing completed on 2023-10-03 07:19:02
0001 /* 0002 SPDX-FileCopyrightText: 2003 Russell Steffen <rsteffen@bayarea.net> 0003 SPDX-FileCopyrightText: 2003 Stephan Zehetner <s.zehetner@nevox.org> 0004 SPDX-FileCopyrightText: 2006 Dmitry Suzdalev <dimsuz@gmail.com> 0005 SPDX-FileCopyrightText: 2006 Inge Wallin <inge@lysator.liu.se> 0006 SPDX-FileCopyrightText: 2006 Pierre Ducroquet <pinaraf@gmail.com> 0007 Copyright Sean D'Epagnier <geckosenator@gmail.com> 0008 0009 SPDX-License-Identifier: GPL-2.0-or-later 0010 */ 0011 0012 #include "minimapview.h" 0013 0014 #include <QMouseEvent> 0015 #include <QPainter> 0016 0017 #include "planet.h" 0018 #include "players/player.h" 0019 0020 0021 MiniMapView::MiniMapView(QWidget *parent) : 0022 QWidget(parent), 0023 m_map(nullptr), 0024 m_selection(-1, -1) 0025 { 0026 QPalette pal = palette(); 0027 pal.setColor(backgroundRole(), Qt::black); 0028 setPalette(pal); 0029 0030 setMinimumSize(100, 100); 0031 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 0032 } 0033 0034 0035 MiniMapView::~MiniMapView() 0036 { 0037 } 0038 0039 0040 void 0041 MiniMapView::setMap(Map *map) 0042 { 0043 m_map = map; 0044 connect(m_map, &Map::update, this, static_cast<void (QWidget::*)(void)>(&QWidget::update)); 0045 } 0046 0047 0048 void 0049 MiniMapView::CalculateOffsets(float §orSize, float &woffset, float &hoffset) 0050 { 0051 sectorSize = ((float)width())/m_map->columns(); 0052 if (height()/m_map->rows() < sectorSize) 0053 sectorSize = ((float)height())/m_map->rows(); 0054 0055 woffset = ((float)width() - m_map->columns()*sectorSize)/2; 0056 hoffset = ((float)height() - m_map->rows()*sectorSize)/2; 0057 } 0058 0059 0060 void 0061 MiniMapView::mousePressEvent(QMouseEvent *event) 0062 { 0063 float sectorSize, woffset, hoffset; 0064 CalculateOffsets(sectorSize, woffset, hoffset); 0065 0066 m_selection = Coordinate((event->x() - woffset) / sectorSize, 0067 (event->y() - hoffset) / sectorSize); 0068 0069 const Sector *sector = m_map->sector(m_selection); 0070 if (sector && !sector->hasPlanet()) 0071 m_selection = Coordinate(-1, -1); 0072 0073 Q_EMIT sectorSelected(m_selection); 0074 } 0075 0076 0077 void 0078 MiniMapView::paintEvent(QPaintEvent * /*event*/) 0079 { 0080 QPainter painter(this); 0081 0082 float sectorSize, woffset, hoffset; 0083 CalculateOffsets(sectorSize, woffset, hoffset); 0084 0085 // Draw the black background 0086 painter.setRenderHint(QPainter::Antialiasing); 0087 painter.setPen(Qt::black); 0088 painter.setBrush(Qt::black); 0089 painter.drawRect(QRectF(woffset, hoffset, m_map->columns() * sectorSize, m_map->rows() * sectorSize)); 0090 0091 // Draw selection 0092 if (hasSelection()) { 0093 painter.setBrush(Qt::cyan); 0094 painter.drawRect(QRectF( 0095 woffset + m_selection.x() * sectorSize, 0096 hoffset + m_selection.y() * sectorSize, 0097 sectorSize, 0098 sectorSize 0099 )); 0100 } 0101 0102 // Now draw the planets... 0103 for (int col = 0 ; col < m_map->columns() ; col++) { 0104 for (int row = 0 ; row < m_map->rows() ; row++) { 0105 QPoint pt(col, row); 0106 Planet *planet = m_map->sector(pt)->planet(); 0107 if (planet) { 0108 Player *player = planet->player(); 0109 if (player) { 0110 painter.setBrush(player->color()); 0111 0112 // Draw a circle in the planets color to show the planet. 0113 painter.drawEllipse(QRectF( 0114 woffset + col * sectorSize, 0115 hoffset + row * sectorSize, 0116 sectorSize, 0117 sectorSize 0118 )); 0119 } 0120 } 0121 } 0122 } 0123 } 0124 0125 #include "moc_minimapview.cpp"