Example #1
0
        /// <summary>
        /// Clone a InGane Object based on the relations of the RCOL Files
        /// </summary>
        /// <param name="onlydefault">true if you only want default MMAT Files</param>
        /// <param name="exclude">List of ReferenceNames that should be excluded</param>
        public void RcolModelClone(string[] modelnames, ArrayList exclude)
        {
            if (modelnames == null)
            {
                return;
            }

            Scenegraph.FileExcludeList = Scenegraph.DefaultFileExcludeList;

            SimPe.FileTable.FileIndex.Load();
            if (WaitingScreen.Running)
            {
                WaitingScreen.UpdateMessage("Walking Scenegraph");
            }
            Scenegraph sg = new Scenegraph(modelnames, exclude, this.setup);

            if ((Setup.BaseResource & CloneSettings.BaseResourceType.Ref) == CloneSettings.BaseResourceType.Ref)
            {
                if (WaitingScreen.Running)
                {
                    WaitingScreen.UpdateMessage("Reading 3IDR References");
                }
                sg.AddFrom3IDR(package);
            }
            if ((Setup.BaseResource & CloneSettings.BaseResourceType.Xml) == CloneSettings.BaseResourceType.Xml)
            {
                if (WaitingScreen.Running)
                {
                    WaitingScreen.UpdateMessage("Reading XObject Definition");
                }
                sg.AddFromXml(package);
            }
            if (Setup.IncludeWallmask)
            {
                if (WaitingScreen.Running)
                {
                    WaitingScreen.UpdateMessage("Scanning for Wallmasks");
                }
                sg.AddWallmasks(modelnames);
            }
            if (Setup.PullResourcesByStr)
            {
                if (WaitingScreen.Running)
                {
                    WaitingScreen.UpdateMessage("Scanning for #Str-linked Resources");
                }
                sg.AddStrLinked(package, Setup.StrInstances);
            }
            if (Setup.IncludeAnimationResources)
            {
                if (WaitingScreen.Running)
                {
                    WaitingScreen.UpdateMessage("Scanning for Animations");
                }
                sg.AddAnims(this.GetAnimNames());
            }
            if (WaitingScreen.Running)
            {
                WaitingScreen.UpdateMessage("Collect Slave TXMTs");
            }
            sg.AddSlaveTxmts(sg.GetSlaveSubsets());

            if (WaitingScreen.Running)
            {
                WaitingScreen.UpdateMessage("Building Package");
            }
            sg.BuildPackage(package);
            if (WaitingScreen.Running)
            {
                WaitingScreen.UpdateMessage("Collect MMAT Files");
            }
            sg.AddMaterialOverrides(package, setup.OnlyDefaultMmats, true, setup.ThrowExceptions);
            if (WaitingScreen.Running)
            {
                WaitingScreen.UpdateMessage("Collect Slave TXMTs");
            }
            Scenegraph.AddSlaveTxmts(package, Scenegraph.GetSlaveSubsets(package));


            if (setup.UpdateMmatGuids)
            {
                if (WaitingScreen.Running)
                {
                    WaitingScreen.UpdateMessage("Fixing MMAT Files");
                }
                this.UpdateMMATGuids(this.GetGuidList(), this.GetPrimaryGuid());
            }
        }