summaryrefslogtreecommitdiff
path: root/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Graphs/Navmesh/Jobs/JobTransformTileCoordinates.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2024-05-23 10:08:29 +0800
committerchai <215380520@qq.com>2024-05-23 10:08:29 +0800
commit8722a9920c1f6119bf6e769cba270e63097f8e25 (patch)
tree2eaf9865de7fb1404546de4a4296553d8f68cc3b /Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Graphs/Navmesh/Jobs/JobTransformTileCoordinates.cs
parent3ba4020b69e5971bb0df7ee08b31d10ea4d01937 (diff)
+ astar project
Diffstat (limited to 'Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Graphs/Navmesh/Jobs/JobTransformTileCoordinates.cs')
-rw-r--r--Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Graphs/Navmesh/Jobs/JobTransformTileCoordinates.cs32
1 files changed, 32 insertions, 0 deletions
diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Graphs/Navmesh/Jobs/JobTransformTileCoordinates.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Graphs/Navmesh/Jobs/JobTransformTileCoordinates.cs
new file mode 100644
index 0000000..b5b1a67
--- /dev/null
+++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Graphs/Navmesh/Jobs/JobTransformTileCoordinates.cs
@@ -0,0 +1,32 @@
+using Unity.Burst;
+using Unity.Collections.LowLevel.Unsafe;
+using Unity.Jobs;
+using UnityEngine;
+
+namespace Pathfinding.Graphs.Navmesh.Jobs {
+ /// <summary>
+ /// Transforms vertices from voxel coordinates to tile coordinates.
+ ///
+ /// This essentially constitutes multiplying the vertices by the <see cref="matrix"/>.
+ ///
+ /// Note: The input space is in raw voxel coordinates, the output space is in tile coordinates stored in millimeters (as is typical for the Int3 struct. See <see cref="Int3.Precision"/>).
+ /// </summary>
+ [BurstCompile(FloatMode = FloatMode.Fast)]
+ public struct JobTransformTileCoordinates : IJob {
+ /// <summary>Element type Int3</summary>
+ public unsafe UnsafeAppendBuffer* vertices;
+ public Matrix4x4 matrix;
+
+ public void Execute () {
+ unsafe {
+ int vertexCount = vertices->Length / UnsafeUtility.SizeOf<Int3>();
+ for (int i = 0; i < vertexCount; i++) {
+ // Transform from voxel indices to a proper Int3 coordinate, then convert it to a Vector3 float coordinate
+ var vPtr1 = (Int3*)vertices->Ptr + i;
+ var p = new Vector3(vPtr1->x, vPtr1->y, vPtr1->z);
+ *vPtr1 = (Int3)matrix.MultiplyPoint3x4(p);
+ }
+ }
+ }
+ }
+}