예제 #1
0
파일: VMMFile.cs 프로젝트: maxdup/VMMC
        public void VMMCollapse(string output)
        {
            Console.WriteLine("collapsing VMM");
            // find the topLevel vmf
            List <Dictionary <string, string> > topLevels = vmfs.FindAll(dic => dic.Keys.Contains("TopLevel"));

            if (topLevels.Count == 0)
            {
                TopLevelVmf = vmfs.First();
            }
            else
            {
                TopLevelVmf = topLevels.Aggregate((curMin, x) => (curMin == null || int.Parse(x["TopLevel"]) < int.Parse(curMin["topLevel"]) ? x : curMin));
            }
            vmfs.Remove(TopLevelVmf);

            //start file
            VMFFile topmap = new VMFFile(vmfdir + "/" + TopLevelVmf["File"]);

            VMFVector3Value originVal = new VMFVector3Value {
                X = 0, Y = 0, Z = 0
            };
            VMFVector3Value anglesVal = new VMFVector3Value {
                Pitch = 0, Roll = 0, Yaw = 0
            };
            VMFNumberValue fixup_styleVal = new VMFNumberValue {
                Value = 0
            };

            foreach (Dictionary <string, string> vmf in vmfs)
            {
                Console.WriteLine("Inserting submap of {0}", vmfdir + "/" + vmf["File"]);

                VMFFile submap = new VMFFile(vmfdir + "/" + vmf["File"]);

                foreach (VMFStructure worldStruct in submap.World)
                {
                    if (worldStruct.Type == VMFStructureType.Group || worldStruct.Type == VMFStructureType.Solid)
                    {
                        VMFStructure clone = worldStruct.Clone(topmap.LastID, topmap.LastNodeID);
                        clone.Transform(originVal, anglesVal);
                        topmap.World.Structures.Add(clone);
                    }
                }

                foreach (VMFStructure rootStruct in submap.Root)
                {
                    if (rootStruct.Type == VMFStructureType.Entity)
                    {
                        VMFStructure clone = rootStruct.Clone(topmap.LastID, topmap.LastNodeID);
                        clone.Transform(originVal, anglesVal);
                        topmap.Root.Structures.Add(clone);
                    }
                }
                topmap.updateIds();
            }
            topmap.ResolveInstances();
            topmap.Save(vmfdir + ".vmf");
        }