示例#1
0
    // Update vut data of block and surrounding blocks
    public static void UpdateBlock(Chunk chunk, Index blockIndex)
    {
        byte block = chunk.Blocks[blockIndex.i, blockIndex.j, blockIndex.k];

        if (block != 0)
        {
            chunk.Vuts[blockIndex.i, blockIndex.j, blockIndex.k] = BlockMeshGenerator.Draw(chunk, blockIndex.i, blockIndex.j, blockIndex.k, block);
        }
    }
示例#2
0
        public static void RegenerateChunk(Chunk chunk)
        {
            Dictionary <Block, CubeMesh> blockMap = ChunkCubeMeshMap[chunk];

            foreach (CubeMesh mesh in blockMap.Values)
            {
                mesh.Dispose();
            }
            ChunkCubeMeshMap.Remove(chunk);
            BlockMeshGenerator.GenerateChunk(chunk);
        }
示例#3
0
    public static void DrawChunk(Chunk chunk)
    {
        byte[,,] blocks  = chunk.Blocks;
        PrimVUT[,,] vuts = chunk.Vuts;
        byte targetBlock;

        // Iterate through blocks
        for (int blockX = 0; blockX < Chunk.Width; blockX++)
        {
            for (int blockY = 0; blockY < Chunk.Height; blockY++)
            {
                for (int blockZ = 0; blockZ < Chunk.Width; blockZ++)
                {
                    targetBlock = blocks[blockX, blockY, blockZ];
                    if (targetBlock != 0)
                    {
                        vuts[blockX, blockY, blockZ] = BlockMeshGenerator.Draw(chunk, blockX, blockY, blockZ, targetBlock);
                    }
                }
            }
        }
        // Chunk is done, spit out mesh
        SpitMesh(chunk);
    }
示例#4
0
        protected override void OnLoad()
        {
            // Called just after OpenGL is initialised
            //DebugText.CanWrite = true;

            // Initialise Game

            //BlockMesh.Generate();
            //ChunkMeshGenerator.Initialise();

            Player = new EntityPlayerCamera();
            Worlds = new List <World>();

            World earth = new World();

            earth.SetMainPlayer(Player);
            Player.MoveTo(new Vector3(0, 5, 0));

            // Top    1
            // Front  1
            // Left   1
            // Bottom 1
            // Right  1
            // Back   1

            // Top    2
            // Front  2
            // Left   2
            // Bottom 2
            // Right  2
            // Back   2

            //BlockFace topp = BlockFace.GenerateFace(FaceDirection.Top);
            //BlockFace fron = BlockFace.GenerateFace(FaceDirection.Front);
            //BlockFace left = BlockFace.GenerateFace(FaceDirection.Left);
            //BlockFace bott = BlockFace.GenerateFace(FaceDirection.Bottom);
            //BlockFace righ = BlockFace.GenerateFace(FaceDirection.Right);
            //BlockFace back = BlockFace.GenerateFace(FaceDirection.Back);
            //
            //topp.Face1.WriteVertices(vertices);
            //fron.Face1.WriteVertices(vertices);
            //left.Face1.WriteVertices(vertices);
            //bott.Face1.WriteVertices(vertices);
            //righ.Face1.WriteVertices(vertices);
            //back.Face1.WriteVertices(vertices);
            //topp.Face2.WriteVertices(vertices);
            //fron.Face2.WriteVertices(vertices);
            //left.Face2.WriteVertices(vertices);
            //bott.Face2.WriteVertices(vertices);
            //righ.Face2.WriteVertices(vertices);
            //back.Face2.WriteVertices(vertices);
            //
            //topp.Face1.WriteTextureCoordinates(uvs);
            //fron.Face1.WriteTextureCoordinates(uvs);
            //left.Face1.WriteTextureCoordinates(uvs);
            //bott.Face1.WriteTextureCoordinates(uvs);
            //righ.Face1.WriteTextureCoordinates(uvs);
            //back.Face1.WriteTextureCoordinates(uvs);
            //topp.Face2.WriteTextureCoordinates(uvs);
            //fron.Face2.WriteTextureCoordinates(uvs);
            //left.Face2.WriteTextureCoordinates(uvs);
            //bott.Face2.WriteTextureCoordinates(uvs);
            //righ.Face2.WriteTextureCoordinates(uvs);
            //back.Face2.WriteTextureCoordinates(uvs);

            //mesh = new Mesh(vertices, uvs);
            //obj = new GameObject()
            //{
            //    Mesh = mesh,
            //    Position = new Vector3(2.0f, 5.0f, 1.0f),
            //    Shader = GraphicsLoader.TextureShader,
            //    Texture = BlockTextureLinker.TextureMap[BlockTextureLinker.GetTextureNameFromID(4)]
            //};
            //Tesselator.Generate();
            //mesh = Tesselator.GenerateChunk(chunk1);

            //Chunk chunk1 = ChunkGenerator.GenerateFlat(earth, new ChunkLocation(-1, -1), 4);
            //Chunk chunk2 = ChunkGenerator.GenerateFlat(earth, new ChunkLocation(-1,  0), 3);
            //Chunk chunk3 = ChunkGenerator.GenerateFlat(earth, new ChunkLocation( 0, -1), 2);
            //Chunk chunk4 = ChunkGenerator.GenerateFlat(earth, new ChunkLocation( 0,  0), 1);

            /*
             *
             *
             *          Chunk block generators
             *          generates blocks... in a chunk :)))
             *          you could manually do them too
             *
             *
             */
            for (int x = -1; x <= 1; x++)
            {
                for (int z = -1, total = 1; z <= 1; z++, total++)
                {
                    Chunk chunk = ChunkGenerator.GenerateFlatGaps(earth, new ChunkLocation(x, z), 8, x + 3, z + 3);
                    //Chunk chunk = ChunkGenerator.GenerateFlat(earth, new ChunkLocation(x, z), 1);
                    BlockMeshGenerator.GenerateChunk(chunk);
                    earth.Chunks.Add(chunk.Location, chunk);
                }
            }

            Worlds.Add(earth);

            Inputs.Keyboard = KeyboardState;
            Inputs.Mouse    = MouseState;

            CursorVisible = false;
            CursorGrabbed = true;

            base.OnLoad();
        }