X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fbadguy%2Fzeekling.cpp;h=3d6ec901f45f0bac9943ac075032cabec42f5dd3;hb=2d1bc69993923150eb701d3cacb917ab4e23d5ef;hp=4cdec6a5a22d994f1dd95823dac2740d6ede9497;hpb=714a30abd887def6331a193216387e66cbfbd1bb;p=supertux.git diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 4cdec6a5a..3d6ec901f 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -2,7 +2,7 @@ // // Zeekling - flyer that swoops down when she spots the player // Copyright (C) 2005 Matthias Braun -// Copyright (C) 2006 Christoph Sommer +// Copyright (C) 2006 Christoph Sommer // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -26,15 +26,19 @@ #include "random_generator.hpp" Zeekling::Zeekling(const lisp::Lisp& reader) - : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), last_player(0) + : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), last_player(0) { state = FLYING; + speed = systemRandom.rand(130, 171); + physic.enable_gravity(false); } Zeekling::Zeekling(const Vector& pos, Direction d) - : BadGuy(pos, d, "images/creatures/zeekling/zeekling.sprite"), last_player(0) + : BadGuy(pos, d, "images/creatures/zeekling/zeekling.sprite"), last_player(0) { state = FLYING; + speed = systemRandom.rand(130, 171); + physic.enable_gravity(false); } void @@ -42,18 +46,16 @@ Zeekling::write(lisp::Writer& writer) { writer.start_list("zeekling"); - writer.write_float("x", start_position.x); - writer.write_float("y", start_position.y); + writer.write("x", start_position.x); + writer.write("y", start_position.y); writer.end_list("zeekling"); } void -Zeekling::activate() +Zeekling::initialize() { - speed = systemRandom.rand(130, 171); - physic.vx = (dir == LEFT ? -speed : speed); - physic.gravity_enabled = false; + physic.set_velocity_x(dir == LEFT ? -speed : speed); sprite->set_action(dir == LEFT ? "left" : "right"); } @@ -71,19 +73,19 @@ Zeekling::onBumpHorizontal() { if (state == FLYING) { dir = (dir == LEFT ? RIGHT : LEFT); sprite->set_action(dir == LEFT ? "left" : "right"); - physic.vx = (dir == LEFT ? -speed : speed); + physic.set_velocity_x(dir == LEFT ? -speed : speed); } else if (state == DIVING) { dir = (dir == LEFT ? RIGHT : LEFT); state = FLYING; sprite->set_action(dir == LEFT ? "left" : "right"); - physic.vx = (dir == LEFT ? -speed : speed); - physic.vy = 0; + physic.set_velocity_x(dir == LEFT ? -speed : speed); + physic.set_velocity_y(0); } else if (state == CLIMBING) { dir = (dir == LEFT ? RIGHT : LEFT); sprite->set_action(dir == LEFT ? "left" : "right"); - physic.vx = (dir == LEFT ? -speed : speed); + physic.set_velocity_x(dir == LEFT ? -speed : speed); } else { assert(false); } @@ -92,16 +94,16 @@ Zeekling::onBumpHorizontal() { void Zeekling::onBumpVertical() { if (state == FLYING) { - physic.vy = 0; + physic.set_velocity_y(0); } else if (state == DIVING) { state = CLIMBING; - physic.vy = -speed; + physic.set_velocity_y(-speed); sprite->set_action(dir == LEFT ? "left" : "right"); } else if (state == CLIMBING) { state = FLYING; - physic.vy = 0; + physic.set_velocity_y(0); } } @@ -172,7 +174,7 @@ Zeekling::active_update(float elapsed_time) { if (state == FLYING) { if (should_we_dive()) { state = DIVING; - physic.vy = 2*fabsf(physic.vx); + physic.set_velocity_y(2*fabsf(physic.get_velocity_x())); sprite->set_action(dir == LEFT ? "diving-left" : "diving-right"); } BadGuy::active_update(elapsed_time); @@ -184,7 +186,7 @@ Zeekling::active_update(float elapsed_time) { // stop climbing when we're back at initial height if (get_pos().y <= start_position.y) { state = FLYING; - physic.vy = 0; + physic.set_velocity_y(0); } BadGuy::active_update(elapsed_time); return;