#include "supertux/object_factory.hpp"
namespace {
-const float VERTICAL_SPEED = -450; /**< y-speed when jumping */
-const float HORIZONTAL_SPEED = 220; /**< x-speed when jumping */
const float MIN_RECOVER_TIME = 0.1f; /**< minimum time to stand still before starting a (new) jump */
const float MAX_RECOVER_TIME = 1.0f; /**< maximum time to stand still before starting a (new) jump */
-static const std::string HOP_SOUND = "sounds/hop.ogg";
+static const std::string SKULLYHOP_SOUND = "sounds/hop.ogg";
}
SkullyHop::SkullyHop(const Reader& reader) :
recover_timer(),
state()
{
- sound_manager->preload( HOP_SOUND );
+ sound_manager->preload( SKULLYHOP_SOUND );
}
SkullyHop::SkullyHop(const Vector& pos, Direction d) :
recover_timer(),
state()
{
- sound_manager->preload( HOP_SOUND );
+ sound_manager->preload( SKULLYHOP_SOUND );
}
void
physic.set_velocity_y(0);
sprite->set_action(dir == LEFT ? "standing-left" : "standing-right");
- float recover_time = systemRandom.randf(MIN_RECOVER_TIME,MAX_RECOVER_TIME);
+ float recover_time = gameRandom.randf(MIN_RECOVER_TIME,MAX_RECOVER_TIME);
recover_timer.start(recover_time);
} else
if (newState == CHARGING) {
} else
if (newState == JUMPING) {
sprite->set_action(dir == LEFT ? "jumping-left" : "jumping-right");
+const float HORIZONTAL_SPEED = 220; /**< x-speed when jumping */
physic.set_velocity_x(dir == LEFT ? -HORIZONTAL_SPEED : HORIZONTAL_SPEED);
+const float VERTICAL_SPEED = -450; /**< y-speed when jumping */
physic.set_velocity_y(VERTICAL_SPEED);
- sound_manager->play( HOP_SOUND, get_pos());
+ sound_manager->play( SKULLYHOP_SOUND, get_pos());
}
state = newState;
bool
SkullyHop::collision_squished(GameObject& object)
{
+ if (frozen)
+ return BadGuy::collision_squished(object);
+
sprite->set_action(dir == LEFT ? "squished-left" : "squished-right");
kill_squished(object);
return true;
void
SkullyHop::collision_solid(const CollisionHit& hit)
{
+ if (frozen)
+ {
+ BadGuy::collision_solid(hit);
+ return;
+ }
+
// just default behaviour (i.e. stop at floor/walls) when squished
if (BadGuy::get_state() == STATE_SQUISHED) {
BadGuy::collision_solid(hit);
{
BadGuy::active_update(elapsed_time);
+ // no change if frozen
+ if (frozen)
+ return;
+
// charge when fully recovered
if ((state == STANDING) && (recover_timer.check())) {
set_state(CHARGING);
}
}
-IMPLEMENT_FACTORY(SkullyHop, "skullyhop");
+void
+SkullyHop::unfreeze()
+{
+ BadGuy::unfreeze();
+ initialize();
+}
+
+bool
+SkullyHop::is_freezable() const
+{
+ return true;
+}
/* EOF */