private void Process(Chunk fromChunk, Cardinal direction) { if (fromChunk == null) { return; } Vector3i chunkIndexAdd; Vector3i chunkIndexRemove; SignedVector3i addDelta = Cardinals.VectorFrom(direction) * (World.VIEW_DISTANCE_NEAR_X); SignedVector3i removeDelta = Cardinals.OppositeVectorFrom(direction) * (World.VIEW_DISTANCE_NEAR_X); chunkIndexAdd = fromChunk.Index.add(addDelta); if (world.viewableChunks[chunkIndexAdd.X, chunkIndexAdd.Z] != null) { return; } chunkIndexRemove = fromChunk.Index.add(removeDelta); Debug.WriteLine("Process {0} Add at {1}, remove at {2}", direction, chunkIndexAdd, chunkIndexRemove); //Chunk toRemove = world.viewableChunks[chunkIndexRemove.X, chunkIndexRemove.Z]; //world.viewableChunks.Remove(toRemove.Index.X, toRemove.Index.Z); world.viewableChunks.Remove(chunkIndexRemove.X, chunkIndexRemove.Z);//null safe // Instead of removing, Re assign new chunk to opposite chunk //toRegen.Assign(chunkIndexAdd); // Generate & Build new chunk Chunk addedChunk = DoGenerate(chunkIndexAdd); DoBuild(addedChunk); }
public static Cardinal CardinalFrom(SignedVector3i v) { if (v == N) { return(Cardinal.N); } if (v == NE) { return(Cardinal.NE); } if (v == E) { return(Cardinal.E); } if (v == SE) { return(Cardinal.SE); } if (v == S) { return(Cardinal.S); } if (v == SW) { return(Cardinal.SW); } if (v == W) { return(Cardinal.W); } if (v == NW) { return(Cardinal.NW); } throw new NotImplementedException("vector " + v + " does not map to a cardinal direction"); }
public static Cardinal CardinalFrom(int x, int z) { SignedVector3i v = new SignedVector3i(x, 0, z); return(CardinalFrom(v)); }