Files
Ascent-of-Man/unitrenderer.h
T
2026-11-08 17:06:47 +01:00

55 lines
1.3 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 "unit.h"
#include "player.h"
#include "city.h"
class UnitRenderer : protected QOpenGLFunctions_4_0_Core {
public:
UnitRenderer();
~UnitRenderer();
void initialize();
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();
QOpenGLShaderProgram *m_program;
QOpenGLBuffer m_vbo;
QOpenGLVertexArrayObject m_vao;
int m_vertexCount;
bool m_initialized;
};
#endif // UNITRENDERER_H