Let navigation mesh use same type for Index
[platform/core/uifw/dali-toolkit.git] / dali-scene3d / internal / algorithm / navigation-mesh-impl.h
index 2ba1b6d..f1db5db 100644 (file)
  * limitations under the License.
  */
 
-// INTERNAL INCLUDES
-#include <dali-scene3d/public-api/algorithm/navigation-mesh.h>
-#include <dali-scene3d/public-api/algorithm/path-finder.h>
-
-// INTERNAL EXTERNAL
+// EXTERNAL EXTERNAL
 #include <dali/public-api/actors/actor.h>
+#include <dali/public-api/common/vector-wrapper.h>
 #include <dali/public-api/math/matrix.h>
 #include <dali/public-api/math/vector3.h>
 #include <dali/public-api/math/vector4.h>
 #include <cinttypes>
 #include <cstdio>
 #include <mutex>
-#include <vector>
-#include "navigation-mesh-header.h"
+
+// INTERNAL INCLUDES
+#include <dali-scene3d/internal/algorithm/navigation-mesh-header.h>
+#include <dali-scene3d/public-api/algorithm/navigation-mesh.h>
+#include <dali-scene3d/public-api/algorithm/path-finder.h>
 
 namespace Dali::Scene3D::Loader
 {
@@ -40,9 +40,13 @@ class NavigationMeshFactory;
 
 namespace Dali::Scene3D::Internal::Algorithm
 {
-
 class NavigationRay;
 
+// Make each to change each index value's type here.
+using VertexIndex = Dali::Scene3D::Algorithm::VertexIndex;
+using EdgeIndex   = Dali::Scene3D::Algorithm::EdgeIndex;
+using FaceIndex   = Dali::Scene3D::Algorithm::FaceIndex;
+
 /**
  * @class NavigationMesh
  */
@@ -54,7 +58,6 @@ public:
   using Vertex = Dali::Scene3D::Algorithm::NavigationMesh::Vertex;
 
 private:
-
   friend class Scene3D::Loader::NavigationMeshFactory;
 
   /**
@@ -63,7 +66,6 @@ private:
   NavigationMesh(const std::vector<uint8_t>& buffer);
 
 public:
-
   /**
    * Destructor
    */
@@ -76,7 +78,7 @@ public:
   {
     Dali::Vector3 point;
     float         distance;
-    uint16_t      faceIndex;
+    FaceIndex     faceIndex;
     bool          result;
   };
 
@@ -96,15 +98,9 @@ public:
   [[nodiscard]] uint32_t GetVertexCount() const;
 
   /**
-   * Looks for floor only within the face
-   * @param[in] position Position to be projected onto the face
-   * @param[in] faceIndex Face index
-   * @param[in] dontCheckNeighbours states whether to traverse onto neighbouring faces
-   * @param[out] outPosition Output position
-   *
-   * @return true if success
+   * @copydoc Dali::Scene3D::Algorithm::NavigationMesh::FindFloorForFace()
    */
-  bool FindFloorForFace(const Dali::Vector3& position, uint32_t faceIndex, bool dontCheckNeighbours, Dali::Vector3& outPosition);
+  bool FindFloorForFace(const Dali::Vector3& position, FaceIndex faceIndex, bool dontCheckNeighbours, Dali::Vector3& outPosition);
 
   /**
    * @copydoc Dali::Scene3D::Algorithm::NavigationMesh::FindFloor()
@@ -114,22 +110,22 @@ public:
   /**
    * @copydoc Dali::Scene3D::Algorithm::NavigationMesh::FindFloor()
    */
-  bool FindFloor(const Dali::Vector3& position, Dali::Vector3& outPosition, uint32_t& faceIndex);
+  bool FindFloor(const Dali::Vector3& position, Dali::Vector3& outPosition, FaceIndex& faceIndex);
 
   /**
    * @copydoc Dali::Scene3D::Algorithm::NavigationMesh::GetFace()
    */
-  [[nodiscard]] const Face* GetFace(int index) const;
+  [[nodiscard]] const Face* GetFace(FaceIndex index) const;
 
   /**
    * @copydoc Dali::Scene3D::Algorithm::NavigationMesh::GetEdge()
    */
-  [[nodiscard]] const Edge* GetEdge(int index) const;
+  [[nodiscard]] const Edge* GetEdge(EdgeIndex index) const;
 
   /**
    * @copydoc Dali::Scene3D::Algorithm::NavigationMesh::GetVertex()
    */
-  [[nodiscard]] const Vertex* GetVertex(int index) const;
+  [[nodiscard]] const Vertex* GetVertex(VertexIndex index) const;
 
   /**
    * @copydoc Dali::Scene3D::Algorithm::NavigationMesh::SetSceneTransform()
@@ -139,17 +135,17 @@ public:
   /**
    * Tests intersection between navigation ray and face
    */
-  IntersectResult NavigationRayFaceIntersection(NavigationRay& ray, const Face& face);
+  IntersectResult NavigationRayFaceIntersection(NavigationRay& ray, const Face& face) const;
 
   /**
    * @copydoc Dali::Scene3D::Algorithm::NavigationMesh::PointSceneToLocal()
    */
-  Dali::Vector3 PointSceneToLocal(const Dali::Vector3& point);
+  Dali::Vector3 PointSceneToLocal(const Dali::Vector3& point) const;
 
   /**
    * @copydoc Dali::Scene3D::Algorithm::NavigationMesh::PointLocalToScene()
    */
-  Dali::Vector3 PointLocalToScene(const Dali::Vector3& point);
+  Dali::Vector3 PointLocalToScene(const Dali::Vector3& point) const;
 
   /**
    * @copydoc Dali::Scene3D::Algorithm::NavigationMesh::GetGravityVector()
@@ -157,11 +153,11 @@ public:
   [[nodiscard]] Dali::Vector3 GetGravityVector() const;
 
 private:
-  std::vector<uint8_t> mBuffer;                    //< Data buffer
-  NavigationMeshHeader_V10 mHeader;                //< Navigation mesh header
-  uint16_t             mCurrentFace;               //< Current face (last floor position)
-  Dali::Matrix         mTransform;                 //< Transform matrix
-  Dali::Matrix         mTransformInverse;          //< Inverse of the transform matrix
+  std::vector<uint8_t>     mBuffer;           //< Data buffer
+  NavigationMeshHeader_V10 mHeader;           //< Navigation mesh header
+  FaceIndex                mCurrentFace;      //< Current face (last floor position)
+  Dali::Matrix             mTransform;        //< Transform matrix
+  Dali::Matrix             mTransformInverse; //< Inverse of the transform matrix
 };
 
 inline Internal::Algorithm::NavigationMesh& GetImplementation(Dali::Scene3D::Algorithm::NavigationMesh& navigationMesh)