X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Flantern.cpp;h=8812e4bf08d68b533a3a6f46374ab35346a4d82a;hb=20f50f690c18aefbedeeb43eda094c8cb70351a9;hp=a91b15ffc28f0e8a125e6bc99732b30081083bd5;hpb=9f9a92cd9d8433c6d4d63b0178fd038a95b9e1a1;p=supertux.git diff --git a/src/object/lantern.cpp b/src/object/lantern.cpp index a91b15ffc..8812e4bf0 100644 --- a/src/object/lantern.cpp +++ b/src/object/lantern.cpp @@ -36,6 +36,17 @@ Lantern::Lantern(const lisp::Lisp& reader) lightsprite = sprite_manager->create("images/objects/lightmap_light/lightmap_light.sprite"); lightsprite->set_blend(Blend(GL_SRC_ALPHA, GL_ONE)); updateColor(); + sound_manager->preload("sounds/willocatch.wav"); +} + +Lantern::Lantern(const Vector& pos) + : Rock(pos, "images/objects/lantern/lantern.sprite"), + lightcolor(0.0f, 0.0f, 0.0f) +{ + lightsprite = sprite_manager->create("images/objects/lightmap_light/lightmap_light.sprite"); + lightsprite->set_blend(Blend(GL_SRC_ALPHA, GL_ONE)); + updateColor(); + sound_manager->preload("sounds/willocatch.wav"); } Lantern::~Lantern() @@ -69,10 +80,11 @@ Lantern::draw(DrawingContext& context){ } HitResponse Lantern::collision(GameObject& other, const CollisionHit& hit) { - if ((grabbed) && lightcolor.red == 0 && lightcolor.green == 0 && lightcolor.blue == 0){ + if (is_open()) { WillOWisp* wow = dynamic_cast(&other); if (wow) { // collided with WillOWisp while grabbed and unlit + sound_manager->play("sounds/willocatch.wav"); lightcolor = Color(0,1,0); updateColor(); wow->vanish(); @@ -80,6 +92,7 @@ HitResponse Lantern::collision(GameObject& other, const CollisionHit& hit) { TreeWillOWisp* twow = dynamic_cast(&other); if (twow) { // collided with TreeWillOWisp while grabbed and unlit + sound_manager->play("sounds/willocatch.wav"); lightcolor = twow->get_color(); updateColor(); twow->vanish(); @@ -94,7 +107,7 @@ Lantern::grab(MovingObject& object, const Vector& pos, Direction dir) Rock::grab(object, pos, dir); // if lantern is not lit, draw it as opened - if(lightcolor.red == 0 && lightcolor.green == 0 && lightcolor.blue == 0){ + if (is_open()) { sprite->set_action("off-open"); } @@ -103,12 +116,18 @@ Lantern::grab(MovingObject& object, const Vector& pos, Direction dir) void Lantern::ungrab(MovingObject& object, Direction dir) { - Rock::ungrab(object, dir); - // if lantern is not lit, it was drawn as opened while grabbed. Now draw it as closed again - if(lightcolor.red == 0 && lightcolor.green == 0 && lightcolor.blue == 0){ + if (is_open()) { sprite->set_action("off"); } + + Rock::ungrab(object, dir); +} + +bool +Lantern::is_open() +{ + return ((grabbed) && lightcolor.red == 0 && lightcolor.green == 0 && lightcolor.blue == 0); } IMPLEMENT_FACTORY(Lantern, "lantern");