Graphics for powerups: airflower and earthflower
[supertux.git] / src / object / powerup.cpp
index 53fa407..f376d74 100644 (file)
@@ -34,14 +34,14 @@ PowerUp::PowerUp(const Reader& lisp) :
   script(),
   no_physics(),
   light(0.0f,0.0f,0.0f),
-  lightsprite(sprite_manager->create("images/objects/lightmap_light/lightmap_light-small.sprite"))
+  lightsprite(SpriteManager::current()->create("images/objects/lightmap_light/lightmap_light-small.sprite"))
 {
   lisp.get("script", script);
   no_physics = false;
   lisp.get("disable-physics", no_physics);
   physic.enable_gravity(true);
-  sound_manager->preload("sounds/grow.ogg");
-  sound_manager->preload("sounds/fire-flower.wav");
+  SoundManager::current()->preload("sounds/grow.ogg");
+  SoundManager::current()->preload("sounds/fire-flower.wav");
   //set default light for glow effect for standard sprites
   lightsprite->set_blend(Blend(GL_SRC_ALPHA, GL_ONE));
   lightsprite->set_color(Color(0.0f, 0.0f, 0.0f));
@@ -51,23 +51,27 @@ PowerUp::PowerUp(const Reader& lisp) :
     lightsprite->set_color(Color(0.3f, 0.0f, 0.0f));
   } else if (sprite_name == "images/powerups/iceflower/iceflower.sprite") {
     lightsprite->set_color(Color(0.0f, 0.1f, 0.2f));
+  } else if (sprite_name == "images/powerups/airflower/airflower.sprite") {
+    lightsprite->set_color(Color(0.15f, 0.0f, 0.15f));
+  } else if (sprite_name == "images/powerups/earthflower/earthflower.sprite") {
+    lightsprite->set_color(Color(0.0f, 0.3f, 0.0f));
   } else if (sprite_name == "images/powerups/star/star.sprite") {
     lightsprite->set_color(Color(0.4f, 0.4f, 0.4f));
   }
 
 }
 
-PowerUp::PowerUp(const Vector& pos, const std::string& sprite_name) :
-  MovingSprite(pos, sprite_name, LAYER_OBJECTS, COLGROUP_MOVING),
+PowerUp::PowerUp(const Vector& pos, const std::string& sprite_name_) :
+  MovingSprite(pos, sprite_name_, LAYER_OBJECTS, COLGROUP_MOVING),
   physic(),
   script(),
   no_physics(false),
   light(0.0f,0.0f,0.0f),
-  lightsprite(sprite_manager->create("images/objects/lightmap_light/lightmap_light-small.sprite"))
+  lightsprite(SpriteManager::current()->create("images/objects/lightmap_light/lightmap_light-small.sprite"))
 {
   physic.enable_gravity(true);
-  sound_manager->preload("sounds/grow.ogg");
-  sound_manager->preload("sounds/fire-flower.wav");
+  SoundManager::current()->preload("sounds/grow.ogg");
+  SoundManager::current()->preload("sounds/fire-flower.wav");
   //set default light for glow effect for standard sprites
   lightsprite->set_blend(Blend(GL_SRC_ALPHA, GL_ONE));
   lightsprite->set_color(Color(0.0f, 0.0f, 0.0f));
@@ -77,6 +81,10 @@ PowerUp::PowerUp(const Vector& pos, const std::string& sprite_name) :
     lightsprite->set_color(Color(0.3f, 0.0f, 0.0f));
   } else if (sprite_name == "images/powerups/iceflower/iceflower.sprite") {
     lightsprite->set_color(Color(0.0f, 0.1f, 0.2f));
+  } else if (sprite_name == "images/powerups/airflower/airflower.sprite") {
+    lightsprite->set_color(Color(0.15f, 0.0f, 0.15f));
+  } else if (sprite_name == "images/powerups/earthflower/earthflower.sprite") {
+    lightsprite->set_color(Color(0.0f, 0.3f, 0.0f));
   } else if (sprite_name == "images/powerups/star/star.sprite") {
     lightsprite->set_color(Color(0.4f, 0.4f, 0.4f));
   }
@@ -111,15 +119,23 @@ PowerUp::collision(GameObject& other, const CollisionHit&)
   if (sprite_name == "images/powerups/egg/egg.sprite") {
     if(!player->add_bonus(GROWUP_BONUS, true))
       return FORCE_MOVE;
-    sound_manager->play("sounds/grow.ogg");
+    SoundManager::current()->play("sounds/grow.ogg");
   } else if (sprite_name == "images/powerups/fireflower/fireflower.sprite") {
     if(!player->add_bonus(FIRE_BONUS, true))
       return FORCE_MOVE;
-    sound_manager->play("sounds/fire-flower.wav");
+    SoundManager::current()->play("sounds/fire-flower.wav");
   } else if (sprite_name == "images/powerups/iceflower/iceflower.sprite") {
     if(!player->add_bonus(ICE_BONUS, true))
       return FORCE_MOVE;
-    sound_manager->play("sounds/fire-flower.wav");
+    SoundManager::current()->play("sounds/fire-flower.wav");
+  } else if (sprite_name == "images/powerups/airflower/airflower.sprite") {
+    if(!player->add_bonus(AIR_BONUS, true))
+      return FORCE_MOVE;
+    SoundManager::current()->play("sounds/fire-flower.wav");
+  } else if (sprite_name == "images/powerups/earthflower/earthflower.sprite") {
+    if(!player->add_bonus(EARTH_BONUS, true))
+      return FORCE_MOVE;
+    SoundManager::current()->play("sounds/fire-flower.wav");
   } else if (sprite_name == "images/powerups/star/star.sprite") {
     player->make_invincible();
   } else if (sprite_name == "images/powerups/1up/1up.sprite") {
@@ -151,11 +167,13 @@ PowerUp::update(float elapsed_time)
           Vector ppos = Vector(px, py);
           Vector pspeed = Vector(0, 0);
           Vector paccel = Vector(0, 0);
-          Sector::current()->add_object(new SpriteParticle("images/objects/particles/sparkle.sprite",
-                                                          // draw bright sparkles when very close to Tux, dark sparkles when slightly further
-                                                          (disp_x*disp_x + disp_y*disp_y <= 128*128) ?
-                                                          // make every other a longer sparkle to make trail a bit fuzzy
-                                                          (size_t(game_time*20)%2) ? "small" : "medium" : "dark", ppos, ANCHOR_MIDDLE, pspeed, paccel, LAYER_OBJECTS+1+5));
+          Sector::current()->add_object(std::make_shared<SpriteParticle>(
+                                          "images/objects/particles/sparkle.sprite",
+                                          // draw bright sparkles when very close to Tux, dark sparkles when slightly further
+                                          (disp_x*disp_x + disp_y*disp_y <= 128*128) ?
+                                          // make every other a longer sparkle to make trail a bit fuzzy
+                                          (size_t(game_time*20)%2) ? "small" : "medium" : "dark",
+                                          ppos, ANCHOR_MIDDLE, pspeed, paccel, LAYER_OBJECTS+1+5));
         }
       }
     }