projects
/
supertux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Russian translation update from Constantin Baranov... from December.
[supertux.git]
/
src
/
badguy
/
treewillowisp.cpp
diff --git
a/src/badguy/treewillowisp.cpp
b/src/badguy/treewillowisp.cpp
index
c3d14e0
..
4a0c06b
100644
(file)
--- a/
src/badguy/treewillowisp.cpp
+++ b/
src/badguy/treewillowisp.cpp
@@
-24,11
+24,12
@@
#include "object/lantern.hpp"
static const std::string SOUNDFILE = "sounds/willowisp.wav";
#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",
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);
{
treepos_delta = pos;
sound_manager->preload(SOUNDFILE);
@@
-37,6
+38,8
@@
TreeWillOWisp::TreeWillOWisp(GhostTree* tree, const Vector& pos,
this->angle = 0;
this->speed = speed;
start_position = tree->get_pos() + treepos_delta;
this->angle = 0;
this->speed = speed;
start_position = tree->get_pos() + treepos_delta;
+
+ set_colgroup_active(COLGROUP_MOVING);
}
TreeWillOWisp::~TreeWillOWisp()
}
TreeWillOWisp::~TreeWillOWisp()
@@
-52,8
+55,6
@@
TreeWillOWisp::activate()
sound_source->set_gain(2.0);
sound_source->set_reference_distance(32);
sound_source->play();
sound_source->set_gain(2.0);
sound_source->set_reference_distance(32);
sound_source->play();
-
- set_group(COLGROUP_MOVING);
}
void
}
void
@@
-61,9
+62,15
@@
TreeWillOWisp::vanish()
{
mystate = STATE_VANISHING;
sprite->set_action("vanishing", 1);
{
mystate = STATE_VANISHING;
sprite->set_action("vanishing", 1);
- set_group(COLGROUP_DISABLED);
+ set_colgroup_active(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
}
HitResponse
@@
-85,14
+92,39
@@
TreeWillOWisp::collides(GameObject& other, const CollisionHit& ) {
}
void
}
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();
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;
}
return;
}
+ Vector newpos = get_pos() + dir * elapsed_time;
+ movement = newpos - get_pos();
+ return;
}
angle = fmodf(angle + elapsed_time * speed, (float) (2*M_PI));
}
angle = fmodf(angle + elapsed_time * speed, (float) (2*M_PI));