コード例 #1
0
ファイル: CloneTool.cs プロジェクト: Emilgardis/falloutsnip
        BaseRecord Clone(BaseRecord record, bool bRecursive)
        {
            var p = GetPluginFromNode(record);
            PluginInfo info;
            if (!pluginMap.TryGetValue(p, out info))
                pluginMap.Add(p, info = new PluginInfo() { Masters = p.GetMasters() });

            var result = record.Clone(recursive: bRecursive);
            foreach (var rec in result.Enumerate().OfType<Record>())
            {
                uint newid;
                if (info.References.TryGetValue(rec.FormID, out newid) && rec.FormID != newid)
                    rec.FormID = newid;

                // now handle child references
                rec.MatchRecordStructureToRecord();
                foreach (var elem in rec.SubRecords
                    .SelectMany(sr => sr.EnumerateElements())
                    .Where(elem => elem.Structure != null && elem.Structure.type == ElementValueType.FormID)
                    )
                {
                    var value = elem.GetValue<uint>();
                    if (info.References.TryGetValue(value, out newid) && value != newid)
                        elem.AssignValue<uint>(newid);
                }
            }
            return result;
        }