balancing arenas can be started individually
This commit is contained in:
112
src/balancing/ArenaWidget.cpp
Normal file
112
src/balancing/ArenaWidget.cpp
Normal file
@@ -0,0 +1,112 @@
|
||||
#include "ArenaWidget.h"
|
||||
|
||||
#include <QHBoxLayout>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
ArenaWidget::ArenaWidget(const std::string& arenaName, QWidget* parent)
|
||||
: QFrame(parent)
|
||||
, m_running(false)
|
||||
, m_wasFinished(false)
|
||||
{
|
||||
buildLayout(arenaName);
|
||||
setFrameStyle(QFrame::Box | QFrame::Plain);
|
||||
setLineWidth(2);
|
||||
setStyleSheet("ArenaWidget { border: 2px solid #999999; padding: 8px; }");
|
||||
}
|
||||
|
||||
void ArenaWidget::buildLayout(const std::string& arenaName)
|
||||
{
|
||||
QVBoxLayout* outerLayout = new QVBoxLayout(this);
|
||||
outerLayout->setContentsMargins(8, 8, 8, 8);
|
||||
outerLayout->setSpacing(4);
|
||||
|
||||
QHBoxLayout* titleRow = new QHBoxLayout();
|
||||
m_titleLabel = new QLabel(QString::fromStdString(arenaName), this);
|
||||
QFont titleFont = m_titleLabel->font();
|
||||
titleFont.setBold(true);
|
||||
titleFont.setPointSize(titleFont.pointSize() + 2);
|
||||
m_titleLabel->setFont(titleFont);
|
||||
titleRow->addWidget(m_titleLabel);
|
||||
|
||||
titleRow->addStretch();
|
||||
|
||||
m_startButton = new QPushButton("Start", this);
|
||||
connect(m_startButton, &QPushButton::clicked, this, &ArenaWidget::startRequested);
|
||||
titleRow->addWidget(m_startButton);
|
||||
|
||||
outerLayout->addLayout(titleRow);
|
||||
|
||||
QHBoxLayout* teamsLayout = new QHBoxLayout();
|
||||
teamsLayout->setSpacing(16);
|
||||
|
||||
// Team 1 column.
|
||||
QVBoxLayout* team1Layout = new QVBoxLayout();
|
||||
m_team1Header = new QLabel(this);
|
||||
QFont headerFont = m_team1Header->font();
|
||||
headerFont.setBold(true);
|
||||
m_team1Header->setFont(headerFont);
|
||||
team1Layout->addWidget(m_team1Header);
|
||||
m_team1Content = new QLabel(this);
|
||||
team1Layout->addWidget(m_team1Content);
|
||||
team1Layout->addStretch();
|
||||
teamsLayout->addLayout(team1Layout);
|
||||
|
||||
// Team 2 column.
|
||||
QVBoxLayout* team2Layout = new QVBoxLayout();
|
||||
m_team2Header = new QLabel(this);
|
||||
m_team2Header->setFont(headerFont);
|
||||
team2Layout->addWidget(m_team2Header);
|
||||
m_team2Content = new QLabel(this);
|
||||
team2Layout->addWidget(m_team2Content);
|
||||
team2Layout->addStretch();
|
||||
teamsLayout->addLayout(team2Layout);
|
||||
|
||||
outerLayout->addLayout(teamsLayout);
|
||||
}
|
||||
|
||||
void ArenaWidget::startSimulation()
|
||||
{
|
||||
m_running = true;
|
||||
m_startButton->setEnabled(false);
|
||||
setStyleSheet("ArenaWidget { border: 2px solid #3366ff; padding: 8px; }");
|
||||
}
|
||||
|
||||
void ArenaWidget::updateStatus(const ArenaStatus& status)
|
||||
{
|
||||
for (int ti = 0; ti < 2; ++ti)
|
||||
{
|
||||
const ArenaStatus::TeamStatus& team = status.teams[ti];
|
||||
QLabel* header = (ti == 0) ? m_team1Header : m_team2Header;
|
||||
QLabel* content = (ti == 0) ? m_team1Content : m_team2Content;
|
||||
|
||||
if (status.finished && status.winnerTeam == ti)
|
||||
{
|
||||
header->setText("[WON] " + QString::fromStdString(team.name));
|
||||
}
|
||||
else
|
||||
{
|
||||
header->setText(QString::fromStdString(team.name));
|
||||
}
|
||||
|
||||
QString lines;
|
||||
for (const ArenaStatus::Entry& entry : team.entries)
|
||||
{
|
||||
if (!lines.isEmpty())
|
||||
{
|
||||
lines += "\n";
|
||||
}
|
||||
lines += QString("%1/%2 %3 L%4")
|
||||
.arg(entry.surviving)
|
||||
.arg(entry.total)
|
||||
.arg(QString::fromStdString(entry.displayName))
|
||||
.arg(entry.level);
|
||||
}
|
||||
content->setText(lines);
|
||||
}
|
||||
|
||||
if (status.finished && !m_wasFinished)
|
||||
{
|
||||
m_wasFinished = true;
|
||||
setStyleSheet("ArenaWidget { border: 2px solid #33cc33; padding: 8px; }");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user