Fix for coverity #29409 - Use char 0 instead of NULL
[supertux.git] / src / badguy / willowisp.cpp
index 7549593..282595e 100644 (file)
@@ -23,6 +23,7 @@
 #include "object/player.hpp"
 #include "scripting/squirrel_util.hpp"
 #include "sprite/sprite.hpp"
+#include "sprite/sprite_manager.hpp"
 #include "supertux/game_session.hpp"
 #include "supertux/object_factory.hpp"
 #include "supertux/sector.hpp"
@@ -34,9 +35,9 @@ static const float VANISH_RANGE = 512; /**< at what distance to stop tracking an
 static const std::string SOUNDFILE = "sounds/willowisp.wav";
 
 WillOWisp::WillOWisp(const Reader& reader) :
-  BadGuy(reader, "images/creatures/willowisp/willowisp.sprite", LAYER_FLOATINGOBJECTS), 
-  mystate(STATE_IDLE), 
-  target_sector("main"), 
+  BadGuy(reader, "images/creatures/willowisp/willowisp.sprite", LAYER_FLOATINGOBJECTS),
+  mystate(STATE_IDLE),
+  target_sector("main"),
   target_spawnpoint("main"),
   hit_script(),
   sound_source(),
@@ -44,7 +45,8 @@ WillOWisp::WillOWisp(const Reader& reader) :
   walker(),
   flyspeed(),
   track_range(),
-  vanish_range()
+  vanish_range(),
+  lightsprite(SpriteManager::current()->create("images/objects/lightmap_light/lightmap_light-small.sprite"))
 {
   bool running = false;
   flyspeed     = FLYSPEED;
@@ -70,8 +72,11 @@ WillOWisp::WillOWisp(const Reader& reader) :
   }
 
   countMe = false;
-  sound_manager->preload(SOUNDFILE);
-  sound_manager->preload("sounds/warp.wav");
+  SoundManager::current()->preload(SOUNDFILE);
+  SoundManager::current()->preload("sounds/warp.wav");
+
+  lightsprite->set_blend(Blend(GL_SRC_ALPHA, GL_ONE));
+  lightsprite->set_color(Color(0.0f, 0.2f, 0.0f));
 
   sprite->set_action("idle");
 }
@@ -85,6 +90,7 @@ WillOWisp::draw(DrawingContext& context)
   context.set_target(DrawingContext::LIGHTMAP);
 
   sprite->draw(context, get_pos(), layer);
+  lightsprite->draw(context, get_bbox().get_middle(), 0);
 
   context.pop_target();
 }
@@ -112,8 +118,8 @@ WillOWisp::active_update(float elapsed_time)
       if (dist.norm() > vanish_range) {
         vanish();
       } else if (dist.norm() >= 1) {
-        Vector dir = dist.unit();
-        movement = dir * elapsed_time * flyspeed;
+        Vector dir_ = dist.unit();
+        movement = dir_ * elapsed_time * flyspeed;
       } else {
         /* We somehow landed right on top of the player without colliding.
          * Sit tight and avoid a division by zero. */
@@ -127,8 +133,8 @@ WillOWisp::active_update(float elapsed_time)
       }
 
     case STATE_VANISHING: {
-      Vector dir = dist.unit();
-      movement = dir * elapsed_time * flyspeed;
+      Vector dir_ = dist.unit();
+      movement = dir_ * elapsed_time * flyspeed;
       if(sprite->animation_done()) {
         remove_me();
       }
@@ -153,7 +159,7 @@ WillOWisp::active_update(float elapsed_time)
 void
 WillOWisp::activate()
 {
-  sound_source.reset(sound_manager->create_sound_source(SOUNDFILE));
+  sound_source = SoundManager::current()->create_sound_source(SOUNDFILE);
   sound_source->set_position(get_pos());
   sound_source->set_looping(true);
   sound_source->set_gain(2.0);
@@ -220,7 +226,7 @@ WillOWisp::collision_player(Player& player, const CollisionHit& ) {
   } else {
     GameSession::current()->respawn(target_sector, target_spawnpoint);
   }
-  sound_manager->play("sounds/warp.wav");
+  SoundManager::current()->play("sounds/warp.wav");
 
   return CONTINUE;
 }
@@ -277,21 +283,19 @@ WillOWisp::expose(HSQUIRRELVM vm, SQInteger table_idx)
   if (name.empty())
     return;
 
-  std::cout << "Expose me '" << name << "'\n";
-  scripting::WillOWisp* interface = static_cast<scripting::WillOWisp*> (this);
-  expose_object(vm, table_idx, interface, name);
+  std::cout << "[DEBUG] Expose me '" << name << "'\n";
+  scripting::WillOWisp* _this = static_cast<scripting::WillOWisp*> (this);
+  expose_object(vm, table_idx, _this, name);
 }
-  
+
 void
 WillOWisp::unexpose(HSQUIRRELVM vm, SQInteger table_idx)
 {
   if (name.empty())
     return;
 
-  std::cout << "UnExpose me '" << name << "'\n";
+  std::cout << "[DEBUG] UnExpose me '" << name << "'\n";
   scripting::unexpose_object(vm, table_idx, name);
 }
 
-IMPLEMENT_FACTORY(WillOWisp, "willowisp");
-
 /* EOF */