/** * 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 . */ /** * This is based on a wiki entry * https://github.com/SFML/SFML/wiki/Source:-Particle-System */ #pragma once #include #include #include class ParticleSystem: public sf::Drawable { public: ParticleSystem(int width, int height); ~ParticleSystem(); void fuel(int particles, float angle); void update(sf::Time delta); void render(); void clear(); void enable(bool enabled) { _enabled = enabled; } const bool isEnabled() const { return _enabled; } void loadColors(const sf::Image& image) { _colors.clear(); for(unsigned i = 0; i < image.getSize().x; ++i) for(unsigned j = 0; j < image.getSize().y; ++j) { sf::Color color = image.getPixel(i, j); if(color.r > 0 || color.g > 0 || color.b > 0) _colors.emplace_back(color.r, color.g, color.b, 255); } } void setPosition(const sf::Vector2f position) { _sprite.setPosition(position - _origin); } void setPosition(float x, float y) { setPosition(sf::Vector2f(x, y)); } void setOrigin(const sf::Vector2f origin) { _origin = origin; } void setOrigin(float x, float y) { setOrigin(sf::Vector2f(x, y)); } void setParticleSpeed(float particleSpeed) { _particleSpeed = particleSpeed; } void setDissolutionRate(float dissolutionRate) { _dissolutionRate = dissolutionRate; } const sf::Sprite& getSprite() const { return _sprite; } private: struct Particle { sf::Vector2f pos; sf::Vector2f vel; sf::Color color; float transparency; }; virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const; sf::Vector2f _origin; sf::Clock _clock; sf::Image _image; sf::Texture _texture; sf::Sprite _sprite; float _particleSpeed; float _dissolutionRate; std::vector _particles; std::vector _colors; bool _enabled; };