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);
this->angle = 0;
this->speed = speed;
start_position = tree->get_pos() + treepos_delta;
+
+ set_colgroup_active(COLGROUP_MOVING);
}
TreeWillOWisp::~TreeWillOWisp()
sound_source->set_gain(2.0);
sound_source->set_reference_distance(32);
sound_source->play();
-
- set_group(COLGROUP_MOVING);
}
void
{
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
}
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
}
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;