#include "filesystem.hpp"
#include "TokenStreamReader.hpp"
+#include "../app/error.hpp"
#include <cctype>
#include <cstring>
in.ReadIdentifier(name);
in.Skip(Token::EQUALS);
if (name == "chunk") {
- in.ReadVec(state.chunk_pos);
+ in.ReadVec(state.pos.chunk);
} else if (name == "position") {
- in.ReadVec(state.block_pos);
+ in.ReadVec(state.pos.block);
} else if (name == "orientation") {
in.ReadQuat(state.orient);
+ } else if (name == "pitch") {
+ state.pitch = in.GetFloat();
+ } else if (name == "yaw") {
+ state.yaw = in.GetFloat();
} else if (name == "slot") {
int slot;
in.ReadNumber(slot);
}
}
player.GetEntity().SetState(state);
+ player.Update(0);
}
void WorldSave::Write(const Player &player) const {
}
const EntityState &state = player.GetEntity().GetState();
ofstream out(PlayerPath(player));
- out << "chunk = " << state.chunk_pos << ';' << endl;
- out << "position = " << state.block_pos << ';' << endl;
+ out << "chunk = " << state.pos.chunk << ';' << endl;
+ out << "position = " << state.pos.block << ';' << endl;
out << "orientation = " << state.orient << ';' << endl;
+ out << "pitch = " << state.pitch << ';' << endl;
+ out << "yaw = " << state.yaw << ';' << endl;
out << "slot = " << player.GetInventorySlot() << ';' << endl;
}
}
-bool WorldSave::Exists(const Chunk::Pos &pos) const noexcept {
+bool WorldSave::Exists(const ExactLocation::Coarse &pos) const noexcept {
return is_file(ChunkPath(pos));
}
if (gzclose(file) != Z_OK) {
throw runtime_error("failed to read chunk file");
}
- chunk.InvalidateModel();
+ chunk.ScanActive();
+ chunk.InvalidateMesh();
chunk.ClearSave();
}
// check if it's because of a missing path component
if (errno != ENOENT) {
// nope, fatal
- throw runtime_error(strerror(errno));
+ throw SysError();
}
string dir_path(path);
dir_path.erase(dir_path.find_last_of("\\/"));
}
-const char *WorldSave::ChunkPath(const Chunk::Pos &pos) const {
+const char *WorldSave::ChunkPath(const ExactLocation::Coarse &pos) const {
snprintf(chunk_buf.get(), chunk_bufsiz, chunk_path.c_str(), pos.x, pos.y, pos.z);
return chunk_buf.get();
}