X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fobject%2Fsprite_particle.cpp;h=0f72a6b57ff658d59e2ddcb625f8eeccdae44156;hb=b4ffa23e2beb6d10f8f5f2fccd4b41fb3e344759;hp=07d8732931f04cfad8aabe61e34e26c9290c5a33;hpb=84abfaeb33c5bf8dac0cfd9499d9d4c3e7d39881;p=supertux.git diff --git a/src/object/sprite_particle.cpp b/src/object/sprite_particle.cpp index 07d873293..0f72a6b57 100644 --- a/src/object/sprite_particle.cpp +++ b/src/object/sprite_particle.cpp @@ -16,18 +16,25 @@ // along with this program. If not, see . #include "object/camera.hpp" +#include "sprite/sprite.hpp" +#include "sprite/sprite_manager.hpp" #include "object/sprite_particle.hpp" -#include "supertux/main.hpp" +#include "supertux/globals.hpp" #include "supertux/sector.hpp" -SpriteParticle::SpriteParticle(std::string sprite_name, std::string action, - Vector position, AnchorPoint anchor, Vector velocity, Vector acceleration, +#include + +SpriteParticle::SpriteParticle(std::string sprite_name, std::string action, + Vector position, AnchorPoint anchor, Vector velocity, Vector acceleration, int drawing_layer) : sprite(), - position(position), - velocity(velocity), - acceleration(acceleration), - drawing_layer(drawing_layer) + position(position), + velocity(velocity), + acceleration(acceleration), + drawing_layer(drawing_layer), + light(0.0f,0.0f,0.0f), + lightsprite(sprite_manager->create("images/objects/lightmap_light/lightmap_light-tiny.sprite")), + glow(false) { sprite = sprite_manager->create(sprite_name); if (!sprite.get()) throw std::runtime_error("Could not load sprite "+sprite_name); @@ -35,6 +42,13 @@ SpriteParticle::SpriteParticle(std::string sprite_name, std::string action, sprite->set_animation_loops(1); //TODO: this is necessary because set_action will not set "loops" when "action" is the default action this->position -= get_anchor_pos(sprite->get_current_hitbox(), anchor); + + if(sprite_name=="images/objects/particles/sparkle.sprite") + glow = true; + if(action=="dark") { + lightsprite->set_blend(Blend(GL_SRC_ALPHA, GL_ONE)); + lightsprite->set_color(Color(0.1f, 0.1f, 0.1f)); + } } SpriteParticle::~SpriteParticle() @@ -75,6 +89,19 @@ void SpriteParticle::draw(DrawingContext& context) { sprite->draw(context, position, drawing_layer); + + //Sparkles glow in the dark + if(glow){ + context.get_light(position, &light ); + if (light.red + light.green + light.blue < 3.0){ + context.push_target(); + context.set_target(DrawingContext::LIGHTMAP); + sprite->draw(context, position, drawing_layer); + lightsprite->draw(context, position + Vector(12,12), 0); + context.pop_target(); + } + } + } /* EOF */