Ejemplo n.º 1
0
        private static void SaveOWModelFile(ICLIFlags flags, string modelPath, Model.OWModelWriter14 modelWriter,
                                            FindLogic.Combo.ComboInfo info, FindLogic.Combo.ModelInfoNew modelInfo, Stream modelStream, bool doRefpose,
                                            string refposePath)
        {
            Stream refposeStream = new MemoryStream();

            using (Stream modelOutputStream = File.OpenWrite(modelPath)) {
                modelOutputStream.SetLength(0);
                modelWriter.Write(flags, modelOutputStream, info, modelInfo, modelStream, refposeStream);
            }

            if (doRefpose && refposeStream.Length > 0)
            {
                using (Stream refposeOutputStream = File.OpenWrite(refposePath)) {
                    refposeOutputStream.SetLength(0);
                    refposeStream.CopyTo(refposeOutputStream);
                }
            }

            modelStream.Dispose();
            refposeStream.Dispose();
        }
Ejemplo n.º 2
0
        public static void SaveModel(ICLIFlags flags, string path, FindLogic.Combo.ComboInfo info, ulong model)
        {
            bool convertModels = true;
            bool doRefpose     = false;

            if (flags is ExtractFlags extractFlags)
            {
                convertModels = extractFlags.ConvertModels && !extractFlags.Raw;
                doRefpose     = extractFlags.ExtractRefpose;
                if (extractFlags.SkipModels)
                {
                    return;
                }
            }

            FindLogic.Combo.ModelInfoNew modelInfo = info.Models[model];
            string modelDirectory = Path.Combine(path, "Models", modelInfo.GetName());
            string refposePath    = "";

            if (doRefpose)
            {
                refposePath = Path.Combine(modelDirectory, modelInfo.GetNameIndex() + ".smd");
            }

            if (convertModels)
            {
                Model.OWModelWriter14 modelWriter = new Model.OWModelWriter14();

                string modelPath = Path.Combine(modelDirectory, $"{modelInfo.GetNameIndex()}{modelWriter.Format}");
                CreateDirectoryFromFile(modelPath);

                Stream modelStream = OpenFile(modelInfo.GUID);

                if (info.SaveRuntimeData.Threads)
                {
                    info.SaveRuntimeData.Tasks.Add(Task.Run(() => {
                        SaveOWModelFile(flags, modelPath, modelWriter, info, modelInfo, modelStream, doRefpose, refposePath);
                    }));
                }
                else
                {
                    SaveOWModelFile(flags, modelPath, modelWriter, info, modelInfo, modelStream, doRefpose, refposePath);
                }

                if (doRefpose)
                {
                }
            }
            else
            {
                using (Stream modelStream = OpenFile(modelInfo.GUID)) {
                    WriteFile(modelStream, Path.Combine(modelDirectory, modelInfo.GetNameIndex() + ".00C"));
                }
            }

            foreach (ulong modelModelLook in modelInfo.ModelLooks)
            {
                SaveModelLook(flags, modelDirectory, info, modelModelLook);
            }

            foreach (ulong looseMaterial in modelInfo.LooseMaterials)
            {
                SaveMaterial(flags, modelDirectory, info, looseMaterial);
            }

            foreach (ulong modelAnimation in modelInfo.Animations)
            {
                SaveAnimation(flags, modelDirectory, info, modelAnimation, model);
            }
        }