Rolled back bomb to old behaviour, some bomb gfx tuning
[supertux.git] / src / badguy / willowisp.cpp
index 22ec617..b0fe7c6 100644 (file)
@@ -34,6 +34,7 @@ static const std::string SOUNDFILE = "sounds/willowisp.wav";
 WillOWisp::WillOWisp(const lisp::Lisp& reader)
   : BadGuy(reader, "images/creatures/willowisp/willowisp.sprite", LAYER_FLOATINGOBJECTS), mystate(STATE_IDLE), target_sector("main"), target_spawnpoint("main")
 {
+  bool running = false;
   flyspeed     = FLYSPEED;
   track_range  = TRACK_RANGE;
   vanish_range = VANISH_RANGE;
@@ -45,16 +46,22 @@ WillOWisp::WillOWisp(const lisp::Lisp& reader)
   reader.get("track-range", track_range);
   reader.get("vanish-range", vanish_range);
   reader.get("hit-script", hit_script);
+  reader.get("running", running);
 
   const lisp::Lisp* pathLisp = reader.get_lisp("path");
   if(pathLisp != NULL) {
     path.reset(new Path());
-       path->read(*pathLisp);
-       walker.reset(new PathWalker(path.get(), false));
+    path->read(*pathLisp);
+    walker.reset(new PathWalker(path.get(), running));
+    if(running)
+      mystate = STATE_PATHMOVING_TRACK;
   }
 
   countMe = false;
   sound_manager->preload(SOUNDFILE);
+  sound_manager->preload("sounds/warp.wav");
+
+  sprite->set_action("idle");
 }
 
 void
@@ -131,8 +138,6 @@ WillOWisp::active_update(float elapsed_time)
 void
 WillOWisp::activate()
 {
-  sprite->set_action("idle");
-
   sound_source.reset(sound_manager->create_sound_source(SOUNDFILE));
   sound_source->set_position(get_pos());
   sound_source->set_looping(true);
@@ -167,7 +172,7 @@ WillOWisp::vanish()
 {
   mystate = STATE_VANISHING;
   sprite->set_action("vanishing", 1);
-  set_group(COLGROUP_DISABLED);
+  set_colgroup_active(COLGROUP_DISABLED);
 }
 
 bool
@@ -211,11 +216,22 @@ WillOWisp::goto_node(int node_no)
   walker->goto_node(node_no);
   if(mystate != STATE_PATHMOVING && mystate != STATE_PATHMOVING_TRACK) {
     mystate = STATE_PATHMOVING;
-    walker->start_moving();
   }
 }
 
 void
+WillOWisp::start_moving()
+{
+  walker->start_moving();
+}
+
+void
+WillOWisp::stop_moving()
+{
+  walker->stop_moving();
+}
+
+void
 WillOWisp::set_state(const std::string& new_state)
 {
   if(new_state == "stopped") {
@@ -230,6 +246,8 @@ WillOWisp::set_state(const std::string& new_state)
     walker->start_moving();
   } else if(new_state == "normal") {
     mystate = STATE_IDLE;
+  } else if(new_state == "vanish") {
+    vanish();
   } else {
     std::ostringstream msg;
     msg << "Can't set unknown willowisp state '" << new_state << "', should "