75 lines
1.8 KiB
C++
75 lines
1.8 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();
|
|
|
|
QOpenGLShaderProgram *m_program;
|
|
QOpenGLBuffer m_vbo;
|
|
QOpenGLVertexArrayObject m_vao;
|
|
int m_vertexCount;
|
|
bool m_initialized;
|
|
|
|
QOpenGLBuffer m_roadVbo;
|
|
QOpenGLVertexArrayObject m_roadVao;
|
|
bool m_roadBuffersInitialized;
|
|
};
|
|
|
|
#endif // UNITRENDERER_H
|