From: LMH Date: Wed, 31 Jul 2013 07:34:48 +0000 (-1000) Subject: Large icecrusher sprites also support eye animation, also eyes spin around while... X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=bc5dd0241ab3fcc76ff0d999d578b9b10f8e573e;p=supertux.git Large icecrusher sprites also support eye animation, also eyes spin around while icecrusher is recovering. Note that icecrusher could still use some facial expressions for idle and recovering states. The recovering state could use multiple expressions dependent on if Tux was hit or not. --- diff --git a/data/images/creatures/icecrusher/iceblock.xcf b/data/images/creatures/icecrusher/iceblock.xcf index 2183ca260..769509f84 100644 Binary files a/data/images/creatures/icecrusher/iceblock.xcf and b/data/images/creatures/icecrusher/iceblock.xcf differ diff --git a/data/images/creatures/icecrusher/krosh.sprite b/data/images/creatures/icecrusher/krosh.sprite index 1da663d2f..638f9bb35 100644 --- a/data/images/creatures/icecrusher/krosh.sprite +++ b/data/images/creatures/icecrusher/krosh.sprite @@ -2,7 +2,7 @@ (action (name "idle") (hitbox 2 0 128 128) - (images "krosh.png" + (images "krosh_main.png" ) ) (action @@ -14,7 +14,22 @@ (action (name "recovering") (hitbox 2 0 128 128) - (images "krosh.png" + (images "krosh_main.png" ) ) + (action + (name "whites") + (hitbox 2 0 128 128) + (images "krosh_whites.png") + ) + (action + (name "lefteye") + (hitbox 2 0 128 128) + (images "krosh_lefteye.png") + ) + (action + (name "righteye") + (hitbox 2 0 128 128) + (images "krosh_righteye.png") + ) ) diff --git a/data/images/creatures/icecrusher/krosh_lefteye.png b/data/images/creatures/icecrusher/krosh_lefteye.png new file mode 100644 index 000000000..4f87c5a03 Binary files /dev/null and b/data/images/creatures/icecrusher/krosh_lefteye.png differ diff --git a/data/images/creatures/icecrusher/krosh_main.png b/data/images/creatures/icecrusher/krosh_main.png new file mode 100644 index 000000000..3a408385b Binary files /dev/null and b/data/images/creatures/icecrusher/krosh_main.png differ diff --git a/data/images/creatures/icecrusher/krosh_righteye.png b/data/images/creatures/icecrusher/krosh_righteye.png new file mode 100644 index 000000000..fa2857e7c Binary files /dev/null and b/data/images/creatures/icecrusher/krosh_righteye.png differ diff --git a/data/images/creatures/icecrusher/krosh_whites.png b/data/images/creatures/icecrusher/krosh_whites.png new file mode 100644 index 000000000..ae1449348 Binary files /dev/null and b/data/images/creatures/icecrusher/krosh_whites.png differ diff --git a/src/object/icecrusher.cpp b/src/object/icecrusher.cpp index e97fd62b5..7fd2f0e3b 100644 --- a/src/object/icecrusher.cpp +++ b/src/object/icecrusher.cpp @@ -239,7 +239,7 @@ IceCrusher::draw(DrawingContext& context) context.push_target(); context.set_target(DrawingContext::NORMAL); sprite->draw(context, get_pos(), layer); - if(!(state == CRUSHING)) // Remove if eyes are to be animated during crushing + if(!(state == CRUSHING) && sprite->has_action("whites")) { // draw icecrusher's eyes slightly behind lefteye->draw(context, get_pos()+eye_position(false), layer-1); @@ -269,7 +269,7 @@ IceCrusher::found_victim() Vector IceCrusher::eye_position(bool right) { - if(!(state == CRUSHING)) + if(state == IDLE) { Player* player = Sector::current()->get_nearest_player (this->get_bbox ()); if(player) @@ -285,11 +285,18 @@ IceCrusher::eye_position(bool right) const float displacement_y = player_focus_y - crusher_origin_y; const float displacement_mag = pow(pow(displacement_x, 2.0) + pow(displacement_y, 2.0), 0.5); // Determine weighting for eye displacement along x given icecrusher eye shape - int weight = ((displacement_x > 0) == right) ? 1 : 4; + int weight_x = sprite->get_width()/64 * ((displacement_x > 0) == right) ? 1 : 4; + int weight_y = sprite->get_width()/64 * 2; - return Vector(displacement_x/displacement_mag * weight, displacement_y/displacement_mag * 2 - 2); + return Vector(displacement_x/displacement_mag * weight_x, displacement_y/displacement_mag * weight_y - weight_y); } } + else if(state == RECOVERING) + { + // Eyes spin while icecrusher is recovering, giving a dazed impression + return Vector(sin((right ? 1 : -1) * get_pos().y/13) * sprite->get_width()/64 * 2 - (right ? 1 : -1) * sprite->get_width()/64 * 2, + cos(get_pos().y/13) * sprite->get_width()/64 * 2 - sprite->get_width()/64 * 2); + } return Vector(0,0); }