Skip to content

Commit

Permalink
Powerups placed outside of bonus blocks glow if default sprites are used
Browse files Browse the repository at this point in the history
  • Loading branch information
LMH0013 committed Apr 16, 2013
1 parent 6ee6c02 commit e1dc012
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 1 deletion.
1 change: 1 addition & 0 deletions data/levels/test/glow_effects.stl
Expand Up @@ -104,6 +104,7 @@
(willowisp (x 48 )(y 544)(spawnpoint "top" ))
(willowisp (x 1232 )(y 544)(spawnpoint "top" ))

(powerup (x 0 )(y 320 )(sprite "images/powerups/iceflower/iceflower.sprite" ))
(powerup (x 0 )(y 480 )(sprite "images/powerups/fireflower/fireflower.sprite" ))

(weak_block (x 0 )(y 352 )(linked #f ))
Expand Down
40 changes: 39 additions & 1 deletion src/object/powerup.cpp
Expand Up @@ -19,6 +19,8 @@
#include "object/powerup.hpp"
#include "supertux/object_factory.hpp"
#include "supertux/sector.hpp"
#include "sprite/sprite.hpp"
#include "sprite/sprite_manager.hpp"
#include "util/reader.hpp"

#include <sstream>
Expand All @@ -27,14 +29,29 @@ PowerUp::PowerUp(const Reader& lisp) :
MovingSprite(lisp, LAYER_OBJECTS, COLGROUP_MOVING),
physic(),
script(),
no_physics()
no_physics(),
light(0.0f,0.0f,0.0f),
lightsprite(sprite_manager->create("images/objects/lightmap_light/lightmap_light-small.sprite"))
{
lisp.get("script", script);
no_physics = false;
lisp.get("disable-physics", no_physics);
physic.enable_gravity(true);
sound_manager->preload("sounds/grow.ogg");
sound_manager->preload("sounds/fire-flower.wav");
//set default light for glow effect for standard sprites
lightsprite->set_blend(Blend(GL_SRC_ALPHA, GL_ONE));
lightsprite->set_color(Color(0.0f, 0.0f, 0.0f));
if (sprite_name == "images/powerups/egg/egg.sprite") {
lightsprite->set_color(Color(0.2f, 0.2f, 0.0f));
} else if (sprite_name == "images/powerups/fireflower/fireflower.sprite") {
lightsprite->set_color(Color(0.3f, 0.0f, 0.0f));
} else if (sprite_name == "images/powerups/iceflower/iceflower.sprite") {
lightsprite->set_color(Color(0.0f, 0.1f, 0.2f));
} else if (sprite_name == "images/powerups/star/star.sprite") {
lightsprite->set_color(Color(0.4f, 0.4f, 0.4f));
}

}

void
Expand Down Expand Up @@ -71,6 +88,10 @@ PowerUp::collision(GameObject& other, const CollisionHit&)
if(!player->add_bonus(FIRE_BONUS, true))
return FORCE_MOVE;
sound_manager->play("sounds/fire-flower.wav");
} else if (sprite_name == "images/powerups/iceflower/iceflower.sprite") {
if(!player->add_bonus(ICE_BONUS, true))
return FORCE_MOVE;
sound_manager->play("sounds/fire-flower.wav");
} else if (sprite_name == "images/powerups/star/star.sprite") {
player->make_invincible();
} else if (sprite_name == "images/powerups/1up/1up.sprite") {
Expand All @@ -88,4 +109,21 @@ PowerUp::update(float elapsed_time)
movement = physic.get_movement(elapsed_time);
}

void
PowerUp::draw(DrawingContext& context){
//Draw the Sprite.
sprite->draw(context, get_pos(), layer);
//Draw light when dark for defaults
context.get_light( get_bbox().get_middle(), &light );
if (light.red + light.green + light.blue < 3.0){
//Stars are brighter
if (sprite_name == "images/powerups/star/star.sprite") {
sprite->draw(context, get_pos(), layer);
}
context.push_target();
context.set_target(DrawingContext::LIGHTMAP);
lightsprite->draw(context, get_bbox().get_middle(), 0);
context.pop_target();
}
}
/* EOF */
3 changes: 3 additions & 0 deletions src/object/powerup.hpp
Expand Up @@ -25,13 +25,16 @@ class PowerUp : public MovingSprite
PowerUp(const Reader& lisp);

virtual void update(float elapsed_time);
virtual void draw(DrawingContext& context);
virtual void collision_solid(const CollisionHit& hit);
virtual HitResponse collision(GameObject& other, const CollisionHit& hit);

private:
Physic physic;
std::string script;
bool no_physics;
Color light;
SpritePtr lightsprite;
};

#endif
Expand Down
1 change: 1 addition & 0 deletions src/object/star.cpp
Expand Up @@ -48,6 +48,7 @@ Star::draw(DrawingContext& context){
//Draw the light when dark
context.get_light( get_bbox().get_middle(), &light );
if (light.red + light.green + light.blue < 3.0){
MovingSprite::draw(context);
context.push_target();
context.set_target(DrawingContext::LIGHTMAP);
lightsprite->draw(context, get_bbox().get_middle(), 0);
Expand Down

0 comments on commit e1dc012

Please sign in to comment.