예제 #1
0
        public override void ValidateChunkAt(int x, int y)
        {
            ChunkAddress addr = new ChunkAddress()
            {
                X = x / ChunkSize, Y = y / ChunkSize
            };

            if (!Chunks.ContainsKey(addr))
            {
                return;
            }

            var toRemove = new LinkedList <Drawable>();
            var chunk    = Chunks[addr];

            foreach (Drawable e in chunk)
            {
                if (!addr.Equals(new ChunkAddress()
                {
                    X = (int)e.X / ChunkSize, Y = (int)e.Y / ChunkSize
                }))
                {
                    Console.WriteLine("Addresses are not equal: {0}:{1} and {2}:{3}", addr.X, addr.Y, (int)e.X / ChunkSize, (int)e.Y / ChunkSize);
                    toRemove.AddLast(e);
                }
            }

            foreach (Drawable e in toRemove)
            {
                Console.WriteLine("Moving drawable");
                chunk.Remove(e);
                InsertAt(e, (int)e.X, (int)e.Y);
            }
        }
        public override void ValidateChunkAt(int x, int y)
        {
            ChunkAddress addr = new ChunkAddress()
            {
                X = x / ChunkSize, Y = y / ChunkSize
            };

            if (!Chunks.ContainsKey(addr))
            {
                return;
            }

            var toRemove = new LinkedList <Entity>();
            var chunk    = Chunks[addr];

            foreach (Entity e in chunk)
            {
                if (!addr.Equals(new ChunkAddress()
                {
                    X = (int)e.X, Y = (int)e.Y
                }))
                {
                    toRemove.AddLast(e);
                }
            }

            foreach (Entity e in toRemove)
            {
                chunk.Remove(e);
                InsertAt(e, (int)e.X, (int)e.Y);
            }
        }
예제 #3
0
        public void Draw(ChunkAddress address)
        {
            var chunk = dimension[address];

            if (!IsDrawed(address))
            {
                chunk.GameObjects["Chunk"] = CreateGameObject(chunk, chunkPrefab);
                SetMesh(chunk);
                chunk.GameObjects["Chunk"].SetActive(true);
            }
        }
예제 #4
0
        public void DrawArroundChunk(Chunk chunk)
        {
            isDrawing.Value = true;

            for (int x = -1; x <= 1; x++)
            {
                for (int z = -1; z <= 1; z++)
                {
                    var baseAddress = chunk.Address;
                    var address     = new ChunkAddress(baseAddress.X + x, baseAddress.Z + z);
                    terrainRenderer.Draw(address);
                }
            }
            isDrawing.Value = false;
        }
예제 #5
0
        private IEnumerator DrawFluid(FluidPropagator propagator)
        {
            yield return(new WaitForSeconds(0.5f));

            foreach (var items in propagator.Start())
            {
                var chunkAddresses = new HashSet <ChunkAddress>();
                foreach (var item in items)
                {
                    dimension.Blocks[item.Position] = item.Block;
                    chunkAddresses.Add(ChunkAddress.FromPosition(item.Position));
                }
                foreach (var address in chunkAddresses)
                {
                    terrainRenderer.Redraw(address);
                }
                yield return(new WaitForSeconds(0.5f));
            }
        }
 public void Draw(Vector3 position)
 {
     Draw(ChunkAddress.FromPosition(position));
 }
        public void Redraw(ChunkAddress address)
        {
            var chunk = world [address];

            SetMesh(chunk);
        }
 public bool IsDrawed(ChunkAddress address)
 {
     return(world.IsGenerated(address) && world [address].GameObjects.Count > 0);
 }
 public bool IsDrawed(Vector3 position)
 {
     return(IsDrawed(ChunkAddress.FromPosition(position)));
 }
예제 #10
0
        public void Redraw(ChunkAddress address)
        {
            var chunk = dimension[address];

            SetMesh(chunk);
        }
예제 #11
0
 public bool IsDrawed(ChunkAddress address)
 {
     return(dimension.IsGenerated(address) && dimension[address].GameObjects.Count > 0);
 }