コード例 #1
0
        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;
                }
            }
        }