Skip to content

Commit

Permalink
Strawboxes glow when burning in the dark
Browse files Browse the repository at this point in the history
  • Loading branch information
LMH0013 committed Apr 16, 2013
1 parent 5e6e96f commit 6ee6c02
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 2 deletions.
11 changes: 10 additions & 1 deletion data/levels/test/glow_effects.stl
Expand Up @@ -21,7 +21,7 @@
(haywire (x 928 )(y 736 ))
(flame (x 576 )(y 480 )(speed 0.2))
(iceflame (x 736 )(y 480 )(speed 0.2))
(ghostflame (x 656 )(y 160 ))
(ghostflame (x 656 )(y 96 ))
(kugelblitz (x 48 )(y 576 ))

(tilemap (name "Interactive" )
Expand Down Expand Up @@ -103,4 +103,13 @@

(willowisp (x 48 )(y 544)(spawnpoint "top" ))
(willowisp (x 1232 )(y 544)(spawnpoint "top" ))

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

(weak_block (x 0 )(y 352 )(linked #f ))
(weak_block (x 32 )(y 352 ))
(weak_block (x 64 )(y 352 ))
(weak_block (x 96 )(y 352 ))
(weak_block (x 128 )(y 352 ))
(weak_block (x 160 )(y 352 ))
))
36 changes: 35 additions & 1 deletion src/object/weak_block.cpp
Expand Up @@ -17,6 +17,7 @@

#include "object/weak_block.hpp"

#include "math/random_generator.hpp"
#include "object/bullet.hpp"
#include "object/explosion.hpp"
#include "supertux/object_factory.hpp"
Expand All @@ -29,7 +30,9 @@

WeakBlock::WeakBlock(const Reader& lisp)
: MovingSprite(lisp, "images/objects/weak_block/strawbox.sprite", LAYER_TILES, COLGROUP_STATIC), state(STATE_NORMAL),
linked(true)
linked(true),
light(0.0f,0.0f,0.0f),
lightsprite(sprite_manager->create("images/objects/lightmap_light/lightmap_light-small.sprite"))
{
sprite->set_action("normal");
//Check if this weakblock destroys adjacent weakblocks
Expand All @@ -40,6 +43,8 @@ linked(true)
sprite->set_action("normal");
}
}
lightsprite->set_blend(Blend(GL_SRC_ALPHA, GL_ONE));
lightsprite->set_color(Color(0.3f, 0.2f, 0.1f));
}

HitResponse
Expand Down Expand Up @@ -107,11 +112,22 @@ WeakBlock::update(float )
break;

case STATE_BURNING:
// cause burn light to flicker randomly
if (linked) {
if(gameRandom.rand(10) >= 7) {
lightsprite->set_color(Color(0.2f + gameRandom.rand(20)/100.0f, 0.1f + gameRandom.rand(20)/100.0f, 0.1f));
} else
lightsprite->set_color(Color(0.3f, 0.2f, 0.1f));
}

if (sprite->animation_done()) {
state = STATE_DISINTEGRATING;
sprite->set_action("disintegrating", 1);
spreadHit();
set_group(COLGROUP_DISABLED);
lightsprite = sprite_manager->create("images/objects/lightmap_light/lightmap_light-tiny.sprite");
lightsprite->set_blend(Blend(GL_SRC_ALPHA, GL_ONE));
lightsprite->set_color(Color(0.3f, 0.2f, 0.1f));
}
break;

Expand All @@ -125,6 +141,24 @@ WeakBlock::update(float )
}
}

void
WeakBlock::draw(DrawingContext& context)
{
//Draw the Sprite.
sprite->draw(context, get_pos(), LAYER_OBJECTS);
//Draw the light if burning and dark
if(linked && (state != STATE_NORMAL)){
context.get_light( get_bbox().get_middle(), &light );
if (light.red + light.green + light.blue < 3.0){
context.push_target();
context.set_target(DrawingContext::LIGHTMAP);
sprite->draw(context, get_pos(), LAYER_OBJECTS);
lightsprite->draw(context, get_bbox().get_middle(), 0);
context.pop_target();
}
}
}

void
WeakBlock::startBurning()
{
Expand Down
4 changes: 4 additions & 0 deletions src/object/weak_block.hpp
Expand Up @@ -33,6 +33,7 @@ class WeakBlock : public MovingSprite

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

protected:
/**
Expand All @@ -56,6 +57,9 @@ class WeakBlock : public MovingSprite
bool linked;
virtual HitResponse collision_bullet(Bullet& bullet, const CollisionHit& hit);

Color light;
SpritePtr lightsprite;

};

#endif
Expand Down

0 comments on commit 6ee6c02

Please sign in to comment.