public void ReconstructTagData(multilingual_unicode_string_list_group owner, LanguageType this_lang) { for (int x = 0, dst_offset = tagDataOffset, size; x < referenceCount; x++, dst_offset += size) { var dst = owner.StringData.Value; Blam.StringId name; size = languagePack.CopyStringReferenceData(referenceIndex + x, dst, dst_offset, out name); var sref = AddOrGetReferenceByName(owner, name); sref.LanguageOffsets[(int)this_lang].Value = dst_offset; } }
static multilingual_unicode_string_reference_block AddOrGetReferenceByName(multilingual_unicode_string_list_group def, Blam.StringId name) { // See if a reference already exists for [name]... foreach (var sref in def.StringRefs) { if (sref.StringId.Handle == name) { return(sref); } } // one doesn't, so add it and return the new block data multilingual_unicode_string_reference_block sr; def.StringRefs.Add(out sr); // Initialize name id sr.StringId.Handle = name; // Initialize all the offsets to be invalid foreach (var lang_offset in sr.LanguageOffsets) { lang_offset.Value = -1; } return(sr); }
static multilingual_unicode_string_reference_block AddOrGetReferenceByName(multilingual_unicode_string_list_group def, Blam.StringId name) { // See if a reference already exists for [name]... foreach (var sref in def.StringRefs) if (sref.StringId.Handle == name) return sref; // one doesn't, so add it and return the new block data multilingual_unicode_string_reference_block sr; def.StringRefs.Add(out sr); // Initialize name id sr.StringId.Handle = name; // Initialize all the offsets to be invalid foreach (var lang_offset in sr.LanguageOffsets) lang_offset.Value = -1; return sr; }