X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fworldmap%2Fworldmap.cpp;h=b34e881edd2b453623a32fc3b2e15751ae12a63d;hb=d84d73b701cc7fa2bd74f3490b9be1bf8b6f705a;hp=ba81b1e6cf7b7f360040f381cca6834f008ca0d8;hpb=6141e1672ec08427b989ca245508f0c1648ce68b;p=supertux.git diff --git a/src/worldmap/worldmap.cpp b/src/worldmap/worldmap.cpp index ba81b1e6c..b34e881ed 100644 --- a/src/worldmap/worldmap.cpp +++ b/src/worldmap/worldmap.cpp @@ -524,23 +524,23 @@ WorldMap::update(float delta) enter_level = true; if(main_controller->pressed(Controller::PAUSE_MENU)) on_escape_press(); - + + // check for teleporters + Teleporter* teleporter = at_teleporter(tux->get_tile_pos()); + if (teleporter && (teleporter->automatic || (enter_level && (!tux->is_moving())))) { + enter_level = false; + if (teleporter->worldmap != "") { + change(teleporter->worldmap, teleporter->spawnpoint); + } else { + // TODO: an animation, camera scrolling or a fading would be a nice touch + sound_manager->play("sounds/warp.wav"); + tux->back_direction = D_NONE; + move_to_spawnpoint(teleporter->spawnpoint); + } + } + if (enter_level && !tux->is_moving()) { - /* Check special tile action */ - SpecialTile* special_tile = at_special_tile(); - if(special_tile) - { - if (special_tile->teleport_dest != Vector(-1,-1)) - { - // TODO: an animation, camera scrolling or a fading would be a nice touch - sound_manager->play("sounds/warp.wav"); - tux->back_direction = D_NONE; - tux->set_tile_pos(special_tile->teleport_dest); - SDL_Delay(1000); - } - } - /* Check level action */ LevelTile* level = at_level(); if (!level) { @@ -690,6 +690,14 @@ WorldMap::draw_status(DrawingContext& context) break; } } + + // display teleporter messages + Teleporter* teleporter = at_teleporter(tux->get_tile_pos()); + if (teleporter && (teleporter->message != "")) { + Vector pos = Vector(SCREEN_WIDTH/2, SCREEN_HEIGHT - white_text->get_height() - 30); + context.draw_text(white_text, teleporter->message, pos, CENTER_ALLIGN, LAYER_FOREGROUND1); + } + } /* Display a passive message in the map, if needed */ @@ -710,8 +718,13 @@ WorldMap::setup() current_ = this; load_state(); - // if force_spawnpoint was set, move Tux there - if (force_spawnpoint != "") move_to_spawnpoint(force_spawnpoint); + // if force_spawnpoint was set, move Tux there, then clear force_spawnpoint + if (force_spawnpoint != "") { + move_to_spawnpoint(force_spawnpoint); + force_spawnpoint = ""; + } + + tux->setup(); // register worldmap_table as worldmap in scripting using namespace Scripting;