public static void Encode(this AssetLibraryManager alm, BitWriter writer, int setId, AssetGroup group, string value) { if (writer == null) { throw new ArgumentNullException("writer"); } if (string.IsNullOrEmpty(value) == true) { throw new ArgumentNullException("value"); } var config = alm.Configurations[group]; uint index; if (value == "None") { index = config.NoneIndex; } else { var parts = value.Split(new[] { '.' }, 2); if (parts.Length != 2) { throw new ArgumentException(); } var package = parts[0]; var asset = parts[1]; if (alm.GetIndex(setId, group, package, asset, out index) == false) { if (alm.GetIndex(0, group, package, asset, out index) == false) { throw new ArgumentException("unsupported asset"); } } } writer.WriteUInt32(index, config.SublibraryBits + config.AssetBits); }