From d57a21356854f8d2d4550f4c3f01d25f1bd42adc Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Sat, 27 Mar 2010 21:11:05 +0000 Subject: [PATCH] Compute tiles covered by S-bends --- src/Map.cpp | 2 +- src/SBend.cpp | 28 +++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/Map.cpp b/src/Map.cpp index 0c80e20..19a53e1 100644 --- a/src/Map.cpp +++ b/src/Map.cpp @@ -765,7 +765,7 @@ void Map::renderSector(IGraphicsPtr aContext, int id, tile.track->renderedOn(frameNum); -#if 1 +#if 0 // Draw the endpoints for debugging vector > tiles; tile.track->get()->getEndpoints(tiles); diff --git a/src/SBend.cpp b/src/SBend.cpp index 6880f55..d6f4e62 100644 --- a/src/SBend.cpp +++ b/src/SBend.cpp @@ -156,7 +156,33 @@ void SBend::getEndpoints(vector >& output) const void SBend::getCovers(vector >& output) const { - // TODO + vector > exits; + getEndpoints(exits); + + set > tmp; + + for (float f = 0.0f; f < 1.0f; f += 0.1f) { + Vector curveValue = curve(f); + + curveValue.z += 0.5f; + + int x, y; + if (axis == axis::X) { + x = static_cast(floor(curveValue.x + origin.x)); + y = static_cast(floor(curveValue.z + origin.y)); + } + else { + x = -static_cast(floor(curveValue.z - origin.x)); + y = static_cast(floor(curveValue.x + origin.y)); + } + + Point p = makePoint(x, y); + + if (p != exits.at(0) && p != exits.at(1)) + tmp.insert(p); + } + + copy(tmp.begin(), tmp.end(), back_inserter(output)); } ITrackSegmentPtr SBend::mergeExit(Point where, track::Direction dir) -- 2.39.2