55 lines
1.3 KiB
C++
55 lines
1.3 KiB
C++
#ifndef MAPSCENE_H
|
|
#define MAPSCENE_H
|
|
|
|
#include "map.h"
|
|
#include <scene.h>
|
|
#include <glm/vec2.hpp>
|
|
#include <glm/vec3.hpp>
|
|
#include <QMutex>
|
|
#include <map>
|
|
|
|
struct MapScene : public Map, public BasicScene
|
|
{
|
|
public:
|
|
MapScene(int n, int w, int h=0) : Map(n, w, h), m_teamColors(new TeamColor[n]),m_vao(0),m_vbo(0) {}
|
|
|
|
~MapScene();
|
|
|
|
/**
|
|
* @brief updatePixel marks a pixel coordinate as changed,
|
|
* duplicates are removed and the pixel will be updated
|
|
* only once on the next draw with the latest map pixel information.
|
|
*/
|
|
void updatePixel(const Coord &c);
|
|
void setColors(int teamId, const glm::vec3 &spawnColor, const glm::vec3 &dudeColor);
|
|
void initDraw();
|
|
bool updateNecessary() { return !m_pixels.empty(); }
|
|
void draw();
|
|
glm::vec3 getColor(const Pixel &px) const;
|
|
|
|
private:
|
|
struct TeamColor
|
|
{
|
|
glm::vec3 spawn;
|
|
glm::vec3 dude;
|
|
|
|
TeamColor() : spawn(glm::vec3(0, 0, 1)), dude(glm::vec3(0, 0, 0.8f)) {}
|
|
};
|
|
|
|
TeamColor* m_teamColors;
|
|
unsigned int m_vao;
|
|
unsigned int m_vbo;
|
|
QMutex m_mutex;
|
|
|
|
struct Pix
|
|
{
|
|
glm::vec2 pos;
|
|
glm::vec3 color;
|
|
Pix(glm::vec2 p, glm::vec3 c) : pos(p), color(c) {}
|
|
};
|
|
std::vector<Pix> m_pixels;
|
|
std::map<Coord, int> m_updatedCoordMap;
|
|
};
|
|
|
|
#endif // MAPSCENE_H
|