#ifndef UNITRENDERER_H #define UNITRENDERER_H #include #include #include #include #include #include #include #include #include #include #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, TileRoad> &roads, const RoadConfigManager &roadConfigs, Matrix2D *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> &units, const std::vector &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