Monde de max de UINT_MAX * UINT_MAX
This commit is contained in:
		| @@ -120,7 +120,7 @@ void World::CleanUpWorld(int& deleteframes, bool clear = false) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void World::GetScope(int& x, int& y) { | ||||
| void World::GetScope(unsigned int& x, unsigned int& y) { | ||||
| 	x = m_center[0]; | ||||
| 	y = m_center[1]; | ||||
| } | ||||
| @@ -136,7 +136,7 @@ void World::Update(int& rendercount, Bullet* bullets[MAX_BULLETS], Player& playe | ||||
| 	glStencilFunc(GL_GREATER, 1, 0xFF); | ||||
| } | ||||
|  | ||||
| void World::UpdateChunk(int& updates, int chx, int chy, BlockInfo* blockinfo[BTYPE_LAST]) { | ||||
| void World::UpdateChunk(int& updates, unsigned int chx, unsigned int chy, BlockInfo* blockinfo[BTYPE_LAST]) { | ||||
| 	if (updates == 0 && ChunkAt(chx, 1, chy) && | ||||
| 		ChunkAt(chx, 1, chy)->IsDirty()) { | ||||
| 		ChunkAt(chx, 1, chy)->Update(blockinfo, this); | ||||
| @@ -223,7 +223,7 @@ void World::RenderWorld(int& rendercount, Player& player, Transformation& world, | ||||
| 	direct.Normalize(); | ||||
| 	pos.y = 1; | ||||
|  | ||||
| 	static Vector3f renderManifest[VIEW_DISTANCE * 4]; // Nombre de Chunks maximal <20> <20>tre rendus. | ||||
| 	static Vector3<unsigned int> renderManifest[VIEW_DISTANCE * 4]; // Nombre de Chunks maximal <20> <20>tre rendus. | ||||
|  | ||||
| 	//for (int dist = VIEW_DISTANCE; dist >= 0; dist -= CHUNK_SIZE_X) { | ||||
| 	for (int dist = 0; dist <= VIEW_DISTANCE; dist += CHUNK_SIZE_X) { | ||||
| @@ -272,16 +272,19 @@ void World::RenderWorld(int& rendercount, Player& player, Transformation& world, | ||||
| 			cursor = pos - direct * CHUNK_SIZE_X * 2 + angle * dist; | ||||
| 			if (cursor.y >= 128.f || cursor.y >= 0.f) cursor.y = CHUNK_SIZE_Y / 2.f; | ||||
|  | ||||
| 			bool valide = true; | ||||
|  | ||||
| 			if (ChunkAt(cursor)) { | ||||
| 				int chx, chy; | ||||
| 				bool valide = true; | ||||
| 				unsigned int chx, chy; | ||||
| 				ChunkAt(cursor)->GetPosition(chx, chy); | ||||
| 				for (int index = 0; index < rendercount; ++index) // Permet de v<>rifier seulement contre celles ajout<75>es dans la frame, et ne pas avoir <20> refaire l'array <20> chaque frame. | ||||
| 					if (renderManifest[index].x == chx && renderManifest[index].z == chy) | ||||
| 						valide = false; | ||||
|  | ||||
| 				if (valide) renderManifest[rendercount++] = Vector3f(chx, (VIEW_DISTANCE - (pos - cursor).Length() * 2.f + 128) / (float)VIEW_DISTANCE, chy); | ||||
| 				if (valide) renderManifest[rendercount++] = Vector3<unsigned int>(chx,  | ||||
| 					(VIEW_DISTANCE - (pos - cursor).Length() * 2.f) < 0.f? 0:  | ||||
| 					(VIEW_DISTANCE - (pos - cursor).Length() * 2.f) * 1000,  | ||||
| 					chy); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| @@ -290,7 +293,8 @@ void World::RenderWorld(int& rendercount, Player& player, Transformation& world, | ||||
|  | ||||
| 		world.ApplyTranslation(chx, 0, chy); | ||||
| 		world.Use(); | ||||
| 		glBlendColor(renderManifest[index].y, renderManifest[index].y, renderManifest[index].y, 1.f); | ||||
| 		float blcolor = renderManifest[index].y / (VIEW_DISTANCE * 1000.f); | ||||
| 		glBlendColor(blcolor, blcolor, blcolor, 1.f); | ||||
| 		ChunkAt(chx, 1, chy)->Render(); | ||||
| 		world.ApplyTranslation(-chx, 0, -chy); | ||||
| 	} | ||||
| @@ -326,7 +330,7 @@ void World::UpdateWorld(Player& player, Perlin& perlin, BlockInfo* blockinfo[BTY | ||||
| 				chy = cy + ty * CHUNK_SIZE_Z; | ||||
| 				if (chx < WORLD_SIZE_X * CHUNK_SIZE_X && chy < WORLD_SIZE_Y * CHUNK_SIZE_Z && | ||||
| 					chx >= 0 && chy >= 0 && !ChunkAt(chx, 1, chy)) | ||||
| 					genThList[threads++] = std::async(std::launch::async, [](int x, int y) { return new Chunk(x, y); }, chx / CHUNK_SIZE_X + m_center[0], chy / CHUNK_SIZE_Z + m_center[1]); | ||||
| 					genThList[threads++] = std::async(std::launch::async, [](unsigned int x, unsigned int y) { return new Chunk(x, y); }, chx / CHUNK_SIZE_X + m_center[0], chy / CHUNK_SIZE_Z + m_center[1]); | ||||
| 				if (threads == THREADS_GENERATE_CHUNKS) frameGenerate = FRAMES_RENDER_CHUNKS; | ||||
| 			} | ||||
| 			for (; ty <= side; ++ty) { | ||||
| @@ -336,7 +340,7 @@ void World::UpdateWorld(Player& player, Perlin& perlin, BlockInfo* blockinfo[BTY | ||||
| 				chy = cy + ty * CHUNK_SIZE_Z; | ||||
| 				if (chx < WORLD_SIZE_X * CHUNK_SIZE_X && chy < WORLD_SIZE_Y * CHUNK_SIZE_Z && | ||||
| 					chx >= 0 && chy >= 0 && !ChunkAt(chx, 1, chy)) | ||||
| 					genThList[threads++] = std::async(std::launch::async, [](int x, int y) { return new Chunk(x, y); }, chx / CHUNK_SIZE_X + m_center[0], chy / CHUNK_SIZE_Z + m_center[1]); | ||||
| 					genThList[threads++] = std::async(std::launch::async, [](unsigned int x, unsigned int y) { return new Chunk(x, y); }, chx / CHUNK_SIZE_X + m_center[0], chy / CHUNK_SIZE_Z + m_center[1]); | ||||
| 				if (threads == THREADS_GENERATE_CHUNKS) frameGenerate = FRAMES_RENDER_CHUNKS; | ||||
| 			} | ||||
| 			for (; tx >= -side; --tx) { | ||||
| @@ -346,7 +350,7 @@ void World::UpdateWorld(Player& player, Perlin& perlin, BlockInfo* blockinfo[BTY | ||||
| 				chy = cy + ty * CHUNK_SIZE_Z; | ||||
| 				if (chx < WORLD_SIZE_X * CHUNK_SIZE_X && chy < WORLD_SIZE_Y * CHUNK_SIZE_Z && | ||||
| 					chx >= 0 && chy >= 0 && !ChunkAt(chx, 1, chy)) | ||||
| 					genThList[threads++] = std::async(std::launch::async, [](int x, int y) { return new Chunk(x, y); }, chx / CHUNK_SIZE_X + m_center[0], chy / CHUNK_SIZE_Z + m_center[1]); | ||||
| 					genThList[threads++] = std::async(std::launch::async, [](unsigned int x, unsigned int y) { return new Chunk(x, y); }, chx / CHUNK_SIZE_X + m_center[0], chy / CHUNK_SIZE_Z + m_center[1]); | ||||
| 				if (threads == THREADS_GENERATE_CHUNKS) frameGenerate = FRAMES_RENDER_CHUNKS; | ||||
| 			} | ||||
| 			for (; ty >= -side; --ty) { | ||||
| @@ -356,7 +360,7 @@ void World::UpdateWorld(Player& player, Perlin& perlin, BlockInfo* blockinfo[BTY | ||||
| 				chy = cy + ty * CHUNK_SIZE_Z; | ||||
| 				if (chx < WORLD_SIZE_X * CHUNK_SIZE_X && chy < WORLD_SIZE_Y * CHUNK_SIZE_Z && | ||||
| 					chx >= 0 && chy >= 0 && !ChunkAt(chx, 1, chy)) | ||||
| 					genThList[threads++] = std::async(std::launch::async, [](int x, int y) { return new Chunk(x, y); }, chx / CHUNK_SIZE_X + m_center[0], chy / CHUNK_SIZE_Z + m_center[1]); | ||||
| 					genThList[threads++] = std::async(std::launch::async, [](unsigned int x, unsigned int y) { return new Chunk(x, y); }, chx / CHUNK_SIZE_X + m_center[0], chy / CHUNK_SIZE_Z + m_center[1]); | ||||
| 				if (threads == THREADS_GENERATE_CHUNKS) frameGenerate = FRAMES_RENDER_CHUNKS; | ||||
| 			} | ||||
| 			if (frameGenerate) | ||||
| @@ -369,7 +373,7 @@ void World::UpdateWorld(Player& player, Perlin& perlin, BlockInfo* blockinfo[BTY | ||||
| 			genThList[i].wait(); | ||||
|  | ||||
| 		for (int i = 0; i < threads; ++i) { | ||||
| 			int x, y; | ||||
| 			unsigned int x, y; | ||||
| 			Chunk* chunk = genThList[i].get(); | ||||
| 			chunk->GetPosition(x, y); | ||||
| 			m_chunks.Set(x - m_center[0], y - m_center[1], chunk); | ||||
| @@ -386,8 +390,7 @@ void World::UpdateWorld(Player& player, Perlin& perlin, BlockInfo* blockinfo[BTY | ||||
| 			for (; tx <= side; ++tx) { | ||||
| 				if (frameUpdate) | ||||
| 					break; | ||||
| 				int chx = cx + tx * CHUNK_SIZE_X; | ||||
| 				int chy = cy + ty * CHUNK_SIZE_Z; | ||||
| 				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++] = | ||||
| @@ -400,8 +403,7 @@ void World::UpdateWorld(Player& player, Perlin& perlin, BlockInfo* blockinfo[BTY | ||||
| 			for (; ty <= side; ++ty) { | ||||
| 				if (frameUpdate) | ||||
| 					break; | ||||
| 				int chx = cx + tx * CHUNK_SIZE_X; | ||||
| 				int chy = cy + ty * CHUNK_SIZE_Z; | ||||
| 				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++] = | ||||
| @@ -414,8 +416,7 @@ void World::UpdateWorld(Player& player, Perlin& perlin, BlockInfo* blockinfo[BTY | ||||
| 			for (; tx >= -side; --tx) { | ||||
| 				if (frameUpdate) | ||||
| 					break; | ||||
| 				int chx = cx + tx * CHUNK_SIZE_X; | ||||
| 				int chy = cy + ty * CHUNK_SIZE_Z; | ||||
| 				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++] = | ||||
| @@ -428,8 +429,7 @@ void World::UpdateWorld(Player& player, Perlin& perlin, BlockInfo* blockinfo[BTY | ||||
| 			for (; ty >= -side; --ty) { | ||||
| 				if (frameUpdate) | ||||
| 					break; | ||||
| 				int chx = cx + tx * CHUNK_SIZE_X; | ||||
| 				int chy = cy + ty * CHUNK_SIZE_Z; | ||||
| 				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++] = | ||||
|   | ||||
		Reference in New Issue
	
	Block a user