World.cpp 941 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "World.h"
  2. World::World(IChunkProvider* chunks) : chunks(chunks)
  3. {
  4. }
  5. World::~World()
  6. {
  7. }
  8. void World::registerChunkListener(IChunkListener* listener)
  9. {
  10. chunkListener.add(listener);
  11. }
  12. void World::removeChunkListener(IChunkListener* listener)
  13. {
  14. chunkListener.remove(listener);
  15. }
  16. void World::updateDirtyChunks()
  17. {
  18. chunks->forEachLoadedChunk(this, [](Chunk& c, void* world)
  19. {
  20. if(c.isDirty())
  21. {
  22. ((World*) world)->updateChunk(c);
  23. }
  24. });
  25. }
  26. void World::updateChunk(Chunk& c)
  27. {
  28. int x = c.getChunkX();
  29. int z = c.getChunkZ();
  30. Chunk* north = chunks->getChunk(x + 1, z);
  31. Chunk* east = chunks->getChunk(x, z + 1);
  32. Chunk* south = chunks->getChunk(x - 1, z);
  33. Chunk* west = chunks->getChunk(x, z - 1);
  34. for(int i = 0; i < chunkListener.getSize(); i++)
  35. {
  36. chunkListener.get(i, nullptr)->updateChunk(c, north, east, south, west);
  37. }
  38. }