// Rendering

        public void DrawTerrainMesh()
        {
            if (loadedMap == null)
            {
                return;
            }

            MeshFilter mf = GetComponent <MeshFilter>();

            if (mf != null)
            {
                Vector3 position = new Vector3(chunk.x - 1, 0, chunk.z - 1);
                int[,,] chunkData = loadedMap.GenerateChunkData(position);
                List <MeshGenerator.Node> nodes = MeshGenerator.CalculateNodes(chunkData);
                // Mesh
                Mesh       mesh;
                Material[] materials;
                if (mesh = MeshGenerator.GenerateMesh(nodes, position, out materials))
                {
                    mf.sharedMesh.subMeshCount = materials.Length;
                    // Materials
                    MeshRenderer mr = GetComponent <MeshRenderer>();
                    if (mr != null)
                    {
                        mr.materials = materials;
                    }
                }
                mf.sharedMesh = mesh;
                MeshCollider mc = GetComponent <MeshCollider>();
                if (mc != null)
                {
                    mc.sharedMesh = mf.sharedMesh;
                }
            }
        }