MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / AddTileInternal

Method AddTileInternal

Source/Engine/Navigation/NavMeshRuntime.cpp:648–699  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

646}
647
648void NavMeshRuntime::AddTileInternal(NavMesh* navMesh, NavMeshTileData& tileData)
649{
650 // Check if that tile has been added to navmesh
651 NavMeshTile* tile = nullptr;
652 const auto tileRef = _navMesh->getTileRefAt(tileData.PosX, tileData.PosY, tileData.Layer);
653 if (tileRef)
654 {
655 // Remove any existing tile at that location
656 if (dtStatusFailed(_navMesh->removeTile(tileRef, nullptr, nullptr)))
657 {
658 LOG(Warning, "Failed to remove tile from navmesh {0}", Properties.Name);
659 }
660
661 // Reuse tile data container
662 for (int32 i = 0; i < _tiles.Count(); i++)
663 {
664 auto& e = _tiles[i];
665 if (e.X == tileData.PosX && e.Y == tileData.PosY && e.Layer == tileData.Layer)
666 {
667 tile = &e;
668 break;
669 }
670 }
671 }
672 if (!tile)
673 {
674 // Add tile
675 tile = &_tiles.AddOne();
676 }
677
678 // Copy tile properties
679 tile->NavMesh = navMesh;
680 tile->X = tileData.PosX;
681 tile->Y = tileData.PosY;
682 tile->Layer = tileData.Layer;
683#if USE_DATA_LINK
684 tile->Data.Link(tileData.Data);
685#else
686 tile->Data.Copy(tileData.Data);
687#endif
688
689 // Add tile to navmesh
690 GET_NAV_TILE_DATA(*tile);
691 const auto result = _navMesh->addTile(data, dataSize, flags, 0, nullptr);
692 if (dtStatusFailed(result))
693 {
694 LOG(Warning, "Could not add tile ({2}x{3}, layer {4}) to navmesh {0} (error: {1})", Properties.Name, result & ~DT_FAILURE, tileData.PosX, tileData.PosY, tileData.Layer);
695#if USE_NAV_MESH_ALLOC
696 dtFree(data);
697#endif
698 }
699}

Callers

nothing calls this directly

Calls 9

dtStatusFailedFunction · 0.85
dtFreeFunction · 0.85
getTileRefAtMethod · 0.80
AddOneMethod · 0.80
removeTileMethod · 0.45
CountMethod · 0.45
LinkMethod · 0.45
CopyMethod · 0.45
addTileMethod · 0.45

Tested by

no test coverage detected