|
|
|
@@ -49,8 +49,6 @@ void World::RemoveChunk(int nbReduit)
|
|
|
|
|
if (x > WORLD_SIZE_X - nbReduit)
|
|
|
|
|
chk = m_chunks.Remove(x, y);
|
|
|
|
|
|
|
|
|
|
// TODO: MakeDirty() les voisins pour qu'ils se redessinent.
|
|
|
|
|
|
|
|
|
|
if (!chk)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
@@ -167,7 +165,6 @@ void World::GetScope(unsigned int& x, unsigned int& y) {
|
|
|
|
|
|
|
|
|
|
void World::Update(Bullet* bullets[MAX_BULLETS], const Vector3f& player_pos, BlockInfo* blockinfo[BTYPE_LAST]) {
|
|
|
|
|
UpdateWorld(player_pos, blockinfo);
|
|
|
|
|
//TransposeWorld(player_pos, bullets);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
netprot::ChunkMod* World::ChangeBlockAtCursor(BlockType blockType, const Vector3f& player_pos, const Vector3f& player_dir, bool& block, bool net) {
|
|
|
|
@@ -258,7 +255,6 @@ void World::UpdateWorld(const Vector3f& player, BlockInfo* blockinfo[BTYPE_LAST]
|
|
|
|
|
int side = 0;
|
|
|
|
|
int threads = 0;
|
|
|
|
|
std::future<Chunk*> genThList[THREADS_GENERATE_CHUNKS];
|
|
|
|
|
//std::future<void> delThList[THREADS_DELETE_CHUNKS];
|
|
|
|
|
|
|
|
|
|
if (frameGenerate > 0) --frameGenerate;
|
|
|
|
|
if (frameUpdate > 0) --frameUpdate;
|
|
|
|
@@ -349,101 +345,6 @@ void World::UpdateWorld(const Vector3f& player, BlockInfo* blockinfo[BTYPE_LAST]
|
|
|
|
|
|
|
|
|
|
side = 0;
|
|
|
|
|
threads = 0;
|
|
|
|
|
|
|
|
|
|
//if (!frameUpdate)
|
|
|
|
|
// while (side * CHUNK_SIZE_X <= VIEW_DISTANCE * 2) {
|
|
|
|
|
// int tx = -side, ty = -side;
|
|
|
|
|
|
|
|
|
|
// for (; tx <= side; ++tx) {
|
|
|
|
|
// if (frameUpdate)
|
|
|
|
|
// break;
|
|
|
|
|
// unsigned int chx = cx + tx * CHUNK_SIZE_X, chy = cy + ty * CHUNK_SIZE_Z;
|
|
|
|
|
// if (ChunkAt(chx, 1, chy) &&
|
|
|
|
|
// ChunkAt(chx, 1, chy)->IsDirty()) {
|
|
|
|
|
// updateThList[threads++] =
|
|
|
|
|
// std::async(std::launch::async,
|
|
|
|
|
// [](Chunk* chunk, BlockInfo* blockinfo[BTYPE_LAST], World* world) {
|
|
|
|
|
// chunk->Update(blockinfo, world); return chunk; }, ChunkAt(chx, 1, chy), blockinfo, this);
|
|
|
|
|
// if (threads == THREADS_UPDATE_CHUNKS) frameUpdate = FRAMES_UPDATE_CHUNKS;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// for (; ty <= side; ++ty) {
|
|
|
|
|
// if (frameUpdate)
|
|
|
|
|
// break;
|
|
|
|
|
// unsigned int chx = cx + tx * CHUNK_SIZE_X, chy = cy + ty * CHUNK_SIZE_Z;
|
|
|
|
|
// if (ChunkAt(chx, 1, chy) &&
|
|
|
|
|
// ChunkAt(chx, 1, chy)->IsDirty()) {
|
|
|
|
|
// updateThList[threads++] =
|
|
|
|
|
// std::async(std::launch::async,
|
|
|
|
|
// [](Chunk* chunk, BlockInfo* blockinfo[BTYPE_LAST], World* world) {
|
|
|
|
|
// chunk->Update(blockinfo, world); return chunk; }, ChunkAt(chx, 1, chy), blockinfo, this);
|
|
|
|
|
// if (threads == THREADS_UPDATE_CHUNKS) frameUpdate = FRAMES_UPDATE_CHUNKS;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// for (; tx >= -side; --tx) {
|
|
|
|
|
// if (frameUpdate)
|
|
|
|
|
// break;
|
|
|
|
|
// unsigned int chx = cx + tx * CHUNK_SIZE_X, chy = cy + ty * CHUNK_SIZE_Z;
|
|
|
|
|
// if (ChunkAt(chx, 1, chy) &&
|
|
|
|
|
// ChunkAt(chx, 1, chy)->IsDirty()) {
|
|
|
|
|
// updateThList[threads++] =
|
|
|
|
|
// std::async(std::launch::async,
|
|
|
|
|
// [](Chunk* chunk, BlockInfo* blockinfo[BTYPE_LAST], World* world) {
|
|
|
|
|
// chunk->Update(blockinfo, world); return chunk; }, ChunkAt(chx, 1, chy), blockinfo, this);
|
|
|
|
|
// if (threads == THREADS_UPDATE_CHUNKS) frameUpdate = FRAMES_UPDATE_CHUNKS;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// for (; ty >= -side; --ty) {
|
|
|
|
|
// if (frameUpdate)
|
|
|
|
|
// break;
|
|
|
|
|
// unsigned int chx = cx + tx * CHUNK_SIZE_X, chy = cy + ty * CHUNK_SIZE_Z;
|
|
|
|
|
// if (ChunkAt(chx, 1, chy) &&
|
|
|
|
|
// ChunkAt(chx, 1, chy)->IsDirty()) {
|
|
|
|
|
// updateThList[threads++] =
|
|
|
|
|
// std::async(std::launch::async,
|
|
|
|
|
// [](Chunk* chunk, BlockInfo* blockinfo[BTYPE_LAST], World* world) {
|
|
|
|
|
// chunk->Update(blockinfo, world); return chunk; }, ChunkAt(chx, 1, chy), blockinfo, this);
|
|
|
|
|
// if (threads == THREADS_UPDATE_CHUNKS) frameUpdate = FRAMES_UPDATE_CHUNKS;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// if (frameUpdate)
|
|
|
|
|
// break;
|
|
|
|
|
// ++side;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
//if (threads > 0) {
|
|
|
|
|
// for (int i = 0; i < threads; ++i) {
|
|
|
|
|
// updateThList[i].wait();
|
|
|
|
|
// Chunk* chunk = updateThList[i].get();
|
|
|
|
|
// chunk->FlushMeshToVBO();
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
threads = 0;
|
|
|
|
|
|
|
|
|
|
//int del = THREADS_DELETE_CHUNKS;
|
|
|
|
|
//while (!m_tbDeleted.empty() && del--) { // Moins rapide que le bout en dessous, mais -beaucoup- plus stable.
|
|
|
|
|
// m_tbDeleted.back()->FlushVBO();
|
|
|
|
|
// m_tbDeleted.back()->~Chunk();
|
|
|
|
|
// m_tbDeleted.pop_back();
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
/*while (!m_tbDeleted.empty() && !frameDelete) {
|
|
|
|
|
if (m_tbDeleted.back()) {
|
|
|
|
|
m_tbDeleted.back()->FlushVBO();
|
|
|
|
|
delThList[threads] =
|
|
|
|
|
std::async(std::launch::async,
|
|
|
|
|
[](Chunk* chunk) { delete chunk; }, m_tbDeleted.back());
|
|
|
|
|
m_tbDeleted.pop_back();
|
|
|
|
|
if (++threads > THREADS_DELETE_CHUNKS) frameDelete = FRAMES_DELETE_CHUNKS;
|
|
|
|
|
}
|
|
|
|
|
else m_tbDeleted.pop_back();
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
/*for (int x = 0; x < threads; ++x) {
|
|
|
|
|
delThList[x].wait();
|
|
|
|
|
delThList[x].get();
|
|
|
|
|
}*/
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int World::GettbDeleted() const { return m_tbDeleted.size(); }
|
|
|
|
|