| 1525 | }; |
| 1526 | |
| 1527 | bool NavMesh::load() |
| 1528 | { |
| 1529 | if(!dStrlen(mFileName)) |
| 1530 | return false; |
| 1531 | |
| 1532 | FileStream stream; |
| 1533 | if(!stream.open(mFileName, Torque::FS::File::Read)) |
| 1534 | { |
| 1535 | Con::errorf("Could not open file %s when loading navmesh %s.", |
| 1536 | mFileName, getName() ? getName() : getIdString()); |
| 1537 | return false; |
| 1538 | } |
| 1539 | |
| 1540 | // Read header. |
| 1541 | NavMeshSetHeader header; |
| 1542 | stream.read(sizeof(NavMeshSetHeader), (char*)&header); |
| 1543 | if(header.magic != NAVMESHSET_MAGIC) |
| 1544 | { |
| 1545 | stream.close(); |
| 1546 | Con::errorf("Navmesh magic incorrect when loading navmesh %s; possible corrupt navmesh file %s.", |
| 1547 | getName() ? getName() : getIdString(), mFileName); |
| 1548 | return false; |
| 1549 | } |
| 1550 | if(header.version != NAVMESHSET_VERSION) |
| 1551 | { |
| 1552 | stream.close(); |
| 1553 | Con::errorf("Navmesh version incorrect when loading navmesh %s; possible corrupt navmesh file %s.", |
| 1554 | getName() ? getName() : getIdString(), mFileName); |
| 1555 | return false; |
| 1556 | } |
| 1557 | |
| 1558 | if(nm) |
| 1559 | dtFreeNavMesh(nm); |
| 1560 | nm = dtAllocNavMesh(); |
| 1561 | if(!nm) |
| 1562 | { |
| 1563 | stream.close(); |
| 1564 | Con::errorf("Out of memory when loading navmesh %s.", |
| 1565 | getName() ? getName() : getIdString()); |
| 1566 | return false; |
| 1567 | } |
| 1568 | |
| 1569 | dtStatus status = nm->init(&header.params); |
| 1570 | if(dtStatusFailed(status)) |
| 1571 | { |
| 1572 | stream.close(); |
| 1573 | Con::errorf("Failed to initialise navmesh params when loading navmesh %s.", |
| 1574 | getName() ? getName() : getIdString()); |
| 1575 | return false; |
| 1576 | } |
| 1577 | |
| 1578 | // Read tiles. |
| 1579 | for(U32 i = 0; i < header.numTiles; ++i) |
| 1580 | { |
| 1581 | NavMeshTileHeader tileHeader; |
| 1582 | stream.read(sizeof(NavMeshTileHeader), (char*)&tileHeader); |
| 1583 | if(!tileHeader.tileRef || !tileHeader.dataSize) |
| 1584 | break; |
no test coverage detected