Beispiel #1
0
        public void GenerateRooms(VoxelGrid <bool> grid)
        {
            grid.ForEach(delegate(int x, int y, int z)
            {
                var size = new Vector3(10, 5, 10);

                var averageVolume = size.X * size.Y * size.Z;
                var roomDensity   = 4f;
                if (Rand.NextDouble() > 1 / averageVolume / roomDensity)
                {
                    return;
                }
                var room     = new BoundingBox();
                room.Minimum = new Vector3(x, y, z);

                room.Maximum = room.Minimum + size;
                CreateRoom(grid, room);
            });
        }
        public void TestSimple()
        {
            var engine = EngineFactory.CreateEngine();

            engine.Initialize();

            var grid = new VoxelGrid <bool>(new Point3(100, 30, 100));

            var gen = new SimpleCaveGenerator();

            gen.GenerateRandom(grid, 0.35f);
            for (int i = 0; i < 5; i++)
            {
                gen.ProcessCellularAutomata(grid);
            }

            new VoxelTerrainConvertor().SetTerrain(grid.ToArray());

            engine.AddSimulator(new FlashlightSimulator());
            engine.AddSimulator(new VoxelTerrainSimulator());
            engine.AddSimulator(new WorldRenderingSimulator());
            engine.Run();
        }
Beispiel #3
0
        public void ProcessCellularAutomata(VoxelGrid <bool> grid)
        {
            grid.ForEach(delegate(int x, int y, int z)
            {
                int sum = 0;
                for (int i = 0; i < 3 * 3 * 3; i++)
                {
                    int ix = x + i % 3;
                    int iy = y + (i / 3) % 3;
                    int iz = z + (i / 9) % 3;
                    if (!grid.ContainsKey(ix, iy, iz))
                    {
                        ;                                    //sum++;
                    }
                    else if (grid[ix, iy, iz])
                    {
                        sum++;
                    }
                }

                grid[x, y, z] = sum >= 17;
            });
        }
Beispiel #4
0
        public void FillBorders(VoxelGrid <bool> grid)
        {
            grid.ForEach(delegate(int x, int y, int z)
            {
                var val = false;
                if (x == 0)
                {
                    val = true;
                }
                if (y == 0)
                {
                    val = true;
                }
                if (z == 0)
                {
                    val = true;
                }
                if (x == grid.Size.X)
                {
                    val = true;
                }
                if (y == grid.Size.Y)
                {
                    val = true;
                }
                if (z == grid.Size.Z)
                {
                    val = true;
                }

                if (val)
                {
                    grid[x, y, z] = true;
                }
            });
        }