X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fbadguy%2Fkugelblitz.cpp;h=eb4fc2ebcb06f871670a2dab33e82496a0d74bbb;hb=5b92cbefc559bc86308690dc277a8cc15bf2ddce;hp=94be0586410866d2090203f6a9ac2e61edf7d2a9;hpb=9890da50f82d286c67e72feefcc423d1bc9076c3;p=supertux.git diff --git a/src/badguy/kugelblitz.cpp b/src/badguy/kugelblitz.cpp index 94be05864..eb4fc2ebc 100644 --- a/src/badguy/kugelblitz.cpp +++ b/src/badguy/kugelblitz.cpp @@ -21,6 +21,7 @@ #include "kugelblitz.hpp" #include "object/tilemap.hpp" +#include "object/camera.hpp" #include "tile.hpp" #define LIFETIME 5 @@ -28,13 +29,16 @@ #define BASE_SPEED 200 #define RAND_SPEED 150 +static const float X_OFFSCREEN_DISTANCE = 1600; +static const float Y_OFFSCREEN_DISTANCE = 1200; + Kugelblitz::Kugelblitz(const lisp::Lisp& reader) : groundhit_pos_set(false) { reader.get("x", start_position.x); start_position.y = 0; //place above visible area bbox.set_size(63.8, 63.8); - sprite = sprite_manager->create("kugelblitz"); + sprite = sprite_manager->create("images/creatures/kugelblitz/kugelblitz.sprite"); sprite->set_action("falling"); physic.enable_gravity(false); } @@ -45,7 +49,6 @@ Kugelblitz::write(lisp::Writer& writer) writer.start_list("kugelblitz"); writer.write_float("x", start_position.x); - writer.write_float("y", start_position.y); writer.end_list("kugelblitz"); } @@ -142,6 +145,10 @@ Kugelblitz::active_update(float elapsed_time) Sector::current()->add_object(new Electrifier(76,1422,1.5)); explode(); } + if (Sector::current()->solids->get_tile_at(get_pos())->getAttributes() == 48) { + //HIT ELECTRIFIED WATER + explode(); + } } BadGuy::active_update(elapsed_time); } @@ -162,4 +169,48 @@ Kugelblitz::explode() else remove_me(); } +void +Kugelblitz::try_activate() +{ + //FIXME: Don't activate Kugelblitz before it's on-screen + float scroll_x = Sector::current()->camera->get_translation().x; + float scroll_y = Sector::current()->camera->get_translation().y; + + /* Activate badguys if they're just around the screen to avoid + * the effect of having badguys suddenly popping up from nowhere. + */ + if (start_position.x > scroll_x - X_OFFSCREEN_DISTANCE && + start_position.x < scroll_x - bbox.get_width() && + start_position.y > scroll_y - Y_OFFSCREEN_DISTANCE && + start_position.y < scroll_y + Y_OFFSCREEN_DISTANCE) { + dir = RIGHT; + set_state(STATE_ACTIVE); + activate(); + } else if (start_position.x > scroll_x && + start_position.x < scroll_x + X_OFFSCREEN_DISTANCE && + start_position.y > scroll_y - Y_OFFSCREEN_DISTANCE && + start_position.y < scroll_y + Y_OFFSCREEN_DISTANCE) { + dir = LEFT; + set_state(STATE_ACTIVE); + activate(); + } else if (start_position.x > scroll_x - X_OFFSCREEN_DISTANCE && + start_position.x < scroll_x + X_OFFSCREEN_DISTANCE && + ((start_position.y > scroll_y && + start_position.y < scroll_y + Y_OFFSCREEN_DISTANCE) || + (start_position.y > scroll_y - Y_OFFSCREEN_DISTANCE && + start_position.y < scroll_y))) { + dir = start_position.x < scroll_x ? RIGHT : LEFT; + set_state(STATE_ACTIVE); + activate(); + } else if(state == STATE_INIT + && start_position.x > scroll_x - X_OFFSCREEN_DISTANCE + && start_position.x < scroll_x + X_OFFSCREEN_DISTANCE + && start_position.y > scroll_y - Y_OFFSCREEN_DISTANCE + && start_position.y < scroll_y + Y_OFFSCREEN_DISTANCE) { + dir = LEFT; + set_state(STATE_ACTIVE); + activate(); + } +} + IMPLEMENT_FACTORY(Kugelblitz, "kugelblitz")