private void ProcessLayout(TagLayoutGuess layout) { for (uint offset = 0; offset < layout.Size; offset += 4) { var guess = layout.TryGet(offset); if (guess != null) { guess.Accept(offset, this); offset += guess.Size - 4; } else { var remaining = layout.Size - offset; switch (remaining) { case 3: _result.Add(MakeField(offset, BasicFieldType.Int16)); _result.Add(MakeField(offset, BasicFieldType.Int8)); break; case 2: _result.Add(MakeField(offset, BasicFieldType.Int16)); break; case 1: _result.Add(MakeField(offset, BasicFieldType.Int8)); break; default: // >= 4 _result.Add(MakeField(offset, BasicFieldType.Int32)); break; } } } }
private void ProcessLayout(TagLayoutGuess layout) { for (uint offset = 0; offset < layout.Size; offset += 4) { var guess = layout.TryGet(offset); if (guess != null) { guess.Accept(offset, this); offset += guess.Size - 4; } else { var remaining = layout.Size - offset; switch (remaining) { case 3: _result.Add(MakeField(offset, BasicFieldType.Int16)); _result.Add(MakeField(offset, BasicFieldType.Int8)); break; case 2: _result.Add(MakeField(offset, BasicFieldType.Int16)); break; case 1: _result.Add(MakeField(offset, BasicFieldType.Int8)); break; default: // >= 4 _result.Add(MakeField(offset, BasicFieldType.Int32)); break; } } } }
public static void Write(HaloTag tag, TagLayoutGuess layout, ITagLayoutWriter writer) { if (tag != null) { writer.Begin(tag.Class, tag.ClassId, layout); } else { writer.Begin(new MagicNumber(0), 0, layout); } for (uint offset = 0; offset < layout.Size; offset += 4) { var guess = layout.TryGet(offset); if (guess != null) { writer.AddGuess(offset, guess); offset += guess.Size - 4; } else { var remaining = layout.Size - offset; switch (remaining) { case 3: writer.AddUnknownInt16(offset); writer.AddUnknownByte(offset + 2); break; case 2: writer.AddUnknownInt16(offset); break; case 1: writer.AddUnknownByte(offset); break; default: // >= 4 writer.AddUnknownInt32(offset); break; } } } writer.End(); }
public static void Write(HaloTag tag, TagLayoutGuess layout, ITagLayoutWriter writer) { if (tag != null) writer.Begin(tag.Class, tag.ClassId, layout); else writer.Begin(new MagicNumber(0), StringId.Null, layout); for (uint offset = 0; offset < layout.Size; offset += 4) { var guess = layout.TryGet(offset); if (guess != null) { writer.AddGuess(offset, guess); offset += guess.Size - 4; } else { var remaining = layout.Size - offset; switch (remaining) { case 3: writer.AddUnknownInt16(offset); writer.AddUnknownByte(offset + 2); break; case 2: writer.AddUnknownInt16(offset); break; case 1: writer.AddUnknownByte(offset); break; default: // >= 4 writer.AddUnknownInt32(offset); break; } } } writer.End(); }