private static bool LoadAndMergeInstrumentList(ProjectLoadBuffer serializer, bool checkOnly = false, bool createMissing = true) { int numInstruments = 0; serializer.Serialize(ref numInstruments); var instrumentIdNameMap = new List <Tuple <int, string> >(); for (int i = 0; i < numInstruments; i++) { var instId = 0; var instName = ""; serializer.Serialize(ref instId); serializer.Serialize(ref instName); instrumentIdNameMap.Add(new Tuple <int, string>(instId, instName)); } var dummyInstrument = new Instrument(); var needMerge = false; // Match instruments by name, create missing ones and remap IDs. for (int i = 0; i < numInstruments; i++) { var instId = instrumentIdNameMap[i].Item1; var instName = instrumentIdNameMap[i].Item2; var existingInstrument = serializer.Project.GetInstrument(instName); if (existingInstrument != null) { serializer.RemapId(instId, existingInstrument.Id); dummyInstrument.SerializeState(serializer); // Skip } else { needMerge = true; if (!checkOnly) { if (createMissing) { var instrument = serializer.Project.CreateInstrument(instName); serializer.RemapId(instId, instrument.Id); instrument.SerializeState(serializer); } else { serializer.RemapId(instId, -1); dummyInstrument.SerializeState(serializer); // Skip } } } } return(needMerge); }
private static bool LoadAndMergeInstrumentList(ProjectLoadBuffer serializer, bool checkOnly = false, bool createMissing = true) { int numInstruments = 0; serializer.Serialize(ref numInstruments); var instrumentIdNameMap = new List <Tuple <int, int, string> >(); for (int i = 0; i < numInstruments; i++) { var instId = 0; var instType = 0; var instName = ""; serializer.Serialize(ref instId); serializer.Serialize(ref instType); serializer.Serialize(ref instName); instrumentIdNameMap.Add(new Tuple <int, int, string>(instId, instType, instName)); } var dummyInstrument = new Instrument(); var needMerge = false; // Match instruments by name, create missing ones and remap IDs. for (int i = 0; i < numInstruments; i++) { var instId = instrumentIdNameMap[i].Item1; var instType = instrumentIdNameMap[i].Item2; var instName = instrumentIdNameMap[i].Item3; var existingInstrument = serializer.Project.GetInstrument(instName); if (existingInstrument != null) { if (existingInstrument.Expansion == instType) { serializer.RemapId(instId, existingInstrument.Id); } else { serializer.RemapId(instId, -1); // Incompatible expansion type, skip. } dummyInstrument.SerializeState(serializer); // Skip } else { needMerge = true; if (!checkOnly && createMissing && (instType == ExpansionType.None || serializer.Project.UsesExpansionAudio(instType))) { var instrument = serializer.Project.CreateInstrument(instType, instName); serializer.RemapId(instId, instrument.Id); instrument.SerializeState(serializer); } else { serializer.RemapId(instId, -1); dummyInstrument.SerializeState(serializer); // Skip } } } serializer.Project.SortInstruments(); return(needMerge); }