From 5e6e96f4bd777ef362ce5ea7b4dc7d07ddb28d86 Mon Sep 17 00:00:00 2001 From: LMH Date: Tue, 9 Apr 2013 12:20:44 -1000 Subject: [PATCH] Invincibility sparkles glow in the dark --- data/levels/test/glow_effects.stl | 6 +++--- src/object/sprite_particle.cpp | 23 ++++++++++++++++++++++- src/object/sprite_particle.hpp | 3 +++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/data/levels/test/glow_effects.stl b/data/levels/test/glow_effects.stl index 64667de24..04a7a83ce 100755 --- a/data/levels/test/glow_effects.stl +++ b/data/levels/test/glow_effects.stl @@ -37,9 +37,9 @@ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; 192 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; 224 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; 256 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; 288 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; 320 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2817 0 1408 1388 0 2817 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; 352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 130 133 ; 288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 129 133 ; 320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2817 0 1408 1388 0 2817 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1408 1412 1412 ; 352 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; 384 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; 416 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; 448 diff --git a/src/object/sprite_particle.cpp b/src/object/sprite_particle.cpp index 514527ebf..71fa611c6 100644 --- a/src/object/sprite_particle.cpp +++ b/src/object/sprite_particle.cpp @@ -16,6 +16,8 @@ // 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/globals.hpp" #include "supertux/sector.hpp" @@ -29,7 +31,10 @@ SpriteParticle::SpriteParticle(std::string sprite_name, std::string action, position(position), velocity(velocity), acceleration(acceleration), - drawing_layer(drawing_layer) + 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); @@ -37,6 +42,9 @@ 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; } SpriteParticle::~SpriteParticle() @@ -77,6 +85,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 */ diff --git a/src/object/sprite_particle.hpp b/src/object/sprite_particle.hpp index 6a32e052e..4d607a6e3 100644 --- a/src/object/sprite_particle.hpp +++ b/src/object/sprite_particle.hpp @@ -40,6 +40,9 @@ private: Vector velocity; Vector acceleration; int drawing_layer; + Color light; + SpritePtr lightsprite; + bool glow; private: SpriteParticle(const SpriteParticle&); -- 2.11.0