Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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");
        }
Ejemplo n.º 3
0
        public static Cardinal CardinalFrom(int x, int z)
        {
            SignedVector3i v = new SignedVector3i(x, 0, z);

            return(CardinalFrom(v));
        }