Sample_TileMesh::Sample_TileMesh() : m_keepInterResults(false), m_buildAll(true), m_totalBuildTimeMs(0), m_triareas(0), m_solid(0), m_chf(0), m_cset(0), m_pmesh(0), m_dmesh(0), m_drawMode(DRAWMODE_NAVMESH), m_maxTiles(0), m_maxPolysPerTile(0), m_tileSize(32), m_tileCol(duRGBA(0,0,0,32)), m_tileBuildTime(0), m_tileMemUsage(0), m_tileTriCount(0) { resetCommonSettings(); memset(m_lastBuiltTileBmin, 0, sizeof(m_lastBuiltTileBmin)); memset(m_lastBuiltTileBmax, 0, sizeof(m_lastBuiltTileBmax)); setTool(new NavMeshTileTool); }
Sample::Sample() : m_geom(0), m_navMesh(0), m_navQuery(0), m_navMeshDrawFlags(DU_DRAWNAVMESH_OFFMESHCONS|DU_DRAWNAVMESH_CLOSEDLIST), m_tool(0), m_ctx(0) { resetCommonSettings(); m_navQuery = dtAllocNavMeshQuery(); }
Sample_Debug::Sample_Debug() : Sample_SoloMeshTiled(), m_hf(0), m_hfCount(0), m_chf(0), m_chfCount(0), m_cset(0), m_csetCount(0), m_pmeshCount(0), m_dmeshCount(0), m_tile(0) { resetCommonSettings(); setTool(new NavMeshTesterTool); }
Sample::Sample() : m_geom(0), m_navMesh(0), m_navQuery(0), m_crowd(0), m_ctx(0) { resetCommonSettings(); m_navQuery = dtAllocNavMeshQuery(); m_crowd = dtAllocCrowd(); }
Sample::Sample() : m_geom(0), m_navMesh(0), m_navQuery(0), m_crowd(0), m_navMeshDrawFlags(DU_DRAWNAVMESH_OFFMESHCONS|DU_DRAWNAVMESH_CLOSEDLIST), m_tool(0), m_ctx(0) { resetCommonSettings(); m_navQuery = dtAllocNavMeshQuery(); m_crowd = dtAllocCrowd(); for (int i = 0; i < MAX_TOOLS; i++) m_toolStates[i] = 0; }
void CMaNGOS_Map::Init() { resetCommonSettings(); memset(m_tileBmin, 0, sizeof(m_tileBmin)); memset(m_tileBmax, 0, sizeof(m_tileBmax)); memset(m_tileFileName, 0, sizeof(m_tileFileName)); m_TileButtonStr = "Click to choose a tile"; ScanFoldersForMaps(); scanFoldersForTiles(); m_MapInfos = new MapInfos(); m_MapInfos->Init(m_mapID, m_ctx); m_navMesh = m_MapInfos->GetNavMesh(); m_navQuery = m_MapInfos->GetNavMeshQuery(); }
Sample_TempObstacles::Sample_TempObstacles() : m_keepInterResults(false), m_tileCache(0), m_cacheBuildTimeMs(0), m_cacheCompressedSize(0), m_cacheRawSize(0), m_cacheLayerCount(0), m_cacheBuildMemUsage(0), m_drawMode(DRAWMODE_NAVMESH), m_maxTiles(0), m_maxPolysPerTile(0), m_tileSize(48) { resetCommonSettings(); m_talloc = new LinearAllocator(32000); m_tcomp = new FastLZCompressor; m_tmproc = new MeshProcess; setTool(new TempObstacleCreateTool); }
void Sample::handleCommonSettings() { if (imguiCheck("TrinityCore Configs", m_trinityCoreValues)) { m_trinityCoreValues = !m_trinityCoreValues; if (m_trinityCoreValues) { m_cellSize = 0.2666666f; m_cellHeight = 0.2666666f; m_agentHeight = 6 * m_cellSize; m_agentRadius = 2 * m_cellSize; m_agentMaxClimb = 8 * m_cellSize; m_agentMaxSlope = 70.0f; m_regionMinSize = 60; m_regionMergeSize = 50; m_edgeMaxLen = 81.0f; m_edgeMaxError = 1.8f; m_vertsPerPoly = 6.0f; m_detailSampleDist = 64; m_detailSampleMaxError = 2.0f; m_partitionType = SAMPLE_PARTITION_WATERSHED; } else resetCommonSettings(); m_ctx->log(RC_LOG_WARNING, "Reload the mesh to update the Bounding Box"); } imguiLabel("Rasterization"); imguiSlider("Cell Size", &m_cellSize, 0.1f, 1.0f, 0.01f); imguiSlider("Cell Height", &m_cellHeight, 0.1f, 1.0f, 0.01f); if (m_geom) { const float* bmin = m_geom->getNavMeshBoundsMin(); const float* bmax = m_geom->getNavMeshBoundsMax(); int gw = 0, gh = 0; rcCalcGridSize(bmin, bmax, m_cellSize, &gw, &gh); char text[64]; snprintf(text, 64, "Voxels %d x %d", gw, gh); imguiValue(text); } imguiSeparator(); imguiLabel("Agent"); imguiSlider("Height", &m_agentHeight, 0.1f, 5.0f, 0.1f); imguiSlider("Radius", &m_agentRadius, 0.0f, 5.0f, 0.1f); imguiSlider("Max Climb", &m_agentMaxClimb, 0.1f, 5.0f, 0.1f); imguiSlider("Max Slope", &m_agentMaxSlope, 0.0f, 90.0f, 1.0f); imguiSeparator(); imguiLabel("Region"); imguiSlider("Min Region Size", &m_regionMinSize, 0.0f, 150.0f, 1.0f); imguiSlider("Merged Region Size", &m_regionMergeSize, 0.0f, 150.0f, 1.0f); imguiSeparator(); imguiLabel("Partitioning"); if (imguiCheck("Watershed", m_partitionType == SAMPLE_PARTITION_WATERSHED)) m_partitionType = SAMPLE_PARTITION_WATERSHED; if (imguiCheck("Monotone", m_partitionType == SAMPLE_PARTITION_MONOTONE)) m_partitionType = SAMPLE_PARTITION_MONOTONE; if (imguiCheck("Layers", m_partitionType == SAMPLE_PARTITION_LAYERS)) m_partitionType = SAMPLE_PARTITION_LAYERS; imguiSeparator(); imguiLabel("Polygonization"); imguiSlider("Max Edge Length", &m_edgeMaxLen, 0.0f, 50.0f, 1.0f); imguiSlider("Max Edge Error", &m_edgeMaxError, 0.1f, 3.0f, 0.1f); imguiSlider("Verts Per Poly", &m_vertsPerPoly, 3.0f, 12.0f, 1.0f); imguiSeparator(); imguiLabel("Detail Mesh"); imguiSlider("Sample Distance", &m_detailSampleDist, 0.0f, 16.0f, 1.0f); imguiSlider("Max Sample Error", &m_detailSampleMaxError, 0.0f, 16.0f, 1.0f); imguiSeparator(); }
Sample_Debug::Sample_Debug() : m_chf(0), m_cset(0), m_pmesh(0) { resetCommonSettings(); // Test /* m_chf = rcAllocCompactHeightfield(); FileIO io; if (!io.openForRead("test.chf")) { delete m_chf; m_chf = 0; } else { if (!duReadCompactHeightfield(*m_chf, &io)) { delete m_chf; m_chf = 0; } }*/ /* if (m_chf) { unsigned short ymin = 0xffff; unsigned short ymax = 0; for (int i = 0; i < m_chf->spanCount; ++i) { const rcCompactSpan& s = m_chf->spans[i]; if (s.y < ymin) ymin = s.y; if (s.y > ymax) ymax = s.y; } printf("ymin=%d ymax=%d\n", (int)ymin, (int)ymax); int maxSpans = 0; for (int i = 0; i < m_chf->width*m_chf->height; ++i) { maxSpans = rcMax(maxSpans, (int)m_chf->cells[i].count); } printf("maxSpans = %d\n", maxSpans); }*/ /* const float orig[3] = {0,0,0}; m_navMesh = new dtNavMesh; m_navMesh->init(orig, 133.333f,133.333f, 2048, 4096, 4096); unsigned char* data = 0; int dataSize = 0; // Tile_-13_-14.bin is basically just the bytes that was output by Detour. It should be loaded at X: -13 and Y: -14. dataSize = loadBin("Tile_-13_-13.bin", &data); if (dataSize > 0) { m_navMesh->addTileAt(-13,-13, data, dataSize, true); dtMeshHeader* header = (dtMeshHeader*)data; vcopy(m_bmin, header->bmin); vcopy(m_bmax, header->bmax); } dataSize = loadBin("Tile_-13_-14.bin", &data); if (dataSize > 0) { m_navMesh->addTileAt(-13,-14, data, dataSize, true); } dataSize = loadBin("Tile_-14_-14.bin", &data); if (dataSize > 0) { m_navMesh->addTileAt(-14,-14, data, dataSize, true); } const float ext[3] = {40,100,40}; const float center[3] = { -1667.9491f, 135.52649f, -1680.6149f }; dtQueryFilter filter; m_ref = m_navMesh->findNearestPoly(center, ext, &filter, 0); vcopy(m_ext, ext); vcopy(m_center, center);*/ { m_cset = rcAllocContourSet(); if (m_cset) { FileIO io; if (io.openForRead("PathSet_TMP_NA_PathingTestAReg1_1_2_CS.rc")) { duReadContourSet(*m_cset, &io); printf("bmin=(%f,%f,%f) bmax=(%f,%f,%f)\n", m_cset->bmin[0], m_cset->bmin[1], m_cset->bmin[2], m_cset->bmax[0], m_cset->bmax[1], m_cset->bmax[2]); printf("cs=%f ch=%f\n", m_cset->cellSizeXZ, m_cset->cellSizeY); } else { printf("could not open test.cset\n"); } } else { printf("Could not alloc cset\n"); } /* if (m_cset) { m_pmesh = rcAllocPolyMesh(); if (m_pmesh) { rcBuildPolyMesh(m_ctx, *m_cset, 6, *m_pmesh); } }*/ } }