X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fbadguy%2Ftreewillowisp.cpp;h=4a0c06bce183a90832e3ba42d5ca6e3b61a6780c;hb=13c84268f16872f9b442251c4175a3a1a7a7899a;hp=c143406e8d2361b9e49681f30f7e32f7565c5dcc;hpb=6034c8ffca02d76e6e705b407055e985b5cb1de0;p=supertux.git diff --git a/src/badguy/treewillowisp.cpp b/src/badguy/treewillowisp.cpp index c143406e8..4a0c06bce 100644 --- a/src/badguy/treewillowisp.cpp +++ b/src/badguy/treewillowisp.cpp @@ -29,7 +29,7 @@ static const float SUCKSPEED = 25; TreeWillOWisp::TreeWillOWisp(GhostTree* tree, const Vector& pos, float radius, float speed) : BadGuy(Vector(0, 0), "images/creatures/willowisp/willowisp.sprite", - LAYER_OBJECTS - 20), mystate(STATE_DEFAULT), tree(tree) + LAYER_OBJECTS - 20), was_sucked(false), mystate(STATE_DEFAULT), tree(tree) { treepos_delta = pos; sound_manager->preload(SOUNDFILE); @@ -38,6 +38,8 @@ TreeWillOWisp::TreeWillOWisp(GhostTree* tree, const Vector& pos, this->angle = 0; this->speed = speed; start_position = tree->get_pos() + treepos_delta; + + set_colgroup_active(COLGROUP_MOVING); } TreeWillOWisp::~TreeWillOWisp() @@ -53,8 +55,6 @@ TreeWillOWisp::activate() sound_source->set_gain(2.0); sound_source->set_reference_distance(32); sound_source->play(); - - set_group(COLGROUP_MOVING); } void @@ -62,13 +62,15 @@ TreeWillOWisp::vanish() { mystate = STATE_VANISHING; sprite->set_action("vanishing", 1); - set_group(COLGROUP_DISABLED); + set_colgroup_active(COLGROUP_DISABLED); } void -TreeWillOWisp::start_sucking() +TreeWillOWisp::start_sucking(Vector suck_target) { mystate = STATE_SUCKED; + this->suck_target = suck_target; + was_sucked = true; } HitResponse @@ -90,6 +92,19 @@ TreeWillOWisp::collides(GameObject& other, const CollisionHit& ) { } void +TreeWillOWisp::draw(DrawingContext& context) +{ + sprite->draw(context, get_pos(), layer); + + context.push_target(); + context.set_target(DrawingContext::LIGHTMAP); + + sprite->draw(context, get_pos(), layer); + + context.pop_target(); +} + +void TreeWillOWisp::active_update(float elapsed_time) { // remove TreeWillOWisp if it has completely vanished @@ -102,7 +117,7 @@ TreeWillOWisp::active_update(float elapsed_time) } if (mystate == STATE_SUCKED) { - Vector dir = tree->get_bbox().get_middle() - get_pos(); + Vector dir = suck_target - get_pos(); if(dir.norm() < 5) { vanish(); return;