(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" )
(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 ))
))
#include "object/weak_block.hpp"
+#include "math/random_generator.hpp"
#include "object/bullet.hpp"
#include "object/explosion.hpp"
#include "supertux/object_factory.hpp"
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
sprite->set_action("normal");
}
}
+ lightsprite->set_blend(Blend(GL_SRC_ALPHA, GL_ONE));
+ lightsprite->set_color(Color(0.3f, 0.2f, 0.1f));
}
HitResponse
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;
}
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()
{
if (state != STATE_NORMAL) return;