allow to inspect balancing arena

This commit is contained in:
2026-05-03 21:17:43 +02:00
parent afd8cd28fa
commit 3ef32ee6ba
13 changed files with 851 additions and 4 deletions

79
src/balancing/ArenaView.h Normal file
View File

@@ -0,0 +1,79 @@
#pragma once
#include <random>
#include <vector>
#include <QElapsedTimer>
#include <QOpenGLWidget>
#include <QTimer>
#include <QVector2D>
#include "EntityId.h"
#include "FireEvent.h"
#include "Tick.h"
#include "TickDriver.h"
#include "VisualsConfig.h"
class ArenaSimulation;
class QPainter;
class ArenaView : public QOpenGLWidget
{
Q_OBJECT
public:
ArenaView(ArenaSimulation* sim, const VisualsConfig* visuals,
QWidget* parent = nullptr);
void setGameSpeed(double multiplier);
double gameSpeed() const;
void togglePause();
signals:
void speedChanged(double multiplier);
void finished();
protected:
void paintGL() override;
private slots:
void onFrame();
private:
void drawTiles(QPainter& painter);
void drawBuildings(QPainter& painter);
void drawScrap(QPainter& painter);
void drawShips(QPainter& painter);
void drawBeams(QPainter& painter);
float tilePx() const;
QPointF worldToWidget(QVector2D worldPos) const;
QPointF tileToWidget(QPoint tile) const;
QRectF tileRect(QPoint tile) const;
std::optional<QVector2D> entityPosition(EntityId id) const;
struct ActiveBeam
{
FireEvent event;
qint64 emittedWallMs;
QVector2D targetOffset;
};
static constexpr qint64 kBeamLifetimeMs = 300;
ArenaSimulation* m_sim;
const VisualsConfig* m_visuals;
TickDriver m_tickDriver;
QElapsedTimer m_frameTimer;
qint64 m_wallMs;
std::mt19937 m_rng;
double m_gameSpeedMultiplier;
double m_prevNonZeroSpeed;
QTimer* m_renderTimer;
std::vector<ActiveBeam> m_activeBeams;
bool m_finishedEmitted;
};