Пример #1
0
 bool transparentNeighbor(Game.Utility.IntVec3 index)
 {
     Game.Model.Block block;
     block = chunk.getBlock(index + new Utility.IntVec3(1, 0, 0));
     if (block.type.transparent)
     {
         return(true);
     }
     block = chunk.getBlock(index + new Utility.IntVec3(0, 1, 0));
     if (block.type.transparent)
     {
         return(true);
     }
     block = chunk.getBlock(index + new Utility.IntVec3(0, 0, 1));
     if (block.type.transparent)
     {
         return(true);
     }
     block = chunk.getBlock(index + new Utility.IntVec3(-1, 0, 0));
     if (block.type.transparent)
     {
         return(true);
     }
     block = chunk.getBlock(index + new Utility.IntVec3(0, -1, 0));
     if (block.type.transparent)
     {
         return(true);
     }
     block = chunk.getBlock(index + new Utility.IntVec3(0, 0, -1));
     if (block.type.transparent)
     {
         return(true);
     }
     return(false);
 }
Пример #2
0
        Game.Model.Block genBlock(Game.Utility.IntVec3 index)
        {
            Game.Utility.IntVec3 pos = index + chunk.pos * Game.Model.Settings.chunk_size;
            float height             = getHeight(index);
            float cc = -0.002f * pos.y;

            if (cc > 0.1)
            {
                cc = 0.1f;
            }
            float tc = pos.y * 0.01f + 0.8f;

            return(pos.y >= height ? new Game.Model.Block("air") : (Client.random.NextDouble() < cc ? new Game.Model.Block("coal") : (Client.random.NextDouble() < tc ? new Game.Model.Block("trash") : new Game.Model.Block("dirt"))));
        }
Пример #3
0
        float getHeight(Game.Utility.IntVec3 index)
        {
            float[,] hm = new float[2, 2];
            hm[0, 0]    = chunks[Model.Settings.data_distance, Model.Settings.data_distance, Model.Settings.data_distance].surf[0];
            hm[0, 1]    = chunks[Model.Settings.data_distance, Model.Settings.data_distance, Model.Settings.data_distance + 1].surf[0];
            hm[1, 0]    = chunks[Model.Settings.data_distance + 1, Model.Settings.data_distance, Model.Settings.data_distance].surf[0];
            hm[1, 1]    = chunks[Model.Settings.data_distance + 1, Model.Settings.data_distance, Model.Settings.data_distance + 1].surf[0];
            float h = Utility.Func.lerp(new Utility.Vec2(index.x, index.z) / Model.Settings.chunk_size, hm);

            if (h > 0)
            {
                h *= 10;
            }
            else
            {
                h *= 2;
            }
            return(h);
        }
Пример #4
0
        void setBlock(Game.Utility.IntVec3 index)
        {
            Game.Model.Block block = chunk.getBlock(index);
            if (block == null)
            {
                return;
            }
            if (block.hidden)
            {
                return;
            }
            if (block.type.transparent)
            {
                return;
            }
            if (!transparentNeighbor(index))
            {
                return;
            }
            Game.Utility.Vec2 pos = block.type.rectpos;
            Game.Utility.Vec2 dim = block.type.rectdim;
            int offset            = mesh.vertices.Count;

            for (int i = 0; i < MeshGenerator.cube.vertices.Count; i++)
            {
                mesh.vertices.Add(MeshGenerator.cube.vertices[i] + index.Float());
            }

            for (int i = 0; i < MeshGenerator.cube.coords.Count; i++)
            {
                mesh.coords.Add(new Game.Utility.Vec2(MeshGenerator.cube.coords[i].x * dim.x, MeshGenerator.cube.coords[i].y * dim.y) + pos);
            }

            for (int i = 0; i < MeshGenerator.cube.triangles.Count; i++)
            {
                mesh.triangles.Add(MeshGenerator.cube.triangles[i] + offset);
            }
        }