Пример #1
0
        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);
        }
Пример #2
0
        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);
        }