#ifndef DRONE_CONTROLLER_HH #define DRONE_CONTROLLER_HH #include "drone.hh" #include "opengl_widget.hh" #include #include #include class DroneController : public QObject, public Painter { Q_OBJECT int framerate; int frame = 0; int duration = 0; QVector drones; QTimer timer; bool paused = true; bool draw_spheres = false; double sphere_radius = 0; QTimer sphere_timer; QMap>> collisions; bool draw_trajectories = false; bool draw_guides = false; QMap> speed_violations; double speed_limit = 0; static OpenGLMesh *sphere; static const unsigned char sphere_neutral[]; static bool collides(const Drone &a, const Drone &b, double radius); void drawTrajectory(OpenGLWidget *glw, const Drone &d) const; void drawGuide(OpenGLWidget *glw, const Drone &d) const; public: DroneController(const QJsonObject &json); int getDuration() const; void draw(OpenGLWidget *glw) const; signals: void frameChanged(int frame); void playing(); void pausing(); void collision(int idA, int idB, int frame); void speedViolation(int id, double speed, int frame); private slots: void step(); public slots: void play(); void pause(); void suspend(); void resume(); void seek(int frame); void computeCollisions(double sphere_radius); void computeSpeedingViolations(double speed); void displaySpheres(double sphere_radius); void setDrawTrajectories(bool enable); void setDrawGuides(bool enable); }; #endif