#include "renderer.hpp" #include #include "glclasses.hpp" #include "game.hpp" #include "state/trace.hpp" #include "state/object.hpp" #include "state/missile.hpp" #include "state/player.hpp" #include "state/planet.hpp" #include "state/ship.hpp" #include "state/explosion.hpp" #include "particle_batch.hpp" #include "polygon_model.hpp" #include #include namespace endofthejedi { class RendererPolygon3d : public Renderer { public: void setup(); void render(const game::State *state) override; private: void renderPlanets(); void renderMissiles(); void renderShips(); void renderParticles(); void addModel(const std::string &filename, PolygonModel **dest); void addExplosionEffect(size_t id, const glm::vec2 &pos, size_t n, float duration); void advanceGraphicObjects(float dt); // shortcuts which use the lower versions glm::mat4 computeModelMatrix(const game::Planet *planet); glm::mat4 computeModelMatrix(const game::Missile *missile); glm::mat4 computeModelMatrix(const game::Ship *ship); // do the actual computation with these values glm::mat4 computeModelMatrix(const glm::vec2 &pos, float scale, float angle=0.0); void renderTraces(); private: // all models are also here (for easy reloading etc.) std::vector m_models; // and with a specific variable name here PolygonModel *m_missileModel; PolygonModel *m_planetModel; PolygonModel *m_shipModel; // for rendering everything Shader m_shader; // for accessing const game::State *m_state; std::list m_particles; // time value for last rendering cycle (-1 after setup/startup) float m_lastTime; }; }