41 lines
1.1 KiB
C++
41 lines
1.1 KiB
C++
#include "World.h"
|
|
|
|
#include "../files/WorldFiles.h"
|
|
#include "../voxels/Chunk.h"
|
|
#include "../voxels/Chunks.h"
|
|
#include "Level.h"
|
|
#include "../objects/Player.h"
|
|
#include "../physics/PhysicsSolver.h"
|
|
#include "../window/Camera.h"
|
|
|
|
World::World(std::string name, std::string directory, int seed) : name(name), seed(seed) {
|
|
wfile = new WorldFiles(directory, REGION_VOL * (CHUNK_VOL * 2 + 8));
|
|
}
|
|
|
|
World::~World(){
|
|
delete wfile;
|
|
}
|
|
|
|
void World::write(Level* level) {
|
|
Chunks* chunks = level->chunks;
|
|
|
|
for (unsigned int i = 0; i < chunks->volume; i++) {
|
|
Chunk* chunk = chunks->chunks[i];
|
|
if (chunk == nullptr || !chunk->isUnsaved())
|
|
continue;
|
|
wfile->put((const char*)chunk->voxels, chunk->x, chunk->z);
|
|
}
|
|
|
|
wfile->write();
|
|
wfile->writePlayer(level->player);
|
|
}
|
|
|
|
Level* World::loadLevel(Player* player) {
|
|
Level* level = new Level(this, player, new Chunks(56, 56, 0, 0), new PhysicsSolver(vec3(0, -19.6f, 0)));
|
|
wfile->readPlayer(player);
|
|
|
|
Camera* camera = player->camera;
|
|
camera->rotation = mat4(1.0f);
|
|
camera->rotate(player->camY, player->camX, 0);
|
|
return level;
|
|
} |