public static H3D IdentifyAndOpen(string FileName, H3DDict <H3DBone> Skeleton = null) { H3D Output = null; using (FileStream FS = new FileStream(FileName, FileMode.Open)){ Output = IdentifyAndOpen(FS, Skeleton); } if (Output == null) { Output = FormatIdentifier.IdentifyAndOpen(FileName, Skeleton); } return(Output); }
public static H3D Merge(string[] FileNames, Renderer Renderer, H3D Scene = null) { int OpenFiles = 0; foreach (string FileName in FileNames) { H3DDict <H3DBone> Skeleton = null; if (Scene != null && Scene.Models.Count > 0) { Skeleton = Scene.Models[0].Skeleton; } H3D Data = FormatIdentifier.IdentifyAndOpen(FileName, Skeleton); if (Data != null) { if (Scene == null) { Scene = Data; } else { Scene.Merge(Data); } Renderer.Merge(Data); OpenFiles++; } } if (OpenFiles == 0) { MessageBox.Show( "Unsupported file format!", "Can't open file!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } return(Scene); }
public static H3D Merge(string[] FileNames, Renderer Renderer, H3D Scene = null) { if (Scene == null) { //Renderer.DeleteAll(); Scene = new H3D(); } int OpenFiles = 0; foreach (string FileName in FileNames) { H3DDict <H3DBone> Skeleton = null; if (Scene.Models.Count > 0) { Skeleton = Scene.Models[0].Skeleton; } H3D Data = FormatIdentifier.IdentifyAndOpen(FileName, Skeleton); if (Data != null) { Scene.Merge(Data); Renderer.Merge(Data); OpenFiles++; } } // string[] names = // { // "FightingAction1", // "FightingAction2", // "FightingAction4", // "FightingAction5", // "FightingAction6", // "FightingAction9", // "FightingAction13", // "FightingAction17", // "FightingAction18", // "PetAction1-Pose", // "PetAction5-Falling Asleep", // "PetAction6-Sleepy", // "PetAction7-Sleepy Awaken", // "PetAction8-Sleeping", // "PetAction9-Awaken", // "PetAction10-Refuse", // "PetAction12-Agree", // "PetAction13-Happy", // "PetAction14-Very Happy", // "PetAction15-Look Around", // "PetAction17-Comfortable", // "PetAction19-Sad", // "PetAction20-Salutate", // "PetAction22-Angry", // "PetAction23-Begin Eating", // "PetAction24-Eating", // "PetAction25-Eating Finished", // "PetAction26-No Eating", // "MapAction1", // "MapAction3", // "MapAction4" // }; // for (var i = 0; i < Scene.SkeletalAnimations.Count; i++) // { // Scene.SkeletalAnimations[i].Name = names[i]; // } if (OpenFiles == 0) { MessageBox.Show( "Unsupported file format!", "Can't open file!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } return(Scene); }
private static H3D IdentifyAndOpen(Stream Stm, H3DDict <H3DBone> Skeleton) { H3D Output = null; if (GFPackage.IsValidPackage(Stm)) { GFPackage.Header PackHeader = GFPackage.GetPackageHeader(Stm); switch (PackHeader.Magic) { //case "AL": Output = GFAreaLOD.OpenAsH3D(FS, PackHeader, 1); break; //case "AD": Output = GFPackedTexture.OpenAsH3D(FS, PackHeader, 1); break; //case "BG": Output = GFL2OverWorld.OpenAsH3D(FS, PackHeader, Skeleton); break; case "BS": Output = GFBtlSklAnim.OpenAsH3D(Stm, PackHeader, Skeleton); break; //case "CM": Output = GFCharaModel.OpenAsH3D(FS, PackHeader); break; //case "GR": Output = GFOWMapModel.OpenAsH3D(FS, PackHeader); break; case "MM": Output = GFOWCharaModel.OpenAsH3D(Stm, PackHeader); break; case "PC": if (PackHeader.Entries.Length == 5 || PackHeader.Entries.Length == 3) { Output = GFPkmnModel.OpenAsH3D(Stm, PackHeader, Skeleton); } else { goto default; } break; //case "LL": //default: //case "PT": Output = GFPackedTexture.OpenAsH3D(FS, PackHeader, 0); break; //case "PK": //case "PB": // Output = GFPkmnSklAnim.OpenAsH3D(FS, PackHeader, Skeleton); break; default: Output = new H3D(); for (int i = 0; i < PackHeader.Entries.Length; i++) { GFPackage.Entry Entry = PackHeader.Entries[i]; //Need to read to memory for correct absolute seeks Stm.Seek(Entry.Address, SeekOrigin.Begin); byte[] Buf = new byte[Entry.Length]; Stm.Read(Buf, 0, Buf.Length); using (MemoryStream MS = new MemoryStream(Buf)) { H3D EntryH3D = FormatIdentifier.IdentifyByMagic(MS, Skeleton, null); if (EntryH3D != null) { Output.Merge(EntryH3D, true); } else { MS.Seek(0, SeekOrigin.Begin); if (GFPackage.IsValidPackage(MS)) { H3D SubContainer = IdentifyAndOpen(MS, Skeleton); if (SubContainer != null) { Output.Merge(SubContainer); } } } } } break; } } return(Output); }