X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fbadguy%2Fyeti.cpp;h=10a33e0768bd02dfd8b6eff7f0752e7c4c8e567c;hb=5c14f6f384eff76491d494b4c157abf2ff776d49;hp=87faba0b862710ccb646cbc7044f495cf3c92a43;hpb=aec32b2eca58fcbe1a2730d79d500a44cf9043f1;p=supertux.git diff --git a/src/badguy/yeti.cpp b/src/badguy/yeti.cpp index 87faba0b8..10a33e076 100644 --- a/src/badguy/yeti.cpp +++ b/src/badguy/yeti.cpp @@ -22,12 +22,12 @@ #include #include #include -#include "yeti.h" -#include "object/camera.h" -#include "yeti_stalactite.h" -#include "bouncing_snowball.h" -#include "game_session.h" -#include "scripting/script_interpreter.h" +#include "yeti.hpp" +#include "object/camera.hpp" +#include "yeti_stalactite.hpp" +#include "bouncing_snowball.hpp" +#include "game_session.hpp" +#include "scripting/script_interpreter.hpp" static const float JUMP_VEL1 = 250; static const float JUMP_VEL2 = 700; @@ -43,12 +43,14 @@ Yeti::Yeti(const lisp::Lisp& reader) reader.get("x", start_position.x); reader.get("y", start_position.y); bbox.set_size(80, 120); - sprite = sprite_manager->create("yeti"); + sprite = sprite_manager->create("images/creatures/yeti/yeti.sprite"); sprite->set_action("right"); state = INIT; side = LEFT; +#if 0 sound_manager->preload_sound("yeti_gna"); sound_manager->preload_sound("yeti_roar"); +#endif hit_points = INITIAL_HITPOINTS; reader.get("dead-script", dead_script); countMe = false; @@ -62,7 +64,7 @@ void Yeti::draw(DrawingContext& context) { // we blink when we are safe - if(safe_timer.started() && size_t(global_time*40)%2) + if(safe_timer.started() && size_t(game_time*40)%2) return; BadGuy::draw(context); @@ -87,8 +89,12 @@ Yeti::active_update(float elapsed_time) case ANGRY_JUMPING: if(timer.check()) { // jump - sound_manager->play_sound("yeti_gna"); + sound_manager->play("sounds/yeti_gna.wav"); physic.set_velocity_y(JUMP_VEL1); + if (side == LEFT) // on the left, facing Tux who is on the right + sprite->set_action("jump-right"); + else + sprite->set_action("jump-left"); } break; default: @@ -102,6 +108,7 @@ void Yeti::go_right() { // jump and move right + sprite->set_action("right"); physic.set_velocity_y(JUMP_VEL1); physic.set_velocity_x(RUN_SPEED); state = GO_RIGHT; @@ -111,6 +118,7 @@ Yeti::go_right() void Yeti::go_left() { + sprite->set_action("left"); physic.set_velocity_y(JUMP_VEL1); physic.set_velocity_x(-RUN_SPEED); state = GO_LEFT; @@ -139,7 +147,7 @@ Yeti::collision_squished(Player& player) return true; player.bounce(*this); - sound_manager->play_sound("yeti_roar"); + sound_manager->play("sounds/yeti_roar.wav"); hit_points--; if(hit_points <= 0) { sprite->set_action("dead"); @@ -164,8 +172,18 @@ Yeti::kill_fall() } void -Yeti::write(lisp::Writer& ) +Yeti::write(lisp::Writer& writer) { + writer.start_list("yeti"); + + writer.write_float("x", start_position.x); + writer.write_float("y", start_position.y); + + if(dead_script != "") { + writer.write_string("dead-script", dead_script); + } + + writer.end_list("yeti"); } void @@ -202,16 +220,20 @@ Yeti::collision_solid(GameObject& , const CollisionHit& hit) } else if(state == GO_LEFT && !timer.started()) { side = LEFT; summon_snowball(); - sprite->set_action("right"); + sprite->set_action("stand-right"); angry_jumping(); } else if(state == GO_RIGHT && !timer.started()) { side = RIGHT; summon_snowball(); - sprite->set_action("left"); + sprite->set_action("stand-left"); angry_jumping(); } else if(state == ANGRY_JUMPING) { if(!timer.started()) { // we just landed + if (side == LEFT) // standing on the left, facing Tux who is on the right + sprite->set_action("stand-right"); + else + sprite->set_action("stand-left"); jumpcount++; // make a stalactite falling down and shake camera a bit Sector::current()->camera->shake(.1, 0, 10);