refactoring WorldFiles.cpp a bit
This commit is contained in:
+12
-12
@@ -166,18 +166,18 @@ fs::path WorldFiles::getLightsFolder() const {
|
|||||||
return directory/fs::path("lights");
|
return directory/fs::path("lights");
|
||||||
}
|
}
|
||||||
|
|
||||||
fs::path WorldFiles::getRegionFilename(int x, int y) const {
|
fs::path WorldFiles::getRegionFilename(int x, int z) const {
|
||||||
std::string filename = std::to_string(x) + "_" + std::to_string(y) + ".bin";
|
std::string filename = std::to_string(x) + "_" + std::to_string(z) + ".bin";
|
||||||
return fs::path(filename);
|
return fs::path(filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WorldFiles::parseRegionFilename(const std::string& name, int& x, int& y) {
|
bool WorldFiles::parseRegionFilename(const std::string& name, int& x, int& z) {
|
||||||
size_t sep = name.find('_');
|
size_t sep = name.find('_');
|
||||||
if (sep == std::string::npos || sep == 0 || sep == name.length()-1)
|
if (sep == std::string::npos || sep == 0 || sep == name.length()-1)
|
||||||
return false;
|
return false;
|
||||||
try {
|
try {
|
||||||
x = std::stoi(name.substr(0, sep));
|
x = std::stoi(name.substr(0, sep));
|
||||||
y = std::stoi(name.substr(sep+1));
|
z = std::stoi(name.substr(sep+1));
|
||||||
} catch (std::invalid_argument& err) {
|
} catch (std::invalid_argument& err) {
|
||||||
return false;
|
return false;
|
||||||
} catch (std::out_of_range& err) {
|
} catch (std::out_of_range& err) {
|
||||||
@@ -248,7 +248,7 @@ files::rafile* WorldFiles::getRegFile(glm::ivec3 coord, const fs::path& folder)
|
|||||||
auto iter = std::next(openRegFiles.begin(), rand() % openRegFiles.size());
|
auto iter = std::next(openRegFiles.begin(), rand() % openRegFiles.size());
|
||||||
openRegFiles.erase(iter);
|
openRegFiles.erase(iter);
|
||||||
}
|
}
|
||||||
fs::path filename = folder/getRegionFilename(coord.x, coord.y);
|
fs::path filename = folder / getRegionFilename(coord[0], coord[1]);
|
||||||
if (!fs::is_regular_file(filename)) {
|
if (!fs::is_regular_file(filename)) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@@ -297,25 +297,25 @@ ubyte* WorldFiles::readChunkData(int x,
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldFiles::fetchChunks(WorldRegion* region, int x, int y, fs::path folder, int layer) {
|
void WorldFiles::fetchChunks(WorldRegion* region, int x, int z, fs::path folder, int layer) {
|
||||||
ubyte** chunks = region->getChunks();
|
ubyte** chunks = region->getChunks();
|
||||||
uint32_t* sizes = region->getSizes();
|
uint32_t* sizes = region->getSizes();
|
||||||
|
|
||||||
for (size_t i = 0; i < REGION_CHUNKS_COUNT; i++) {
|
for (size_t i = 0; i < REGION_CHUNKS_COUNT; i++) {
|
||||||
int chunk_x = (i % REGION_SIZE) + x * REGION_SIZE;
|
int chunk_x = (i % REGION_SIZE) + x * REGION_SIZE;
|
||||||
int chunk_z = (i / REGION_SIZE) + y * REGION_SIZE;
|
int chunk_z = (i / REGION_SIZE) + z * REGION_SIZE;
|
||||||
if (chunks[i] == nullptr) {
|
if (chunks[i] == nullptr) {
|
||||||
chunks[i] = readChunkData(chunk_x, chunk_z, sizes[i], folder, layer);
|
chunks[i] = readChunkData(chunk_x, chunk_z, sizes[i], folder, layer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldFiles::writeRegion(int x, int y, WorldRegion* entry, fs::path folder, int layer){
|
void WorldFiles::writeRegion(int x, int z, WorldRegion* entry, fs::path folder, int layer){
|
||||||
fs::path filename = folder/getRegionFilename(x, y);
|
fs::path filename = folder/getRegionFilename(x, z);
|
||||||
|
|
||||||
glm::ivec3 regcoord(x, y, layer);
|
glm::ivec3 regcoord(x, z, layer);
|
||||||
if (getRegFile(regcoord, folder)) {
|
if (getRegFile(regcoord, folder)) {
|
||||||
fetchChunks(entry, x, y, folder, layer);
|
fetchChunks(entry, x, z, folder, layer);
|
||||||
openRegFiles.erase(regcoord);
|
openRegFiles.erase(regcoord);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -359,7 +359,7 @@ void WorldFiles::writeRegions(regionsmap& regions, const fs::path& folder, int l
|
|||||||
if (region->getChunks() == nullptr || !region->isUnsaved())
|
if (region->getChunks() == nullptr || !region->isUnsaved())
|
||||||
continue;
|
continue;
|
||||||
glm::ivec2 key = it.first;
|
glm::ivec2 key = it.first;
|
||||||
writeRegion(key.x, key.y, region, folder, layer);
|
writeRegion(key[0], key[1], region, folder, layer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user