Exemplo n.º 1
0
        /// <summary>
        /// Helper method for the<see cref="MigrateFields"/> to replace the fields in the scripts.
        /// </summary>
        /// <param name="scene"></param>
        /// <param name="currentMergeNodes"></param>
        /// <param name="rootYamlNode"></param>
        /// <returns></returns>
        private string[] recursiveReplaceField(ref string[] scene, List <MergeNode> currentMergeNodes,
                                               YamlNode rootYamlNode, // todo : refactor to multiple methods
                                               List <ScriptMapping> scriptMappings)
        {
            IDictionary <YamlNode, YamlNode> yamlChildren = rootYamlNode.GetChildren();

            foreach (KeyValuePair <YamlNode, YamlNode> yamlNode in yamlChildren)
            {
                string yamlNodeKey = yamlNode.Key.ToString();
                if (constants.MonoBehaviourFieldExclusionList.Contains(yamlNodeKey))
                {
                    continue;
                }

                int line = yamlNode.Key.Start.Line - 1;

                MergeNode currentMergeNode =
                    currentMergeNodes.FirstOrDefault(node => node.OriginalValue == yamlNodeKey);
                if (currentMergeNode == null)
                {
                    Debug.LogError("[DataLoss] Could not find mergeNode for key : " + yamlNodeKey);
                    continue;
                }

                if (yamlNode.Value is YamlMappingNode)
                {
                    scene = handleMappingNode(ref scene, currentMergeNode, scriptMappings, yamlNode);
                }
                else if (yamlNode.Value is YamlSequenceNode)
                {
                    scene = handleSequenceNode(ref scene, currentMergeNode, scriptMappings, yamlNode);
                }
                else
                {
                    scene = handleValueNode(ref scene, currentMergeNode, yamlNodeKey, line, yamlNode);
                }
            }

            return(scene);
        }