Explorar el Código

better chunk thing

opengl-renderer-broken
Martin Dørum hace 4 años
padre
commit
998289c194
Se han modificado 2 ficheros con 22 adiciones y 24 borrados
  1. 0
    3
      libswan/include/swan/World.h
  2. 22
    21
      libswan/src/World.cc

+ 0
- 3
libswan/include/swan/World.h Ver fichero

@@ -36,9 +36,6 @@ private:
class ChunkRenderer {
public:
void tick(WorldPlane &plane, ChunkPos abspos);

private:
int level_ = 1;
};

ChunkRenderer chunk_renderer_;

+ 22
- 21
libswan/src/World.cc Ver fichero

@@ -2,30 +2,31 @@

namespace Swan {

void World::ChunkRenderer::tick(WorldPlane &plane, ChunkPos abspos) {
Vec2i dir(1, 0);
ChunkPos relpos(-level_, -level_);
if (!plane.hasChunk(abspos)) {
plane.getChunk(abspos);
level_ = 1;
relpos = ChunkPos(-level_, -level_);
static bool chunkLine(int l, int &left, WorldPlane &plane, ChunkPos &abspos, const Vec2i &dir) {
for (int i = 0; i < l; ++i) {
if (!plane.hasChunk(abspos)) {
plane.getChunk(abspos);
if (--left == 0)
return true;
}
abspos += dir;
}

do {
if (relpos == ChunkPos(level_, -level_))
dir = Vec2i(0, 1);
else if (relpos == ChunkPos(level_, level_))
dir = Vec2i(-1, 0);
else if (relpos == ChunkPos(-level_, level_))
dir = Vec2i(0, -1);

plane.getChunk(abspos + relpos);
relpos += dir;
} while (relpos != ChunkPos(-level_, -level_));
return false;
}

if (level_ < 5)
level_ += 1;
void World::ChunkRenderer::tick(WorldPlane &plane, ChunkPos abspos) {
int l = 0;
int left = 4;

for (int i = 0; i < 8; ++i) {
if (chunkLine(l, left, plane, abspos, Vec2i(0, -1))) return;
if (chunkLine(l, left, plane, abspos, Vec2i(1, 0))) return;
l += 1;
if (chunkLine(l, left, plane, abspos, Vec2i(0, 1))) return;
if (chunkLine(l, left, plane, abspos, Vec2i(-1, 0))) return;
l += 1;
}
}

void World::setCurrentPlane(WorldPlane &plane) {

Cargando…
Cancelar
Guardar