12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- /**
- * Triangles
- * Copyright (C) 2016 POSITIVE MENTAL ATTITUDE
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- #include "Triangle.hpp"
- #include <iostream>
- #include <cmath>
- Triangle::Triangle(): _texture(nullptr), _size(100.f)
- {
- _vertices.setPrimitiveType(sf::Triangles);
- _vertices.resize(3);
- _vertices[0].color = sf::Color(255, 255, 255, 255);
- _vertices[1].color = sf::Color(255, 255, 255, 255);
- _vertices[2].color = sf::Color(255, 255, 255, 255);
- setPosition(500.f, 300.f);
- redraw();
- }
- float Triangle::getSize()
- {
- return _size;
- }
- void Triangle::setSize(float size)
- {
- _size = size;
- redraw();
- }
- void Triangle::vertexFit()
- {
- if(_texture == nullptr)
- return;
- _vertices[0].texCoords = sf::Vector2f(_texture->getSize().x / 2, 0);
- _vertices[1].texCoords = sf::Vector2f(_texture->getSize().x, _texture->getSize().y);
- _vertices[2].texCoords = sf::Vector2f(0, _texture->getSize().y);
- }
- void Triangle::setTexture(sf::Texture& texture)
- {
- _texture = &texture;
- vertexFit();
- }
- void Triangle::setColor(sf::Color color)
- {
- _vertices[0].color = color;
- _vertices[1].color = color;
- _vertices[2].color = color;
- }
- void Triangle::setColor(unsigned r, unsigned g, unsigned b, unsigned a)
- {
- setColor(sf::Color(r, g, b, a));
- }
- void Triangle::redraw()
- {
- double degree = 3.14159265358 / 180.;
- _vertices[0].position = sf::Vector2f(0, -_size);
- _vertices[1].position = sf::Vector2f(std::sin(135.f * degree) * _size, -std::cos(135.f * degree) * _size);
- _vertices[2].position = sf::Vector2f(std::sin(225.f * degree) * _size, -std::cos(225.f * degree) * _size);
- }
- void Triangle::draw(sf::RenderTarget& target, sf::RenderStates states) const
- {
- states.transform *= getTransform();
- if(_texture != nullptr)
- states.texture = (_texture);
- target.draw(_vertices, states);
- }
|