X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fobject%2Fcoin.cpp;h=c0910183ede408b8fd9e3bb470d47609fc8f81cd;hb=e3bb6e46812f108f093e9ad0751a945c34b18cd3;hp=7bdded489271b5555d745cd38186ca05b68dada7;hpb=6fe1f3519eecbbb75eca97c45a6697eee36b2442;p=supertux.git diff --git a/src/object/coin.cpp b/src/object/coin.cpp index 7bdded489..c0910183e 100644 --- a/src/object/coin.cpp +++ b/src/object/coin.cpp @@ -5,7 +5,11 @@ #include "video/drawing_context.h" #include "special/sprite_manager.h" #include "player.h" +#include "sector.h" #include "scene.h" +#include "gameobjs.h" +#include "statistics.h" +#include "object_factory.h" Coin::Coin(const Vector& pos) { @@ -14,6 +18,14 @@ Coin::Coin(const Vector& pos) sprite = sprite_manager->create("coin"); } +Coin::Coin(const lisp::Lisp& reader) +{ + reader.get("x", bbox.p1.x); + reader.get("y", bbox.p1.y); + bbox.set_size(32, 32); + sprite = sprite_manager->create("coin"); +} + Coin::~Coin() { delete sprite; @@ -30,6 +42,15 @@ Coin::draw(DrawingContext& context) sprite->draw(context, get_pos(), LAYER_TILES); } +void +Coin::collect() +{ + Sector::current()->player->get_status().incCoins(); + Sector::current()->add_object(new BouncyCoin(get_pos())); + global_stats.add_points(COINS_COLLECTED_STAT, 1); + remove_me(); +} + HitResponse Coin::collision(GameObject& other, const CollisionHit& ) { @@ -37,8 +58,8 @@ Coin::collision(GameObject& other, const CollisionHit& ) if(player == 0) return ABORT_MOVE; - player->get_status().incCoins(); - remove_me(); + collect(); return ABORT_MOVE; } +IMPLEMENT_FACTORY(Coin, "coin");