#include "object/lantern.hpp"
static const std::string SOUNDFILE = "sounds/willowisp.wav";
+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);
mystate = STATE_VANISHING;
sprite->set_action("vanishing", 1);
set_group(COLGROUP_DISABLED);
+}
- tree->willowisp_died(this);
+void
+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_VANISHING) {
if(sprite->animation_done()) {
remove_me();
+ tree->willowisp_died(this);
+ }
+ return;
+ }
+
+ if (mystate == STATE_SUCKED) {
+ Vector dir = suck_target - get_pos();
+ if(dir.norm() < 5) {
+ vanish();
return;
}
+ Vector newpos = get_pos() + dir * elapsed_time;
+ movement = newpos - get_pos();
+ return;
}
angle = fmodf(angle + elapsed_time * speed, (float) (2*M_PI));