コード例 #1
0
ファイル: VoxelVolume.cs プロジェクト: TehWardy/Framework
        public Chunk GetChunk(IntVector3 start, IntVector3 end)
        {
            var chunk = new Chunk(start, end);
            var pos = new IntVector3(start);

            for (pos.X = chunk.Start.X; pos.X < chunk.End.X; pos.X++)
                for (pos.Y = chunk.Start.Y; pos.Y < chunk.End.Y; pos.Y++)
                    for (pos.Z = chunk.Start.Z; pos.Z < chunk.End.Z; pos.Z++)
                        chunk.SetVoxel(pos, GetVoxel(pos));

            return chunk;
        }
コード例 #2
0
ファイル: VoxelVolume.cs プロジェクト: TehWardy/Framework
        public void AddChunk(Chunk chunk)
        {
            var pos = new IntVector3(chunk.Start);

            for (pos.X = chunk.Start.X; pos.X < chunk.End.X; pos.X++)
                for (pos.Y = chunk.Start.Y; pos.Y < chunk.End.Y; pos.Y++)
                    for (pos.Z = chunk.Start.Z; pos.Z < chunk.End.Z; pos.Z++)
                        SetVoxel(pos, chunk.GetVoxel(pos));

            if (ChunkAdded != null)
                ChunkAdded(chunk);
        }
コード例 #3
0
ファイル: BaseGenerator.cs プロジェクト: TehWardy/Framework
        public virtual Chunk GenerateChunk(IntVector3 start, IntVector3 end, int lod = 1)
        {
            Debug.WriteLine("Generating Chunk at " + start.ToString());
            var chunk = new Chunk(start, end);
            var pos = new IntVector3(start);

            for (pos.X = chunk.Start.X; pos.X < chunk.End.X; pos.X += lod)
                for (pos.Y = chunk.Start.Y; pos.Y < chunk.End.Y; pos.Y += lod)
                    for (pos.Z = chunk.Start.Z; pos.Z < chunk.End.Z; pos.Z += lod)
                        chunk.SetVoxel(pos, GenerateVoxel(pos));

            return chunk;
        }
コード例 #4
0
ファイル: VoxelVolume.cs プロジェクト: TehWardy/Framework
        public void RemoveChunk(Chunk chunk)
        {
            var pos = new IntVector3(chunk.Start);

            for (pos.X = chunk.Start.X; pos.X < chunk.End.X; pos.X++)
                for (pos.Y = chunk.Start.Y; pos.Y < chunk.End.Y; pos.Y++)
                    for (pos.Z = chunk.Start.Z; pos.Z < chunk.End.Z; pos.Z++) {
                        if (Voxels.ContainsKey (pos))
                            Voxels.Remove (pos);
                    }

            if (ChunkRemoved != null)
                ChunkRemoved(chunk);
        }
コード例 #5
0
        public override Chunk GenerateChunk(IntVector3 start, IntVector3 end, int lod = 1)
        {
            var result = new Chunk(new IntVector3(start), new IntVector3(end));

            if (NoiseGen == null)
                return result;

            float pointHeight = 0f;
            int y = 0;

            var pos = new IntVector3(start);

            // Iterate over every voxel of our volume
            for (int z = result.Start.Z; z <= result.End.Z; z++)
            {
                pos.Z = z;
                for (int x = result.Start.X; x <= result.End.X; x++)
                {
                    pos.X = x;

                    // get height of the terrain at this x,z pos
                    pointHeight = Height(pos.X, pos.Z);

                    if (pointHeight > 0f)
                    {
                        // loop through y voxel positions at x,z
                        for (y = result.Start.Y; y <= result.End.Y; y++)
                        {
                            // generate a voxel for the stuff under the ground within the chunk
                            pos.Y = y;
                            result.SetVoxel(pos, GenerateVoxel(pos, pointHeight));
                        }
                    }
                    else if (result.Start.Y == 0)
                    {
                        // dump in a base rock voxel at y == 0
                        pos.Y = 0;
                        result.SetVoxel(pos, new Voxel(255, 0));
                    }
                }
            }

            return result;
        }
コード例 #6
0
ファイル: IslandGenerator.cs プロジェクト: TehWardy/Framework
        /*
        void BuildModules()
        {
            gen = new Perlin
            {
                Seed = Seed,
                OctaveCount = 2,
                Frequency = 0.06f
            };
        }
         */
        public override Chunk GenerateChunk(IntVector3 start, IntVector3 end, int lod = 1)
        {
            var result = new Chunk(new IntVector3(start), new IntVector3(end));
            var pos = new IntVector3(start);

            // Iterate over every voxel of our volume
            for (int x = result.Start.X; x <= result.End.X; x++)
            {
                pos.X = x;
                for (int z = result.Start.Z; z <= result.End.Z; z++)
                {
                    pos.Z = z;
                    for (int y = result.Start.Y; y <= result.End.Y; y++)
                    {
                        pos.Y = y;
                        result.SetVoxel(pos, GenerateVoxel(pos));
                    }
                }
            }

            return result;
        }