-WalkingFlame::draw(DrawingContext& context)
-{
- //Draw the Sprite.
- sprite->draw(context, get_pos(), LAYER_OBJECTS);
- //Draw the light
- context.push_target();
- context.set_target(DrawingContext::LIGHTMAP);
- lightsprite->draw(context, get_bbox().get_middle(), 0);
- context.pop_target();
-}
-
-void
-WalkingFlame::freeze()
-{
- // attempting to freeze a flame causes it to go out
- kill_fall();
-}
-
-bool
-WalkingFlame::is_freezable() const
-{
- return true;
-}
-
-bool
-WalkingFlame::is_flammable() const
-{
- return false;
-}
-
-void
-WalkingFlame::kill_fall()
-{
- //TODO: get unique sound for ice-fire encounters
- sound_manager->play("sounds/fall.wav", get_pos());
- // throw a puff of smoke
- Vector ppos = bbox.get_middle();
- Vector pspeed = Vector(0, -150);
- Vector paccel = Vector(0,0);
- Sector::current()->add_object(new SpriteParticle("images/objects/particles/smoke.sprite", "default", ppos, ANCHOR_MIDDLE, pspeed, paccel, LAYER_BACKGROUNDTILES+2));
- // extinguish the flame
- sprite->set_action(dir == LEFT ? "extinguish-left" : "extinguish-right");
- physic.set_velocity_y(0);
- physic.set_acceleration_y(0);
- physic.enable_gravity(false);
- set_state(STATE_SQUISHED); // used to nullify any threat and remove
-
- // start dead-script
- run_dead_script();
-}
-
-/* The following handles a sleeping version */
-
-SWalkingFlame::SWalkingFlame(const Reader& reader) :
- WalkingBadguy(reader, "images/creatures/walkingflame/walkingflame.sprite", "left", "right"), state(STATE_SLEEPING),
- lightsprite(sprite_manager->create("images/objects/lightmap_light/lightmap_light-medium.sprite"))
-{
- walk_speed = WALKSPEED;
- max_drop_height = MAXDROPHEIGHT;
- lightsprite->set_blend(Blend(GL_SRC_ALPHA, GL_ONE));
- lightsprite->set_color(Color(1.0f, 0.9f, 0.8f));
-}
-
-void
-SWalkingFlame::initialize()
-{
- state = STATE_SLEEPING;
- physic.set_velocity_x(0);
- sprite->set_action(dir == LEFT ? "sleeping-left" : "sleeping-right");
-}
-
-void
-SWalkingFlame::collision_solid(const CollisionHit& hit)