public override TableMetaData CreateChild(LookupTable ilut, ECUMetaData d) { XElement xel; LookupTable3D lut = (LookupTable3D)ilut; xel = new XElement("table"); xel.SetAttributeValue("name", name); xel.SetAttributeValue("address", ilut.dataAddress.ToString("X")); XElement tx = new XElement("table"); tx.SetAttributeValue("name", "X"); tx.SetAttributeValue("address", lut.colsAddress.ToString("X")); tx.SetAttributeValue("elements", lut.cols); xel.Add(tx); XElement ty = new XElement("table"); ty.SetAttributeValue("name", "Y"); ty.SetAttributeValue("address", lut.rowsAddress.ToString("X")); ty.SetAttributeValue("elements", lut.rows); xel.Add(ty); return(TableFactory.CreateTable(xel, name, d)); //TODO also set attirbutes and split this up! Copy to table2D!! }
/// <summary> /// Try to read the Patch metadata from the file and add this data to table lists. /// </summary> private bool TryParseDefs(Blob metadata, ref int offset, String defPath) { UInt32 cookie = 0; while ((metadata.Content.Count > offset + 8) && metadata.TryGetUInt32(ref cookie, ref offset)) { if (cookie == OpTable3d)//TODO CONDITIONALLY READ LUTS! { string metaString = null; uint metaOffset = 0; if (metadata.TryGetUInt32(ref metaOffset, ref offset)) { if (this.TryReadDefString(metadata, out metaString, ref offset)) { Blob tableBlob; this.parentMod.TryGetMetaBlob(metaOffset, 10, out tableBlob, this.parentMod.blobList.Blobs); LookupTable3D lut = new LookupTable3D(metaString, tableBlob, metaOffset); if (metaString != null) { RomLutList.Add(lut); } } else { Trace.WriteLine("Invalid definition found."); return(false); } } else { Trace.WriteLine("Invalid definition found."); return(false); } } else if (cookie == OpTable2d)//TODO CONDITIONALLY READ LUTS! { string metaString = null; uint metaOffset = 0; if (metadata.TryGetUInt32(ref metaOffset, ref offset)) { if (this.TryReadDefString(metadata, out metaString, ref offset)) { Blob tableBlob; this.parentMod.TryGetMetaBlob(metaOffset, 10, out tableBlob, this.parentMod.blobList.Blobs); LookupTable2D lut = new LookupTable2D(metaString, tableBlob, metaOffset); if (metaString != null) { RomLutList.Add(lut); } } else { Trace.WriteLine("Invalid definition found."); return(false); } } else { Trace.WriteLine("Invalid definition found."); return(false); } } else if (cookie == OpTable1d) { string metaString = null; uint metaOffset = 0; if (metadata.TryGetUInt32(ref metaOffset, ref offset)) { if (this.TryReadDefString(metadata, out metaString, ref offset)) { LookupTable lut = new LookupTable(metaString, metaOffset); if (metaString != null) { RomLutList.Add(lut); } } else { Trace.WriteLine("Invalid definition found."); return(false); } } else { Trace.WriteLine("Invalid definition found."); return(false); } } else if (cookie == OpRAM) { string paramName = null; string paramId = null; string paramType = null; uint paramOffset = 0; if (metadata.TryGetUInt32(ref paramOffset, ref offset)) { if (this.TryReadDefString(metadata, out paramId, ref offset)) { if (this.TryReadDefString(metadata, out paramType, ref offset)) { if (this.TryReadDefString(metadata, out paramName, ref offset)) { // found modName, output to string! KeyValuePair <String, TableMetaData> tempTable = CreateRomRaiderRamTable(paramName, (int)paramOffset, paramId, paramType); if (tempTable.Key != null) { this.RamTableList.Add(tempTable.Key, tempTable.Value); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else if (cookie == OpRAMAllBits) { string paramName = null; string paramId = null; string paramType = null; uint paramOffset = 0; if (metadata.TryGetUInt32(ref paramOffset, ref offset)) { if (this.TryReadDefString(metadata, out paramId, ref offset)) { if (this.TryReadDefString(metadata, out paramType, ref offset)) { if (this.TryReadDefString(metadata, out paramName, ref offset)) { // found modName, output to string! int len = Utils.ConvertStorageTypeToIntBytes(paramType); uint address = paramOffset; for (int i = 0; i < len; i++) { for (int j = 0; j < 8; j++) { int bit = ((j) + (8 * (i))); string bitstring = bit.ToString(); KeyValuePair <String, TableMetaData> tempTable = CreateRomRaiderRamTableBit(paramName + " Bit " + bitstring, (int)address, paramId, j); if (tempTable.Key != null) { this.RamTableList.Add(tempTable.Key, tempTable.Value); } } address++; } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else if (cookie == OpRAMBit) { string paramName = null; string paramId = null; uint paramOffset = 0; uint paramBit = 0; if (metadata.TryGetUInt32(ref paramOffset, ref offset)) { if (this.TryReadDefString(metadata, out paramId, ref offset)) { if (metadata.TryGetUInt32(ref paramBit, ref offset)) { if (this.TryReadDefString(metadata, out paramName, ref offset)) { int bit = bit = Utils.SingleBitBitmaskToBit((int)paramBit); // found modName, output to string! KeyValuePair <String, TableMetaData> tempTable = CreateRomRaiderRamTableBit(paramName, (int)paramOffset, paramId, bit); if (tempTable.Key != null) { this.RamTableList.Add(tempTable.Key, tempTable.Value); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else { Trace.WriteLine("Invalid definition found in mod metadata."); return(false); } } else if (cookie == Mod.endoffile) { break; } } return(true); }