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(); }
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); } }