summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/travel.cc
diff options
context:
space:
mode:
authorRobert Vollmert <rvollmert@gmx.net>2009-11-25 14:53:30 +0100
committerRobert Vollmert <rvollmert@gmx.net>2009-11-25 15:00:20 +0100
commitec4cba57dd8fd579f854b2f23b77eb5ce1057bd9 (patch)
tree2651049afd50bd025236da5f73aacc43a70c9028 /crawl-ref/source/travel.cc
parent9e4ff27375df190391c1a7bbfe8851dd1bf26293 (diff)
downloadcrawl-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.cc84
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;