#include <SFML/Graphics/RenderTarget.hpp>
#include "VertexTab.hpp"
void va::VertexTab::draw(sf::RenderTarget& cible_, sf::RenderStates etat_) const
{
if (!vertexs.empty())
cible_.draw(&vertexs[0], static_cast<unsigned int>(vertexs.size()), primitiveType, etat_);
}
va::VertexTab::VertexTab():
vertexs(), primitiveType(sf::PrimitiveType::Points)
{ }
va::VertexTab::VertexTab(sf::PrimitiveType type_, unsigned int nbVertex_):
vertexs(nbVertex_), primitiveType(type_)
{ }
va::VertexTab::~VertexTab()
{ }
bool va::VertexTab::reserve(unsigned int nbVertex_)
{
sf::Vertex* temp(&vertexs[0]);
vertexs.reserve(nbVertex_);
if(&vertexs[0] == temp)
return false;
else
return true;
}
bool va::VertexTab::etendre(unsigned int nbVertex_)
{
sf::Vertex* temp(&vertexs[0]);
vertexs.resize(vertexs.size()+nbVertex_);
if(&vertexs[0] == temp)
return false;
else
return true;
}
unsigned int va::VertexTab::recup_nb_vertex() const
{ return static_cast<unsigned int>(vertexs.size()); }
sf::Vertex& va::VertexTab::operator [](unsigned int index_)
{ return vertexs[index_]; }
const sf::Vertex& va::VertexTab::operator [](unsigned int index_) const
{ return vertexs[index_]; }
void va::VertexTab::vider()
{ vertexs.clear(); }
bool va::VertexTab::redimensionner(unsigned int nbVertex_)
{
sf::Vertex* temp(&vertexs[0]);
vertexs.resize(nbVertex_);
if(&vertexs[0] == temp)
return false;
else
return true;
}
bool va::VertexTab::ajout(const sf::Vertex vertex_, long index_)
{
sf::Vertex* temp(&vertexs[0]);
if(index_ < 0)
vertexs.push_back(vertex_);
else
{
std::vector<sf::Vertex>::iterator it(vertexs.begin()+index_);
vertexs.insert(it,vertex_);
}
if(&vertexs[0] == temp)
return false;
else
return true;
}
bool va::VertexTab::ajouts(unsigned int nbVertexs_, long index_)
{
sf::Vertex* temp(&vertexs[0]);
if(index_ < 0)
return etendre(nbVertexs_);
else
{
std::vector<sf::Vertex>::iterator it(vertexs.begin()+index_);
vertexs.insert(it, nbVertexs_, sf::Vertex());
}
if(&vertexs[0] == temp)
return false;
else
return true;
}
bool va::VertexTab::retrait(unsigned int index_)
{
sf::Vertex* temp(&vertexs[0]);
if(index_ < vertexs.size())
{
vertexs.erase(vertexs.begin()+index_);
}
if(&vertexs[0] == temp)
return false;
else
return true;
}
bool va::VertexTab::retraits(unsigned int nbVertexs_, unsigned int index_)
{
sf::Vertex* temp(&vertexs[0]);
if(index_ < vertexs.size())
{
if(index_+nbVertexs_ < vertexs.size())
{ vertexs.erase(vertexs.begin()+index_, vertexs.begin()+index_+nbVertexs_); }
else
{ vertexs.erase(vertexs.begin()+index_, vertexs.end()); }
}
if(&vertexs[0] == temp)
return false;
else
return true;
}
void va::VertexTab::emplace_back(sf::Vector2f position_, sf::Vector2f texCoords_, sf::Color couleur_)
{ vertexs.emplace_back(position_, couleur_, texCoords_); }
void va::VertexTab::emplace_back(float positionX_, float positionY_, float texCoordsX_, float texCoordsY_, sf::Color couleur_)
{
sf::Vector2f temp1(positionX_, positionY_), temp2(texCoordsX_, texCoordsY_);
vertexs.emplace_back(temp1, couleur_, temp2);
}
void va::VertexTab::modif_PrimitiveType(sf::PrimitiveType type_)
{ primitiveType=type_; }
sf::PrimitiveType va::VertexTab::recup_PrimitiveType() const
{ return primitiveType; }
sf::FloatRect va::VertexTab::recup_cadre() const
{
if (!vertexs.empty()) //s'il y a des vertex,
{
float gauche = vertexs[0].position.x; //initialise les angles haut_gauche
float haut = vertexs[0].position.y; //et bas_droite,
float droite = vertexs[0].position.x; //a la position
float bas = vertexs[0].position.y; //du premier vertex.
for (std::size_t i = 1; i < vertexs.size(); ++i) //parcours les vertex
{
sf::Vector2f position = vertexs[i].position;
if (position.x < gauche) //vérifie s'il y a des vertex qui sortent du cadre
gauche = position.x; // ****
else if (position.x > droite) // ****
droite = position.x; // ****
// ****
if (position.y < haut) // ****
haut = position.y; // ****
else if (position.y > bas) // ****
bas = position.y; //et met le cadre a jour en fonction
}
return sf::FloatRect(gauche, haut, droite-gauche, bas-haut); //et renvoit le cadre.
}
else //sinon,
{ return sf::FloatRect(); } //renvoie un cadre vierge.
}