55 lines
1.3 KiB
C++
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
|