2023-03-14 08:02:43 +03:00
|
|
|
/*
|
|
|
|
Copyright (c) 2009-2010 Mikko Mononen memon@inside.org
|
|
|
|
recast4j copyright (c) 2015-2019 Piotr Piastucki piotr@jtilia.org
|
2023-03-15 17:00:29 +03:00
|
|
|
DotRecast Copyright (c) 2023 Choi Ikpil ikpil@naver.com
|
2023-03-14 08:02:43 +03:00
|
|
|
|
|
|
|
This software is provided 'as-is', without any express or implied
|
|
|
|
warranty. In no event will the authors be held liable for any damages
|
|
|
|
arising from the use of this software.
|
|
|
|
Permission is granted to anyone to use this software for any purpose,
|
|
|
|
including commercial applications, and to alter it and redistribute it
|
|
|
|
freely, subject to the following restrictions:
|
|
|
|
1. The origin of this software must not be misrepresented; you must not
|
|
|
|
claim that you wrote the original software. If you use this software
|
|
|
|
in a product, an acknowledgment in the product documentation would be
|
|
|
|
appreciated but is not required.
|
|
|
|
2. Altered source versions must be plainly marked as such, and must not be
|
|
|
|
misrepresented as being the original software.
|
|
|
|
3. This notice may not be removed or altered from any source distribution.
|
|
|
|
*/
|
|
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.IO;
|
|
|
|
using DotRecast.Core;
|
2023-04-23 08:13:10 +03:00
|
|
|
using DotRecast.Detour.QueryResults;
|
2023-03-14 08:02:43 +03:00
|
|
|
using DotRecast.Detour.TileCache.Io;
|
|
|
|
using NUnit.Framework;
|
|
|
|
|
|
|
|
namespace DotRecast.Detour.TileCache.Test;
|
|
|
|
|
2023-03-16 19:48:49 +03:00
|
|
|
public class TileCacheFindPathTest : AbstractTileCacheTest
|
|
|
|
{
|
2023-03-29 18:59:00 +03:00
|
|
|
private readonly Vector3f start = Vector3f.Of(39.44734f, 9.998177f, -0.784811f);
|
|
|
|
private readonly Vector3f end = Vector3f.Of(19.292645f, 11.611748f, -57.750366f);
|
2023-03-14 08:02:43 +03:00
|
|
|
private readonly NavMesh navmesh;
|
|
|
|
private readonly NavMeshQuery query;
|
|
|
|
|
2023-03-16 19:48:49 +03:00
|
|
|
public TileCacheFindPathTest()
|
|
|
|
{
|
2023-03-14 08:02:43 +03:00
|
|
|
using var msis = new MemoryStream(Loader.ToBytes("dungeon_all_tiles_tilecache.bin"));
|
|
|
|
using var @is = new BinaryReader(msis);
|
|
|
|
TileCache tcC = new TileCacheReader().read(@is, 6, new TestTileCacheMeshProcess());
|
|
|
|
navmesh = tcC.getNavMesh();
|
|
|
|
query = new NavMeshQuery(navmesh);
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
2023-03-16 19:48:49 +03:00
|
|
|
public void testFindPath()
|
|
|
|
{
|
2023-03-14 08:02:43 +03:00
|
|
|
QueryFilter filter = new DefaultQueryFilter();
|
2023-03-29 18:59:00 +03:00
|
|
|
Vector3f extents = Vector3f.Of(2f, 4f, 2f);
|
2023-03-14 08:02:43 +03:00
|
|
|
Result<FindNearestPolyResult> findPolyStart = query.findNearestPoly(start, extents, filter);
|
|
|
|
Result<FindNearestPolyResult> findPolyEnd = query.findNearestPoly(end, extents, filter);
|
|
|
|
long startRef = findPolyStart.result.getNearestRef();
|
|
|
|
long endRef = findPolyEnd.result.getNearestRef();
|
2023-03-29 18:59:00 +03:00
|
|
|
Vector3f startPos = findPolyStart.result.getNearestPos();
|
|
|
|
Vector3f endPos = findPolyEnd.result.getNearestPos();
|
2023-03-14 08:02:43 +03:00
|
|
|
Result<List<long>> path = query.findPath(startRef, endRef, startPos, endPos, filter);
|
|
|
|
int maxStraightPath = 256;
|
|
|
|
int options = 0;
|
2023-03-29 18:59:00 +03:00
|
|
|
Result<List<StraightPathItem>> pathStr = query.findStraightPath(startPos, endPos, path.result, maxStraightPath, options);
|
2023-03-14 08:02:43 +03:00
|
|
|
Assert.That(pathStr.result.Count, Is.EqualTo(8));
|
|
|
|
}
|
|
|
|
}
|