Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private async Task<Node> Generate(int x, int y)
- {
- var mi = new MeshInstance3D();
- var planeMesh = new PlaneMesh();
- planeMesh.Size = chunkSize;
- planeMesh.SubdivideDepth = Mathf.FloorToInt(planeMesh.Size.X / 2f);
- planeMesh.SubdivideWidth = Mathf.FloorToInt(planeMesh.Size.Y / 2f);
- mi.Name = "GeneratedMesh";
- mi.Position = new Vector3(x * planeMesh.Size.X, 5, y * planeMesh.Size.Y);
- Material mat = ResourceLoader.Load<Material>("res://Floor.tres");
- var mesh = new ArrayMesh();
- mesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, planeMesh.GetMeshArrays());
- MeshDataTool mdt = new MeshDataTool();
- mdt.CreateFromSurface(mesh, 0);
- for (int i = 0; i < mdt.GetVertexCount(); i++)
- {
- Vector3 vert = mdt.GetVertex(i);
- Vector3 absv = new Vector3(Math.Abs(vert.X), Math.Abs(vert.Y), Math.Abs(vert.Z));
- // Vector3 globalVert = ToGlobal(vert);
- if (i == 0 || i == mdt.GetVertexCount() - 1)
- {
- // GD.Print($"vert: {absv}");
- }
- float r = noise.GetNoise3Dv(absv) * noise1Mag;
- float r2 = noise2.GetNoise3Dv(absv) * noise2Mag;
- float r3 = noise3.GetNoise3Dv(absv) * noise3Mag;
- float r4 = noise4.GetNoise3Dv(absv) * noise4Mag;
- float r5 = noise4.GetNoise3Dv(absv) * noise5Mag;
- vert.Y = r + r2 + r3 + r4 + r5;
- mdt.SetVertex(i, vert);
- }
- mesh.ClearSurfaces();
- mdt.CommitToSurface(mesh);
- mi.Mesh = mesh;
- mi.Mesh.SurfaceSetMaterial(0, mat);
- Node3D geometryNode = new Node3D();
- geometryNode.AddChild(mi);
- mi.CreateTrimeshCollision();
- GetNode("/root/Level").AddChild(geometryNode);
- // CollisionShape3D collisionShape3D = new CollisionShape3D();
- // StaticBody3D staticBody3D = new StaticBody3D();
- // Shape3D shape = planeMesh;
- // staticBody3D.ShapeOwnerAddShape(0, planeMesh);
- // geometryNode.AddChild(collisionShape3D);
- await Task.Yield();
- // collisionShape3D.MakeConvexFromSiblings();
- meshes.Add(mesh);
- return mi;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement