From 6af353750a424569488ea7fa31d11d758da003bf Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Tue, 6 Jul 2010 21:32:25 +0100 Subject: [PATCH] Draw sleepers in GenTrack segments --- src/GenTrack.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/GenTrack.cpp b/src/GenTrack.cpp index a881007..11ace88 100644 --- a/src/GenTrack.cpp +++ b/src/GenTrack.cpp @@ -44,7 +44,7 @@ public: void get_covers(vector >& output) const; ITrackSegmentPtr merge_exit(Point where, track::Direction dir); track::TravelToken get_travel_token(track::Position pos, - track::Direction dir) const; + track::Direction dir) const; void next_state() {} void prev_state() {} bool has_multiple_states() const { return false; } @@ -146,16 +146,20 @@ void GenTrack::merge(IMeshBufferPtr buf) const // Draw the sleepers const float sleeper_sep = 0.25f; - const float sleepers_per_unit = 1.0f / sleeper_sep; - const int n_sleepers = static_cast(curve.length * sleepers_per_unit); - const float spill = curve.length - (n_sleepers * sleeper_sep); - debug() << "spill=" << spill; - - for (float i = spill / 2.0f; i < curve.length; i += sleeper_sep) { - Vector v = curve(i / curve.length); + float delta = 0; + int n = 0; + do { + ++n; + delta = ((curve.length - sleeper_sep) / n) - sleeper_sep; + } while (delta > sleeper_sep / n); + + for (int i = 0; i <= n; i++) { + float pos = (sleeper_sep / 2) + i * (sleeper_sep + delta); + + Vector v = curve(pos / curve.length); - const Vector deriv = curve.deriv(i / curve.length); + const Vector deriv = curve.deriv(pos / curve.length); const float angle = rad_to_deg(atanf(deriv.z / deriv.x)); -- 2.39.2