summaryrefslogtreecommitdiff
path: root/game
diff options
context:
space:
mode:
Diffstat (limited to 'game')
-rw-r--r--game/geoData.cpp7
-rw-r--r--game/geoData.h2
-rw-r--r--game/network/network.cpp4
-rw-r--r--game/network/network.impl.h4
-rw-r--r--game/network/rail.cpp6
5 files changed, 12 insertions, 11 deletions
diff --git a/game/geoData.cpp b/game/geoData.cpp
index 1a4cd3b..448ff67 100644
--- a/game/geoData.cpp
+++ b/game/geoData.cpp
@@ -405,10 +405,11 @@ GeoData::difference(const HalfedgeHandle heh) const
return ::difference(point(to_vertex_handle(heh)), point(from_vertex_handle(heh)));
}
+template<glm::length_t D>
[[nodiscard]] RelativeDistance
GeoData::length(const HalfedgeHandle heh) const
{
- return glm::length(difference(heh));
+ return ::distance<D, GlobalDistance, glm::defaultp>(point(to_vertex_handle(heh)), point(from_vertex_handle(heh)));
}
[[nodiscard]] GlobalPosition3D
@@ -468,7 +469,7 @@ GeoData::setHeights(const std::span<const GlobalPosition3D> triangleStrip, const
const auto vertexDistFrom = [this](GlobalPosition2D p) {
return [p, this](const VertexHandle v) {
- return std::make_pair(v, glm::length(::difference(p, this->point(v).xy())));
+ return std::make_pair(v, ::distance(p, this->point(v).xy()));
};
};
const auto vertexDistFromE = [this](GlobalPosition2D p) {
@@ -614,7 +615,7 @@ GeoData::setHeights(const std::span<const GlobalPosition3D> triangleStrip, const
todoOutHalfEdges(toVertex);
}
else if (!toTriangle) { // point without the new strip, adjust vertically by limit
- const auto maxOffset = static_cast<GlobalDistance>(opts.maxSlope * glm::length(difference(heh).xy()));
+ const auto maxOffset = static_cast<GlobalDistance>(opts.maxSlope * length<2>(heh));
const auto newHeight = std::clamp(toPoint.z, fromPoint.z - maxOffset, fromPoint.z + maxOffset);
if (newHeight != toPoint.z) {
toPoint.z = newHeight;
diff --git a/game/geoData.h b/game/geoData.h
index 7e4c28f..390a443 100644
--- a/game/geoData.h
+++ b/game/geoData.h
@@ -136,7 +136,7 @@ protected:
[[nodiscard]] HalfedgeHandle findBoundaryStart() const;
[[nodiscard]] RelativePosition3D difference(const HalfedgeHandle) const;
- [[nodiscard]] RelativeDistance length(const HalfedgeHandle) const;
+ template<glm::length_t D> [[nodiscard]] RelativeDistance length(const HalfedgeHandle) const;
[[nodiscard]] GlobalPosition3D centre(const HalfedgeHandle) const;
void updateAllVertexNormals();
diff --git a/game/network/network.cpp b/game/network/network.cpp
index 1666c4d..e67942f 100644
--- a/game/network/network.cpp
+++ b/game/network/network.cpp
@@ -121,8 +121,8 @@ Network::genCurveDef(const GlobalPosition3D & start, const GlobalPosition3D & en
endDir += pi;
const auto flatStart {start.xy()}, flatEnd {end.xy()};
auto midheight = [&](auto mid) {
- const auto sm = glm::length(RelativePosition2D(flatStart - mid)),
- em = glm::length(RelativePosition2D(flatEnd - mid));
+ const auto sm = ::distance<2>(flatStart, mid);
+ const auto em = ::distance<2>(flatEnd, mid);
return start.z + GlobalDistance(RelativeDistance(end.z - start.z) * (sm / (sm + em)));
};
if (const auto radii = find_arcs_radius(flatStart, startDir, flatEnd, endDir); radii.first < radii.second) {
diff --git a/game/network/network.impl.h b/game/network/network.impl.h
index ff29088..33b0a86 100644
--- a/game/network/network.impl.h
+++ b/game/network/network.impl.h
@@ -52,7 +52,7 @@ template<typename T, typename... Links>
Link::CCollection
NetworkOf<T, Links...>::candidateJoins(GlobalPosition3D start, GlobalPosition3D end)
{
- if (glm::length(RelativePosition3D(start - end)) < 2000.F) {
+ if (::distance(start, end) < 2000.F) {
return {};
}
const auto defs = genCurveDef(
@@ -81,7 +81,7 @@ template<typename T, typename... Links>
Link::CCollection
NetworkOf<T, Links...>::addJoins(GlobalPosition3D start, GlobalPosition3D end)
{
- if (glm::length(RelativePosition3D(start - end)) < 2000.F) {
+ if (::distance(start, end) < 2000.F) {
return {};
}
const auto defs = genCurveDef(start, end, findNodeDirection(nodeAt(start)), findNodeDirection(nodeAt(end)));
diff --git a/game/network/rail.cpp b/game/network/rail.cpp
index 2820cca..d7de231 100644
--- a/game/network/rail.cpp
+++ b/game/network/rail.cpp
@@ -40,8 +40,8 @@ RailLinks::addLinksBetween(GlobalPosition3D start, GlobalPosition3D end)
const auto flatStart {start.xy()}, flatEnd {end.xy()};
if (node2ins.second == NodeIs::InNetwork) {
auto midheight = [&](auto mid) {
- const auto sm = glm::length(RelativePosition2D(flatStart - mid)),
- em = glm::length(RelativePosition2D(flatEnd - mid));
+ const auto sm = ::distance<2>(flatStart, mid);
+ const auto em = ::distance<2>(flatEnd, mid);
return start.z + GlobalDistance(RelativeDistance(end.z - start.z) * (sm / (sm + em)));
};
const float dir2 = pi + findNodeDirection(node2ins.first);
@@ -117,7 +117,7 @@ RailLinkStraight::RailLinkStraight(
RailLinkCurve::RailLinkCurve(
NetworkLinkHolder<RailLinkCurve> & instances, const Node::Ptr & a, const Node::Ptr & b, GlobalPosition2D c) :
- RailLinkCurve(instances, a, b, c || a->pos.z, glm::length(difference(a->pos.xy(), c)), {c, a->pos, b->pos})
+ RailLinkCurve(instances, a, b, c || a->pos.z, ::distance<2>(a->pos.xy(), c), {c, a->pos, b->pos})
{
}