IceCrusher::IceCrusher(const Reader& reader) :
MovingSprite(reader, "images/creatures/icecrusher/icecrusher.sprite", LAYER_OBJECTS, COLGROUP_STATIC),
- state(IDLE),
+ state(IDLE),
start_position(),
physic(),
cooldown_timer(0.0),
{
// TODO: icecrusher hitting deserves its own sounds-
// one for hitting the ground, one for hitting Tux
- sound_manager->preload("sounds/brick.wav");
+ SoundManager::current()->preload("sounds/brick.wav");
start_position = get_bbox().p1;
set_state(state, true);
-
+
float sprite_width = sprite->get_width ();
if (sprite_width >= 128.0)
ic_size = LARGE;
- lefteye = sprite_manager->create(sprite_name);
+ lefteye = SpriteManager::current()->create(sprite_name);
lefteye->set_action("lefteye");
- righteye = sprite_manager->create(sprite_name);
+ righteye = SpriteManager::current()->create(sprite_name);
righteye->set_action("righteye");
- whites = sprite_manager->create(sprite_name);
+ whites = SpriteManager::current()->create(sprite_name);
whites->set_action("whites");
}
/*
IceCrusher::IceCrusher(const IceCrusher& other)
- : MovingSprite(other),
- state(other.state), speed(other.speed)
+ : MovingSprite(other),
+ state(other.state), speed(other.speed)
{
start_position = get_bbox().p1;
set_state(state, true);
}
*/
-void
-IceCrusher::set_state(IceCrusherState state, bool force)
+void
+IceCrusher::set_state(IceCrusherState state_, bool force)
{
- if ((this->state == state) && (!force)) return;
- switch(state) {
+ if ((this->state == state_) && (!force)) return;
+ switch(state_) {
case IDLE:
set_group(COLGROUP_STATIC);
physic.enable_gravity (false);
log_debug << "IceCrusher in invalid state" << std::endl;
break;
}
- this->state = state;
+ this->state = state_;
}
HitResponse
/* If the other object is the player, and the collision is at the bottom of
* the ice crusher, hurt the player. */
if (player && hit.bottom) {
- sound_manager->play("sounds/brick.wav");
+ SoundManager::current()->play("sounds/brick.wav");
if(player->is_invincible()) {
if (state == CRUSHING)
set_state(RECOVERING);
}
return FORCE_MOVE;
}
-
-void
+
+void
IceCrusher::collision_solid(const CollisionHit& hit)
{
switch(state) {
if (ic_size == LARGE) {
cooldown_timer = PAUSE_TIME_LARGE;
Sector::current()->camera->shake (/* frequency = */ .125f, /* x = */ 0.0, /* y = */ 16.0);
- sound_manager->play("sounds/brick.wav");
+ SoundManager::current()->play("sounds/brick.wav");
// throw some particles, bigger and more for large icecrusher
for(int j = 0; j < 9; j++)
{
- Sector::current()->add_object(
- new Particles(Vector(get_bbox().p2.x - j*8 - 4, get_bbox().p2.y),
- 0, 90-5*j, Vector(140, -380), Vector(0, 300),
- 1, Color(.6f, .6f, .6f), 5, 1.8f, LAYER_OBJECTS+1));
- Sector::current()->add_object(
- new Particles(Vector(get_bbox().p1.x + j*8 + 4, get_bbox().p2.y),
- 270+5*j, 360, Vector(140, -380), Vector(0, 300),
- 1, Color(.6f, .6f, .6f), 5, 1.8f, LAYER_OBJECTS+1));
+ Sector::current()->add_object(std::make_shared<Particles>(
+ Vector(get_bbox().p2.x - j*8 - 4, get_bbox().p2.y),
+ 0, 90-5*j, 140, 380, Vector(0, 300),
+ 1, Color(.6f, .6f, .6f), 5, 1.8f, LAYER_OBJECTS+1));
+ Sector::current()->add_object(std::make_shared<Particles>(
+ Vector(get_bbox().p1.x + j*8 + 4, get_bbox().p2.y),
+ 270+5*j, 360, 140, 380, Vector(0, 300),
+ 1, Color(.6f, .6f, .6f), 5, 1.8f, LAYER_OBJECTS+1));
}
}
else {
cooldown_timer = PAUSE_TIME_NORMAL;
Sector::current()->camera->shake (/* frequency = */ .1f, /* x = */ 0.0, /* y = */ 8.0);
- sound_manager->play("sounds/brick.wav");
+ SoundManager::current()->play("sounds/brick.wav");
// throw some particles
for(int j = 0; j < 5; j++)
{
- Sector::current()->add_object(
- new Particles(Vector(get_bbox().p2.x - j*8 - 4, get_bbox().p2.y),
- 0, 90+10*j, Vector(140, -260), Vector(0, 300),
- 1, Color(.6f, .6f, .6f), 4, 1.6f, LAYER_OBJECTS+1));
- Sector::current()->add_object(
- new Particles(Vector(get_bbox().p1.x + j*8 + 4, get_bbox().p2.y),
- 270+10*j, 360, Vector(140, -260), Vector(0, 300),
- 1, Color(.6f, .6f, .6f), 4, 1.6f, LAYER_OBJECTS+1));
+ Sector::current()->add_object(std::make_shared<Particles>(
+ Vector(get_bbox().p2.x - j*8 - 4, get_bbox().p2.y),
+ 0, 90+10*j, 140, 260, Vector(0, 300),
+ 1, Color(.6f, .6f, .6f), 4, 1.6f, LAYER_OBJECTS+1));
+ Sector::current()->add_object(std::make_shared<Particles>(
+ Vector(get_bbox().p1.x + j*8 + 4, get_bbox().p2.y),
+ 270+10*j, 360, 140, 260, Vector(0, 300),
+ 1, Color(.6f, .6f, .6f), 4, 1.6f, LAYER_OBJECTS+1));
}
}
set_state(RECOVERING);
{
context.push_target();
context.set_target(DrawingContext::NORMAL);
- sprite->draw(context, get_pos(), layer);
+ sprite->draw(context, get_pos(), layer+2);
if(!(state == CRUSHING) && sprite->has_action("whites"))
{
// draw icecrusher's eyes slightly behind
- lefteye->draw(context, get_pos()+eye_position(false), layer-1);
- righteye->draw(context, get_pos()+eye_position(true), layer-1);
+ lefteye->draw(context, get_pos()+eye_position(false), layer+1);
+ righteye->draw(context, get_pos()+eye_position(true), layer+1);
// draw the whites of icecrusher's eyes even further behind
- whites->draw(context, get_pos(), layer-2);
+ whites->draw(context, get_pos(), layer);
}
context.pop_target();
}