Applied sound pre-loading patch from mathnerd314 (#331)
[supertux.git] / src / badguy / root.cpp
index 6fa949e..5254687 100644 (file)
 
 #include "root.hpp"
 #include "sprite/sprite_manager.hpp"
+#include "timer.hpp"
 
 static const float SPEED_GROW = 256;
 static const float SPEED_SHRINK = 128;
+static const float HATCH_TIME = 0.75;
 
 Root::Root(const Vector& pos)
   : BadGuy(pos, "images/creatures/ghosttree/root.sprite", LAYER_TILES-1),
@@ -33,6 +35,7 @@ Root::Root(const Vector& pos)
   base_sprite->set_action("appearing", 1);
   base_sprite->set_animation_loops(1); // TODO: necessary because set_action ignores loops for default action
   physic.enable_gravity(false);
+  set_colgroup_active(COLGROUP_TOUCHABLE);
 }
 
 Root::~Root()
@@ -40,12 +43,6 @@ Root::~Root()
 }
 
 void
-Root::activate()
-{
-  set_group(COLGROUP_TOUCHABLE);
-}
-
-void
 Root::deactivate()
 {
   remove_me(); 
@@ -55,7 +52,13 @@ void
 Root::active_update(float elapsed_time)
 {
   if (mystate == STATE_APPEARING) {  
-    if (base_sprite->animation_done()) mystate = STATE_GROWING;
+    if (base_sprite->animation_done()) {
+      hatch_timer.start(HATCH_TIME);
+      mystate = STATE_HATCHING;
+    }
+  }
+  if (mystate == STATE_HATCHING) {
+    if (!hatch_timer.started()) mystate = STATE_GROWING;
   }
   else if (mystate == STATE_GROWING) {
     offset_y -= elapsed_time * SPEED_GROW;