private void ReadSectionTYPE(BinaryReaderEx br) { Types.Clear(); Dictionary <string, BinaryReaderEx> sections = new Dictionary <string, BinaryReaderEx>(); while (br.Position < br.Length) { var sLength = br.ReadHKOffset(); var sName = br.ReadASCII(4); byte[] data = br.ReadBytes((int)(sLength - 8)); sections.Add(sName, new BinaryReaderEx(false, data)); } var typeStrings = sections["TSTR"].ReadHKStringList(); var fieldStrings = sections["FSTR"].ReadHKStringList(); //TNAM br = sections["TNAM"]; var typeCount = br.ReadHKPackedInt(); Types = new List <HKType>(); Types.Add(null); for (int i = 1; i < typeCount; i++) { var t = new HKType(); Types.Add(t); } for (int i = 1; i < typeCount; i++) { Types[i].Name = typeStrings[(int)br.ReadHKPackedInt()]; var templateCount = br.ReadHKPackedInt(); for (int j = 0; j < templateCount; j++) { var template = new HKTypeTemplate(); template.Name = typeStrings[(int)br.ReadHKPackedInt()]; template.Value = br.ReadHKPackedInt(); Types[i].Templates.Add(template); } } //TBOD br = sections["TBOD"]; while (br.Position < br.Length) { var typeIndex = br.ReadHKPackedInt(); if (typeIndex == 0) { continue; } var t = Types[(int)typeIndex]; t.ParentTypeIndex = br.ReadHKPackedInt(); t.Parent = Types[(int)t.ParentTypeIndex]; t.Flags = (HKTagFlag)br.ReadHKPackedInt(); if ((t.Flags & HKTagFlag.SubType) != 0) { t.SubTypeFlags = br.ReadHKPackedInt(); } if (((t.Flags & HKTagFlag.Pointer) != 0) && ((t.SubTypeFlags & 0xF) >= 6)) { t.PointerTypeIndex = br.ReadHKPackedInt(); t.Pointer = Types[(int)t.PointerTypeIndex]; } if ((t.Flags & HKTagFlag.Version) != 0) { t.Version = br.ReadHKPackedInt(); } if ((t.Flags & HKTagFlag.ByteSize) != 0) { t.ByteSize = br.ReadHKPackedInt(); t.Alignment = br.ReadHKPackedInt(); } if ((t.Flags & HKTagFlag.AbstractValue) != 0) { t.AbstractValue = br.ReadHKPackedInt(); } if ((t.Flags & HKTagFlag.Members) != 0) { uint memberCount = br.ReadHKPackedInt(); for (int i = 0; i < memberCount; i++) { var member = new HKMember(); member.Name = fieldStrings[(int)br.ReadHKPackedInt()]; member.Flags = br.ReadHKPackedInt(); member.ByteOffset = br.ReadHKPackedInt(); member.TypeIndex = br.ReadHKPackedInt(); member.Type = Types[(int)member.TypeIndex]; t.Members.Add(member); } } if ((t.Flags & HKTagFlag.Interfaces) != 0) { uint interfaceCount = br.ReadHKPackedInt(); for (int i = 0; i < interfaceCount; i++) { var inter = new HKInterface(); inter.TypeIndex = br.ReadHKPackedInt(); inter.Type = Types[(int)inter.TypeIndex]; inter.Value = br.ReadHKPackedInt(); t.Interfaces.Add(inter); } } if ((t.Flags & HKTagFlag.Unknown) != 0) { throw new NotImplementedException("Didn't know 'HKTagFlag.Unknown' was used."); } } //THSH br = sections["THSH"]; var hashCount = br.ReadHKPackedInt(); for (int i = 0; i < hashCount; i++) { var hashTypeIndex = br.ReadHKPackedInt(); var hashValue = br.ReadUInt32(); Types[(int)hashTypeIndex].Hash = hashValue; } }
public void Add(HKType key, int timing) { CraftingTimingInMiliseconds.Add(key, timing); TotalTimeInMiliseconds += timing; }