public void TestMultipleRooms()
        {
            var engine = EngineFactory.CreateEngine();

            engine.Initialize();

            var grid = new VoxelGrid <bool>(new Point3(50, 40, 50));



            var gen = new SimpleCaveGenerator();

            gen.Rand = new Random();

            grid.ForEach((x, y, z) => grid[x, y, z] = true);
            //gen.GenerateRandom(grid, 0.30f);
            //gen.FillBorders(grid);

            gen.GenerateRooms(grid);


            //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();
        }
Example #2
0
 public void CreateRoom(VoxelGrid <bool> grid, BoundingBox room)
 {
     grid.ForEach(delegate(int x, int y, int z)
     {
         grid[x, y, z] = false;
     }, room);
 }
Example #3
0
 public void GenerateRandom(VoxelGrid <bool> grid, float percentEmpty)
 {
     grid.ForEach(delegate(int x, int y, int z)
     {
         grid[x, y, z] = Rand.NextDouble() > percentEmpty;
     });
 }
Example #4
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);
            });
        }
Example #5
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;
            });
        }
Example #6
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;
                }
            });
        }