X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fbadguy%2Fdispenser.cpp;h=a82136a4b8caeb39c32c85206501d26bb1695d3b;hb=75acd4b141f45e851a492f089aa9ad24a9552409;hp=3bbe81bb3962482eaf0f8bbc099e21b3d9475443;hpb=38105c22495d9439b30221732dd5d7b89f328a0c;p=supertux.git diff --git a/src/badguy/dispenser.cpp b/src/badguy/dispenser.cpp index 3bbe81bb3..a82136a4b 100644 --- a/src/badguy/dispenser.cpp +++ b/src/badguy/dispenser.cpp @@ -20,8 +20,17 @@ #include #include "dispenser.hpp" + #include "object/bullet.hpp" #include "random_generator.hpp" +#include "lisp/writer.hpp" +#include "object_factory.hpp" +#include "audio/sound_manager.hpp" +#include "sector.hpp" +#include "object/player.hpp" +#include "log.hpp" + +#include Dispenser::Dispenser(const lisp::Lisp& reader) : BadGuy(reader, "images/creatures/dispenser/dispenser.sprite") @@ -29,7 +38,7 @@ Dispenser::Dispenser(const lisp::Lisp& reader) set_colgroup_active(COLGROUP_MOVING_STATIC); sound_manager->preload("sounds/squish.wav"); reader.get("cycle", cycle); - reader.get_vector("badguy", badguys); + reader.get("badguy", badguys); random = false; // default reader.get("random", random); type = "dropper"; //default @@ -64,12 +73,12 @@ Dispenser::write(lisp::Writer& writer) { writer.start_list("dispenser"); - writer.write_float("x", start_position.x); - writer.write_float("y", start_position.y); - writer.write_float("cycle", cycle); - writer.write_bool("random", random); - writer.write_string("type", type); - writer.write_string_vector("badguy", badguys); + writer.write("x", start_position.x); + writer.write("y", start_position.y); + writer.write("cycle", cycle); + writer.write("random", random); + writer.write("type", type); + writer.write("badguy", badguys); writer.end_list("dispenser"); } @@ -102,7 +111,7 @@ bool Dispenser::collision_squished(GameObject& object) { //Cannon launching MrRocket can be broken by jumping on it - //other dispencers are not that fragile. + //other dispensers are not that fragile. if (broken || type != "rocketlauncher") { return false; } @@ -198,17 +207,32 @@ Dispenser::launch_badguy() } std::string badguy = badguys[next_badguy]; + + if(badguy == "random") { + log_warning << "random is outdated; use a list of badguys to select from." << std::endl; + return; + } + GameObject* badguy_object = NULL; - if (type == "dropper") - badguy_object = create_badguy_object(badguy, Vector(get_pos().x, get_pos().y+32), launchdir); - else if (type == "cannon") - badguy_object = create_badguy_object(badguy, Vector(get_pos().x + (launchdir == LEFT ? -32 : 32), get_pos().y), launchdir); - else if (type == "rocketlauncher") - badguy_object = create_badguy_object(badguy, Vector(get_pos().x + (launchdir == LEFT ? -32 : 32), get_pos().y), launchdir); + try { + Vector spawnpoint; + + if (type == "dropper") + spawnpoint = Vector(get_pos().x, get_pos().y+32); + else if (type == "cannon") + spawnpoint = Vector(get_pos().x + (launchdir == LEFT ? -32 : 32), get_pos().y); + else if (type == "rocketlauncher") + spawnpoint = Vector(get_pos().x + (launchdir == LEFT ? -32 : 32), get_pos().y); - if (badguy_object) - Sector::current()->add_object(badguy_object); + badguy_object = create_object(badguy, Vector(get_pos().x, get_pos().y+32), launchdir); + + if (badguy_object) + Sector::current()->add_object(badguy_object); + } catch(std::exception& e) { + log_warning << "Error dispensing badguy: " << e.what() << std::endl; + return; + } } }