public void UpdateBlock(Vector3 blockToUpdate) { if (!Blocks.ContainsKey(blockToUpdate)) { return; } var block = Blocks[blockToUpdate]; if (block.MeshVersion != MeshVersion || block.Vertices.Count <= 0 || block.Faces.Count <= 0) { DeleteBlock(blockToUpdate); } else { if (block.Node == null) { block.Node = MakeMeshNode(); block.Node.Name = $"Mesh Block {block.Coordinates.X},{block.Coordinates.Y},{block.Coordinates.Z}"; MeshNode.AddChildNode(block.Node); } var meshGeometry = MakeMeshGeometry(block.Vertices.ToArray(), block.Normals.ToArray(), block.Faces); meshGeometry.FirstMaterial = MeshMaterial; block.Node.Geometry = meshGeometry; // update physics less often as it's costly and not as critical if (block.Node.PhysicsBody == null || block.PhysicsVersion + 10 < block.Version) { block.Node.PhysicsBody = MakePhysicsBody(meshGeometry); block.PhysicsVersion = block.Version; } } }