-
Notifications
You must be signed in to change notification settings - Fork 0
/
PathFindingWorld.cpp
52 lines (46 loc) · 1.12 KB
/
PathFindingWorld.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "PathFindingWorld.h"
#include <stdexcept>
#include <string>
#include "PathFindingBlockStateUtils.h"
#include <algorithm>
#include <iostream>
PathFindingWorld::PathFindingWorld()
:chunks()
{
chunks.rehash(100000);
}
PathFindingWorld::~PathFindingWorld()
{
for (auto& entry : chunks)
delete entry.second;
}
bool PathFindingWorld::isChunk(ChunkPos pos)
{
return chunks.count(pos) > 0;
}
void PathFindingWorld::addChunk(ChunkPos pos, PathFindingChunk* chunk)
{
if (isChunk(pos))
{
throw std::invalid_argument("There is already a chunk at chunk pos ("
+ std::to_string(pos.x) + " | " + std::to_string(pos.y) + " | " + std::to_string(pos.z) + ")");
}
chunks[pos] = chunk;
}
void PathFindingWorld::removeChunk(ChunkPos pos)
{
chunks.erase(pos);
}
PathFindingBlockState PathFindingWorld::getBlockState(BlockPos pos)
{
auto chunk = chunks[pos.toChunkPos()];
if (chunk == nullptr)
{
return PFBSUtils::createState(false, false, 255, true);
}
return chunk->getBlockState(pos);
}
void PathFindingWorld::setBlockState(BlockPos pos, PathFindingBlockState newState)
{
chunks[pos.toChunkPos()]->setBlockState(pos, newState);
}