void HandleFace(OpenFlight.Node node, Scene.Node parent)
        {
            if (WorkingGroup == null)
            {
                WorkingGroup        = new WorkingGroup_();
                WorkingGroup.Parent = parent;
            }
            var face = Parser.ParseFace(node.Record);

            // TODO: face properties

            WorkingGroup.Material = MaterialForFace(face);
            if (!WorkingGroup.MeshMap.ContainsKey(WorkingGroup.Material))
            {
                WorkingGroup.MeshMap[WorkingGroup.Material] = new WorkingMesh();
            }
            var working_mesh = WorkingGroup.MeshMap[WorkingGroup.Material];

            working_mesh.MaterialIndex = Scene.Materials.IndexOf(WorkingGroup.Material);

            int before_index = working_mesh.CurrentVertexIndex;

            foreach (var child in node.Children)
            {
                HandleNode(child, parent);
            }
            int after_index = working_mesh.CurrentVertexIndex;

            if (after_index - before_index == 3)
            {
                working_mesh.Triangles.Add(before_index + 0);
                working_mesh.Triangles.Add(before_index + 2);
                working_mesh.Triangles.Add(before_index + 1);
                return;
            }
            if (after_index - before_index == 4)
            {
                working_mesh.Triangles.Add(before_index + 0);
                working_mesh.Triangles.Add(before_index + 2);
                working_mesh.Triangles.Add(before_index + 1);
                working_mesh.Triangles.Add(before_index + 2);
                working_mesh.Triangles.Add(before_index + 0);
                working_mesh.Triangles.Add(before_index + 3);
                return;
            }
            UnityEngine.Debug.LogError("FLT: invalid vertex count");
        }
 void CloseWorkingGroup()
 {
     foreach (var working_mesh_index in WorkingGroup.MeshMap.Keys)
     {
         var working_mesh = WorkingGroup.MeshMap[working_mesh_index];
         var mesh         = new Scene.Mesh();
         mesh.MaterialIndex = working_mesh.MaterialIndex;
         var working_material = Scene.Materials[mesh.MaterialIndex];
         mesh.Name      = working_material.Name;
         mesh.Vertices  = working_mesh.Vertices.ToArray();
         mesh.Triangles = working_mesh.Triangles.ToArray();
         mesh.Normals   = working_mesh.Normals.ToArray();
         mesh.Colors    = working_mesh.Colors.ToArray();
         mesh.UVs1      = working_mesh.UVs.ToArray();
         WorkingGroup.Parent.AddChild(mesh);
     }
     WorkingGroup = null;
 }