From 1b2954f2db6545c68e7f4f2eaaecdbfbb1b6239a Mon Sep 17 00:00:00 2001 From: elsid Date: Tue, 1 Feb 2022 00:22:53 +0100 Subject: [PATCH] Remove unused z coordinate --- apps/navmeshtool/navmesh.cpp | 4 ++-- .../detournavigator/gettilespositions.cpp | 14 ++++++------ .../detournavigator/gettilespositions.cpp | 22 ++++++++----------- .../detournavigator/gettilespositions.hpp | 6 ++--- components/detournavigator/tilebounds.hpp | 13 +++++++++++ components/misc/convert.hpp | 7 +++++- 6 files changed, 40 insertions(+), 26 deletions(-) diff --git a/apps/navmeshtool/navmesh.cpp b/apps/navmeshtool/navmesh.cpp index 39f2b2f37c..ca614d0cf6 100644 --- a/apps/navmeshtool/navmesh.cpp +++ b/apps/navmeshtool/navmesh.cpp @@ -177,8 +177,8 @@ namespace NavMeshTool DetourNavigator::getTilesPositions( DetourNavigator::makeTilesPositionsRange( - Misc::Convert::toOsg(input->mAabb.m_min), - Misc::Convert::toOsg(input->mAabb.m_max), + Misc::Convert::toOsgXY(input->mAabb.m_min), + Misc::Convert::toOsgXY(input->mAabb.m_max), settings.mRecast ), [&] (const TilePosition& tilePosition) { worldspaceTiles.push_back(tilePosition); } diff --git a/apps/openmw_test_suite/detournavigator/gettilespositions.cpp b/apps/openmw_test_suite/detournavigator/gettilespositions.cpp index 8121c19205..70c6ef9a09 100644 --- a/apps/openmw_test_suite/detournavigator/gettilespositions.cpp +++ b/apps/openmw_test_suite/detournavigator/gettilespositions.cpp @@ -37,35 +37,35 @@ namespace TEST_F(DetourNavigatorGetTilesPositionsTest, for_object_in_single_tile_should_return_one_tile) { - getTilesPositions(makeTilesPositionsRange(osg::Vec3f(2, 2, 0), osg::Vec3f(31, 31, 1), mSettings), mCollect); + getTilesPositions(makeTilesPositionsRange(osg::Vec2f(2, 2), osg::Vec2f(31, 31), mSettings), mCollect); EXPECT_THAT(mTilesPositions, ElementsAre(TilePosition(0, 0))); } TEST_F(DetourNavigatorGetTilesPositionsTest, for_object_with_x_bounds_in_two_tiles_should_return_two_tiles) { - getTilesPositions(makeTilesPositionsRange(osg::Vec3f(0, 0, 0), osg::Vec3f(32, 31, 1), mSettings), mCollect); + getTilesPositions(makeTilesPositionsRange(osg::Vec2f(0, 0), osg::Vec2f(32, 31), mSettings), mCollect); EXPECT_THAT(mTilesPositions, ElementsAre(TilePosition(0, 0), TilePosition(1, 0))); } TEST_F(DetourNavigatorGetTilesPositionsTest, for_object_with_y_bounds_in_two_tiles_should_return_two_tiles) { - getTilesPositions(makeTilesPositionsRange(osg::Vec3f(0, 0, 0), osg::Vec3f(31, 32, 1), mSettings), mCollect); + getTilesPositions(makeTilesPositionsRange(osg::Vec2f(0, 0), osg::Vec2f(31, 32), mSettings), mCollect); EXPECT_THAT(mTilesPositions, ElementsAre(TilePosition(0, 0), TilePosition(0, 1))); } TEST_F(DetourNavigatorGetTilesPositionsTest, tiling_works_only_for_x_and_y_coordinates) { - getTilesPositions(makeTilesPositionsRange(osg::Vec3f(0, 0, 0), osg::Vec3f(31, 31, 32), mSettings), mCollect); + getTilesPositions(makeTilesPositionsRange(osg::Vec2f(0, 0), osg::Vec2f(31, 31), mSettings), mCollect); EXPECT_THAT(mTilesPositions, ElementsAre(TilePosition(0, 0))); } TEST_F(DetourNavigatorGetTilesPositionsTest, tiling_should_work_with_negative_coordinates) { - getTilesPositions(makeTilesPositionsRange(osg::Vec3f(-31, -31, 0), osg::Vec3f(31, 31, 1), mSettings), mCollect); + getTilesPositions(makeTilesPositionsRange(osg::Vec2f(-31, -31), osg::Vec2f(31, 31), mSettings), mCollect); EXPECT_THAT(mTilesPositions, ElementsAre( TilePosition(-1, -1), @@ -79,7 +79,7 @@ namespace { mSettings.mBorderSize = 1; - getTilesPositions(makeTilesPositionsRange(osg::Vec3f(0, 0, 0), osg::Vec3f(31.5, 31.5, 1), mSettings), mCollect); + getTilesPositions(makeTilesPositionsRange(osg::Vec2f(0, 0), osg::Vec2f(31.5, 31.5), mSettings), mCollect); EXPECT_THAT(mTilesPositions, ElementsAre( TilePosition(-1, -1), @@ -98,7 +98,7 @@ namespace { mSettings.mRecastScaleFactor = 0.5; - getTilesPositions(makeTilesPositionsRange(osg::Vec3f(0, 0, 0), osg::Vec3f(32, 32, 1), mSettings), mCollect); + getTilesPositions(makeTilesPositionsRange(osg::Vec2f(0, 0), osg::Vec2f(32, 32), mSettings), mCollect); EXPECT_THAT(mTilesPositions, ElementsAre(TilePosition(0, 0))); } diff --git a/components/detournavigator/gettilespositions.cpp b/components/detournavigator/gettilespositions.cpp index d427eb3e12..4bf5159a88 100644 --- a/components/detournavigator/gettilespositions.cpp +++ b/components/detournavigator/gettilespositions.cpp @@ -2,6 +2,7 @@ #include "settings.hpp" #include "settingsutils.hpp" #include "tileposition.hpp" +#include "tilebounds.hpp" #include @@ -9,15 +10,15 @@ namespace DetourNavigator { - TilesPositionsRange makeTilesPositionsRange(const osg::Vec3f& aabbMin, const osg::Vec3f& aabbMax, + TilesPositionsRange makeTilesPositionsRange(const osg::Vec2f& aabbMin, const osg::Vec2f& aabbMax, const RecastSettings& settings) { - osg::Vec3f min = toNavMeshCoordinates(settings, aabbMin); - osg::Vec3f max = toNavMeshCoordinates(settings, aabbMax); + osg::Vec2f min = toNavMeshCoordinates(settings, aabbMin); + osg::Vec2f max = toNavMeshCoordinates(settings, aabbMax); const float border = getBorderSize(settings); - min -= osg::Vec3f(border, border, border); - max += osg::Vec3f(border, border, border); + min -= osg::Vec2f(border, border); + max += osg::Vec2f(border, border); TilePosition minTile = getTilePosition(settings, min); TilePosition maxTile = getTilePosition(settings, max); @@ -34,18 +35,13 @@ namespace DetourNavigator TilesPositionsRange makeTilesPositionsRange(const btCollisionShape& shape, const btTransform& transform, const RecastSettings& settings) { - btVector3 aabbMin; - btVector3 aabbMax; - shape.getAabb(transform, aabbMin, aabbMax); - - return makeTilesPositionsRange(Misc::Convert::toOsg(aabbMin), Misc::Convert::toOsg(aabbMax), settings); + const TileBounds bounds = makeObjectTileBounds(shape, transform); + return makeTilesPositionsRange(bounds.mMin, bounds.mMax, settings); } TilesPositionsRange makeTilesPositionsRange(const int cellSize, const btVector3& shift, const RecastSettings& settings) { - using Misc::Convert::toOsg; - const int halfCellSize = cellSize / 2; const btTransform transform(btMatrix3x3::getIdentity(), shift); btVector3 aabbMin = transform(btVector3(-halfCellSize, -halfCellSize, 0)); @@ -57,6 +53,6 @@ namespace DetourNavigator aabbMax.setX(std::max(aabbMin.x(), aabbMax.x())); aabbMax.setY(std::max(aabbMin.y(), aabbMax.y())); - return makeTilesPositionsRange(toOsg(aabbMin), toOsg(aabbMax), settings); + return makeTilesPositionsRange(Misc::Convert::toOsgXY(aabbMin), Misc::Convert::toOsgXY(aabbMax), settings); } } diff --git a/components/detournavigator/gettilespositions.hpp b/components/detournavigator/gettilespositions.hpp index 946f3e64f2..8a8b2b7c32 100644 --- a/components/detournavigator/gettilespositions.hpp +++ b/components/detournavigator/gettilespositions.hpp @@ -9,7 +9,7 @@ class btCollisionShape; namespace osg { - class Vec3f; + class Vec2f; } namespace DetourNavigator @@ -22,8 +22,8 @@ namespace DetourNavigator TilePosition mMax; }; - TilesPositionsRange makeTilesPositionsRange(const osg::Vec3f& aabbMin, - const osg::Vec3f& aabbMax, const RecastSettings& settings); + TilesPositionsRange makeTilesPositionsRange(const osg::Vec2f& aabbMin, + const osg::Vec2f& aabbMax, const RecastSettings& settings); TilesPositionsRange makeTilesPositionsRange(const btCollisionShape& shape, const btTransform& transform, const RecastSettings& settings); diff --git a/components/detournavigator/tilebounds.hpp b/components/detournavigator/tilebounds.hpp index 693a382740..79f6370ff2 100644 --- a/components/detournavigator/tilebounds.hpp +++ b/components/detournavigator/tilebounds.hpp @@ -1,9 +1,14 @@ #ifndef OPENMW_COMPONENTS_DETOURNAVIGATOR_TILEBOUNDS_H #define OPENMW_COMPONENTS_DETOURNAVIGATOR_TILEBOUNDS_H +#include + #include #include +#include +#include + #include #include #include @@ -41,6 +46,14 @@ namespace DetourNavigator osg::Vec2f(position.x() + 1, position.y() + 1) * size }; } + + inline TileBounds makeObjectTileBounds(const btCollisionShape& shape, const btTransform& transform) + { + btVector3 aabbMin; + btVector3 aabbMax; + shape.getAabb(transform, aabbMin, aabbMax); + return TileBounds {Misc::Convert::toOsgXY(aabbMin), Misc::Convert::toOsgXY(aabbMax)}; + } } #endif diff --git a/components/misc/convert.hpp b/components/misc/convert.hpp index f31f1cc08e..0b84c32059 100644 --- a/components/misc/convert.hpp +++ b/components/misc/convert.hpp @@ -70,6 +70,11 @@ namespace Misc::Convert { return btTransform(makeBulletQuaternion(position), toBullet(position.asVec3())); } + + inline osg::Vec2f toOsgXY(const btVector3& value) + { + return osg::Vec2f(static_cast(value.x()), static_cast(value.y())); + } } -#endif \ No newline at end of file +#endif