Files
2026-11-10 19:54:00 +01:00

80 lines
1.9 KiB
C++

#ifndef UNITRENDERER_H
#define UNITRENDERER_H
#include <QOpenGLFunctions_4_0_Core>
#include <QOpenGLShaderProgram>
#include <QOpenGLBuffer>
#include <QOpenGLVertexArrayObject>
#include <QMatrix4x4>
#include <QVector3D>
#include <QPointF>
#include <vector>
#include <memory>
#include <map>
#include "unit.h"
#include "player.h"
#include "city.h"
#include "roadconfig.h"
#include "matrix2d.h"
#include "terrain.h"
class UnitRenderer : protected QOpenGLFunctions_4_0_Core {
public:
UnitRenderer();
~UnitRenderer();
void initialize();
void renderRoads(
const std::map<std::pair<int, int>, TileRoad> &roads,
const RoadConfigManager &roadConfigs,
Matrix2D<TerrainPoint> *mapPoints,
int numPoints05,
const QMatrix4x4 &projection,
const QMatrix4x4 &vMatrix,
const QVector3D &lightDir,
int cityViewRadius = -1,
int cityViewTileX = -1,
int cityViewTileY = -1
);
void renderUnits(
const std::vector<std::shared_ptr<Unit>> &units,
const std::vector<City> &cities,
const PlayerManager &players,
const QMatrix4x4 &projection,
const QMatrix4x4 &vMatrix,
const QVector3D &lightDir,
int selectedUnitId,
int cityViewRadius = -1,
int cityViewTileX = -1,
int cityViewTileY = -1
);
static QPointF projectToScreen(
const QVector3D &worldPoint,
const QMatrix4x4 &projection,
const QMatrix4x4 &vMatrix,
int viewportW, int viewportH,
bool &inFront
);
private:
void buildCylinderMesh();
// Main unit cylinder mesh
QOpenGLShaderProgram *m_program;
QOpenGLBuffer m_vbo;
QOpenGLVertexArrayObject m_vao;
int m_vertexCount;
bool m_initialized;
// Road rendering buffers (existing functionality)
QOpenGLBuffer m_roadVbo;
QOpenGLVertexArrayObject m_roadVao;
bool m_roadBuffersInitialized;
};
#endif // UNITRENDERER_H