From 637908ab4366919efb20983813a84a25dc5a9bb6 Mon Sep 17 00:00:00 2001 From: muddmaker Date: Mon, 22 Dec 2014 14:50:44 -0800 Subject: [PATCH] Improve renderSegment --- src/modules/math/BezierCurve.cpp | 31 +++++++++---------------------- src/modules/math/BezierCurve.h | 2 ++ 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/src/modules/math/BezierCurve.cpp b/src/modules/math/BezierCurve.cpp index 05e84e92f..04a23c079 100644 --- a/src/modules/math/BezierCurve.cpp +++ b/src/modules/math/BezierCurve.cpp @@ -195,28 +195,15 @@ vector BezierCurve::renderSegment(double start, double end, size_t accur } else if (start < end) { - if (start > 0 && start < 1) - { - for (size_t i = 0; i < vertices.size(); ++i) - { - if ((double)i / vertices.size() > start) - { - vertices.erase(vertices.begin(), vertices.begin() + i - 1); - break; - } - } - } - if (end < 1 && end > 0) - { - for (size_t i = vertices.size(); i > 0; --i) - { - if ((double)(i - 1) / vertices.size() < end) - { - vertices.erase(vertices.begin() + i, vertices.end()); - break; - } - } - } + size_t start_idx = size_t(start * vertices.size()); + size_t end_idx = size_t(end * vertices.size() + 0.5); + return std::vector(vertices.begin() + start_idx, vertices.begin() + end_idx); + } + else if (end > start) + { + size_t start_idx = size_t(end * vertices.size() + 0.5); + size_t end_idx = size_t(start * vertices.size()); + return std::vector(vertices.begin() + start_idx, vertices.begin() + end_idx); } return vertices; } diff --git a/src/modules/math/BezierCurve.h b/src/modules/math/BezierCurve.h index e35e45c08..8d01f6e3a 100644 --- a/src/modules/math/BezierCurve.h +++ b/src/modules/math/BezierCurve.h @@ -25,6 +25,8 @@ #include "common/Object.h" #include "common/Vector.h" #include +#include +#include namespace love {