diff options
author | Robert Vollmert <rvollmert@gmx.net> | 2009-11-25 14:53:30 +0100 |
---|---|---|
committer | Robert Vollmert <rvollmert@gmx.net> | 2009-11-25 15:00:20 +0100 |
commit | ec4cba57dd8fd579f854b2f23b77eb5ce1057bd9 (patch) | |
tree | 2651049afd50bd025236da5f73aacc43a70c9028 /crawl-ref/source/travel.cc | |
parent | 9e4ff27375df190391c1a7bbfe8851dd1bf26293 (diff) | |
download | crawl-ref-ec4cba57dd8fd579f854b2f23b77eb5ce1057bd9.tar.gz crawl-ref-ec4cba57dd8fd579f854b2f23b77eb5ce1057bd9.zip |
Sort out translevel travel initialization.
All translevel travel now goes through start_translevel_travel(pos),
which in particular makes sure destination stair distances are
determined, fixing travel failure to waypoints.
This was not failing earlier because prompt_translevel_target used
to call start_translevel_travel(pos) through the now-unused
TravelCache::travel_to_waypoint.
Diffstat (limited to 'crawl-ref/source/travel.cc')
-rw-r--r-- | crawl-ref/source/travel.cc | 84 |
1 files changed, 38 insertions, 46 deletions
diff --git a/crawl-ref/source/travel.cc b/crawl-ref/source/travel.cc index 4a1699d9d0..7797d1dff3 100644 --- a/crawl-ref/source/travel.cc +++ b/crawl-ref/source/travel.cc @@ -2278,6 +2278,37 @@ travel_target prompt_translevel_target(int prompt_flags, return target; } +static void _start_translevel_travel() +{ + // Update information for this level. + travel_cache.get_level_info(level_id::current()).update(); + + if (level_id::current() == level_target.p.id + && (level_target.p.pos.x == -1 || level_target.p.pos == you.pos())) + { + mpr("You're already here!"); + return ; + } + + if (level_target.p.id.depth > 0) + { + // Forget interrupted butchering. + maybe_clear_weapon_swap(); + + you.running = RMODE_INTERLEVEL; + you.running.pos.reset(); + last_stair.depth = -1; + + _Route_Warning.new_dest(level_target); + + _Src_Level = level_id::current(); + _Src_Dest_Level_Delta = level_distance(_Src_Level, + level_target.p.id); + + _start_running(); + } +} + void start_translevel_travel(const travel_target &pos) { if (!i_feel_safe(true, true)) @@ -2317,10 +2348,10 @@ void start_translevel_travel(const travel_target &pos) _populate_stair_distances(pos.p); trans_travel_dest = get_trans_travel_dest(level_target); - start_translevel_travel(false); + _start_translevel_travel(); } -void start_translevel_travel(bool prompt_for_destination) +void start_translevel_travel_prompt() { if (!i_feel_safe(true, true)) return; @@ -2329,40 +2360,12 @@ void start_translevel_travel(bool prompt_for_destination) // we can't wait to confirm that the user chose to initiate travel. travel_cache.get_level_info(level_id::current()).update(); - if (prompt_for_destination) - { - travel_target target = prompt_translevel_target(TPF_DEFAULT_OPTIONS, - trans_travel_dest); - if (target.p.id.depth <= 0) - return; - - level_target = target; - } - - if (level_id::current() == level_target.p.id - && (level_target.p.pos.x == -1 || level_target.p.pos == you.pos())) - { - mpr("You're already here!"); - return ; - } - - if (level_target.p.id.depth > 0) - { - // Forget interrupted butchering. - maybe_clear_weapon_swap(); - - you.running = RMODE_INTERLEVEL; - you.running.pos.reset(); - last_stair.depth = -1; - - _Route_Warning.new_dest(level_target); - - _Src_Level = level_id::current(); - _Src_Dest_Level_Delta = level_distance(_Src_Level, - level_target.p.id); + travel_target target = prompt_translevel_target(TPF_DEFAULT_OPTIONS, + trans_travel_dest); + if (target.p.id.depth <= 0) + return; - _start_running(); - } + start_translevel_travel(target); } command_type _trans_negotiate_stairs() @@ -3396,17 +3399,6 @@ bool TravelCache::know_stair(const coord_def &c) const return (i == levels.end() ? false : i->second.know_stair(c)); } -void TravelCache::travel_to_waypoint(int num) -{ - if (num < 0 || num >= TRAVEL_WAYPOINT_COUNT) - return; - - if (waypoints[num].id.depth == -1) - return; - - start_translevel_travel(waypoints[num]); -} - void TravelCache::list_waypoints() const { std::string line; |