private bool loadFRAM(BinaryReader reader, odfFileSection fileSec) { odfFrameSection objSection = new odfFrameSection(); for (int secOffset = 0; secOffset < fileSec.Size; secOffset += 64 + 4 + 16 * 4 + 44 + 4 + 4 + 216 + 4 + 8 * 4 + 12 + 4 + 0x1FC + 4 + 8 + 4) { ObjectName name = new ObjectName(reader.ReadBytes(64)); ObjectID id = new ObjectID(reader.ReadBytes(4)); odfFrame frame = new odfFrame(name, id, 4); frame.Matrix = reader.ReadMatrix(); frame.AlwaysZero1 = reader.ReadBytes(44); frame.ParentId = new ObjectID(reader.ReadBytes(4)); frame.MeshId = new ObjectID(reader.ReadBytes(4)); frame.AlwaysZero2 = reader.ReadBytes(216); frame.Unknown3 = reader.ReadInt32(); frame.Unknown4 = reader.ReadSingleArray(8); frame.Unknown5 = reader.ReadUInt32(); frame.Unknown6 = reader.ReadInt32(); frame.AlwaysZero7 = reader.ReadBytes(4); frame.Unknown8 = reader.ReadSingle(); frame.AlwaysZero9 = reader.ReadBytes(0x1FC); frame.Unknown10 = reader.ReadSingle(); frame.AlwaysZero11 = reader.ReadBytes(8); frame.Unknown12 = reader.ReadSingle(); if (objSection.Count > 0) { odfFrame parentFrame = odf.FindFrame(frame.ParentId, objSection.RootFrame); if (parentFrame == null) { Console.WriteLine("Error in FRAM : ParentId " + frame.ParentId + " not found for frame " + frame.Name); return(false); } else { parentFrame.AddChild(frame); } } else { objSection.AddChild(frame); } } fileSec.Section = objSection; this.FrameSection = objSection; return(true); }
private void CollectObjectIDs(IObjInfo obj) { ObjectID id = null; if (obj is odfMaterial) { id = ((odfMaterial)obj).Id; } else if (obj is odfTexture) { id = ((odfTexture)obj).Id; } else if (obj is odfMesh) { odfMesh mesh = (odfMesh)obj; for (int i = 0; i < mesh.Count; i++) { odfSubmesh submesh = mesh[i]; CollectObjectIDs(submesh); } id = ((odfMesh)obj).Id; } else if (obj is odfSubmesh) { id = ((odfSubmesh)obj).Id; } else if (obj is odfFrame) { odfFrame frame = (odfFrame)obj; for (int i = 0; i < frame.Count; i++) { odfFrame childFrame = frame[i]; CollectObjectIDs(childFrame); } id = frame.Id; } else if (obj is odfMaterialSection) { odfMaterialSection matSec = (odfMaterialSection)obj; foreach (odfMaterial mat in matSec) { CollectObjectIDs(mat); } } else if (obj is odfTextureSection) { odfTextureSection texSec = (odfTextureSection)obj; foreach (odfTexture tex in texSec) { CollectObjectIDs(tex); } } else if (obj is odfMeshSection) { odfMeshSection meshSec = (odfMeshSection)obj; foreach (odfMesh mesh in meshSec) { CollectObjectIDs(mesh); } } else if (obj is odfFrameSection) { odfFrameSection frameSec = (odfFrameSection)obj; foreach (odfFrame frame in frameSec) { CollectObjectIDs(frame); } } else if (obj is odfEnvelopeSection) { odfEnvelopeSection envSec = (odfEnvelopeSection)obj; foreach (odfBoneList boneList in envSec.ChildList) { CollectObjectIDs(boneList); } id = envSec.Id; } else if (obj is odfBoneList) { odfBoneList boneList = (odfBoneList)obj; foreach (odfBone bone in boneList) { CollectObjectIDs(bone); } id = boneList.Id; } else if (obj is odfMorphSection) { id = ((odfMorphSection)obj).Id; } else if (obj is odfTXPTSection) { id = ((odfTXPTSection)obj).Id; } else if (obj is odfMATASection) { id = ((odfMATASection)obj).Id; } else if (obj is odfANIMSection) { id = ((odfANIMSection)obj).Id; } else if (obj is odfBANMSection) { id = ((odfBANMSection)obj).Id; } if (id != null) { int idVal = (int)id; if (idVal != 0) { try { this.UsedIDs.Add(idVal, obj.GetType()); } catch (ArgumentException argEx) { Type typeInDic; this.UsedIDs.TryGetValue(idVal, out typeInDic); Report.ReportLog(obj.GetType() + " ID: " + id + " - " + argEx.Message + " - " + typeInDic); } catch (Exception ex) { Report.ReportLog(obj.GetType() + " ID: " + id + " - " + ex.Message); } } else if (!(obj is odfBoneList)) { Report.ReportLog("Invalid ID used by " + obj.GetType().Name); } } }