Ejemplo n.º 1
0
        private static int ExtractSampleRateFrom([NotNull] IBlockMappingNode root)
        {
            var sampleRateText  = root.FindMapEntryBySimpleKey("m_SampleRate")?.Content?.Value.GetPlainScalarText();
            var foundSampleRate = int.TryParse(sampleRateText, out var sampleRate);

            return(foundSampleRate ? sampleRate : throw new AnimationExtractorException());
        }
        public static INode GetCollection([CanBeNull] IBlockMappingNode blockMappingNode, string documentName, string name)
        {
            var documentEntry = blockMappingNode?.Entries.FirstOrDefault(
                t => documentName.Equals(t.Key.GetPlainScalarText()))?.Content.Value as IBlockMappingNode;

            var collection = documentEntry?.Entries.FirstOrDefault(t => name.Equals(t.Key.GetPlainScalarText()))?.Content.Value;

            return(collection);
        }
Ejemplo n.º 3
0
        private static LocalList <long> ExtractStateMachineBehavioursAnchorsFrom([NotNull] IBlockMappingNode root)
        {
            var node = root.FindMapEntryBySimpleKey("m_StateMachineBehaviours")?.Content?.Value;

            if (!(node is IBlockSequenceNode record))
            {
                return(new LocalList <long>());
            }
            return(record.Entries.Aggregate(new LocalList <long>(), AddAnchor));
        }
Ejemplo n.º 4
0
        private static string ExtractAnimatorStateNameFrom([NotNull] IBlockMappingNode root)
        {
            var name = root.FindMapEntryBySimpleKey("m_Name")?.Content?.Value?.GetPlainScalarText();

            if (name is null)
            {
                throw new AnimatorExtractorException();
            }
            return(name);
        }
Ejemplo n.º 5
0
        public static IBlockMappingEntry FindMapEntryBySimpleKey([CanBeNull] this IBlockMappingNode mapNode, string keyName)
        {
            if (mapNode == null)
            {
                return(null);
            }

            foreach (var mappingEntry in mapNode.EntriesEnumerable)
            {
                if (mappingEntry.Key.MatchesPlainScalarText(keyName))
                {
                    return(mappingEntry);
                }
            }

            return(null);
        }
Ejemplo n.º 6
0
        public void ConsumeGameObject(IYamlDocument gameObject, IBlockMappingNode modifications)
        {
            string name = null;

            if (modifications != null)
            {
                var documentId = gameObject.GetFileId();
                name = UnityObjectPsiUtil.GetValueFromModifications(modifications, documentId, UnityYamlConstants.NameProperty);
            }
            if (name == null)
            {
                name = gameObject.GetUnityObjectPropertyValue(UnityYamlConstants.NameProperty).AsString();
            }

            if (name?.Equals(string.Empty) == true)
            {
                name = null;
            }
            NameParts.Add(name ?? "Unknown");
        }
Ejemplo n.º 7
0
        private static LocalList <long> ExtractChildAnchors(
            [NotNull] IBlockMappingNode root, string recordKey, string innerRecordKey)
        {
            var anchors = (root.FindMapEntryBySimpleKey(recordKey)?.Content?.Value as IBlockSequenceNode)?
                          .Entries
                          .SelectNotNull(t => t?.Value as IBlockMappingNode)
                          .SelectNotNull(t => t.FindMapEntryBySimpleKey(innerRecordKey)?.Content?.Value as IFlowMappingNode)
                          .SelectNotNull(t => t.FindMapEntryBySimpleKey("fileID")?.Value as IPlainScalarNode)
                          .SelectNotNull(t => long.TryParse(t?.GetPlainScalarText(), out var anchor) ? anchor : (long?)null);
            var list = new LocalList <long>();

            if (anchors is null)
            {
                return(list);
            }
            foreach (var anchor in anchors)
            {
                list.Add(anchor);
            }
            return(list);
        }
Ejemplo n.º 8
0
        public static string GetValueFromModifications(IBlockMappingNode modification, string targetFileId, string value)
        {
            if (targetFileId != null && modification.FindMapEntryBySimpleKey(UnityYamlConstants.ModificationsProperty)?.Value is IBlockSequenceNode modifications)
            {
                foreach (var element in modifications.Entries)
                {
                    if (!(element.Value is IBlockMappingNode mod))
                    {
                        return(null);
                    }
                    var type = (mod.FindMapEntryBySimpleKey(UnityYamlConstants.PropertyPathProperty)?.Value as IPlainScalarNode)
                               ?.Text.GetText();
                    var target = mod.FindMapEntryBySimpleKey(UnityYamlConstants.TargetProperty)?.Value?.AsFileID();
                    if (type?.Equals(value) == true && target?.fileID.Equals(targetFileId) == true)
                    {
                        return((mod.FindMapEntryBySimpleKey(UnityYamlConstants.ValueProperty)?.Value as IPlainScalarNode)?.Text.GetText());
                    }
                }
            }

            return(null);
        }
Ejemplo n.º 9
0
 public void ConsumeGameObject(IYamlDocument gameObject, IBlockMappingNode modifications)
 {
     {
         int rootOrder = -1;
         var transform = UnityObjectPsiUtil.FindTransformComponentForGameObject(gameObject);
         if (modifications != null)
         {
             if (!int.TryParse(UnityObjectPsiUtil.GetValueFromModifications(modifications, transform.GetFileId(), UnityYamlConstants.RootOrderProperty)
                               , out rootOrder))
             {
                 rootOrder = -1;
             }
         }
         if (rootOrder == -1)
         {
             var rootOrderAsString = transform.GetUnityObjectPropertyValue(UnityYamlConstants.RootOrderProperty).AsString();
             if (!int.TryParse(rootOrderAsString, out rootOrder))
             {
                 rootOrder = -1;
             }
         }
         RootIndices.Add(rootOrder);
     }
 }
Ejemplo n.º 10
0
        // Invariant : startGameObject is Transform Component if it is not stripped
        // This method traverse scene hierarchy via visiting transform components and push corresponding to transform GameObject into consumer
        private void ProcessSceneHierarchyFromComponentToRootInner(IYamlDocument startUnityObject, IUnitySceneProcessorConsumer consumer, IBlockMappingNode modifications)
        {
            var currentUnityObject = startUnityObject;

            while (currentUnityObject != null)
            {
                // Unity object could be stripped, it means, that corresponding real object belongs to another yaml file
                // Also, it has reference to prefab instance in current file, which stores all prefab modification
                if (IsStripped(currentUnityObject))
                {
                    var file             = (IYamlFile)currentUnityObject.GetContainingFile();
                    var correspondingId  = currentUnityObject.GetUnityObjectPropertyValue(GetCorrespondingSourceObjectProperty())?.AsFileID();
                    var prefabInstanceId = currentUnityObject.GetUnityObjectPropertyValue(GetPrefabInstanceProperty())?.AsFileID();

                    // assert not null
                    if (correspondingId == null || prefabInstanceId == null)
                    {
                        return;
                    }

                    var prefabInstance   = file.FindDocumentByAnchor(prefabInstanceId.fileID);
                    var prefabSourceFile = myMetaFileGuidCache.GetAssetFilePathsFromGuid(correspondingId.guid);
                    if (prefabSourceFile.Count > 1 || prefabSourceFile.Count == 0)
                    {
                        return;
                    }

                    myFactory.PsiModule.NotNull("externalFilesModuleFactory.PsiModule != null")
                    .TryGetFileByPath(prefabSourceFile.First(), out var sourceFile);

                    if (sourceFile == null)
                    {
                        return;
                    }

                    // [TODO] Is prefab file committed???
                    var prefabFile = (IYamlFile)sourceFile.GetDominantPsiFile <YamlLanguage>();

                    var prefabStartGameObject = prefabFile.FindDocumentByAnchor(correspondingId.fileID);
                    if (!IsStripped(prefabStartGameObject))
                    {
                        // !u!4 is transform. If tag is different, let's extract transform, there are two cases:
                        // 1) prefabStartGameObject is GameObject(!u!1), take its transform
                        // 2) prefabStartGameObject is Component, so get attached gameobject and from this gameobject take transform component
                        if (!GetUnityObjectTag(prefabStartGameObject).Equals("!u!4"))
                        {
                            var attachedGameObject = prefabStartGameObject;
                            if (!GetUnityObjectTag(prefabStartGameObject).Equals("!u!1"))
                            {
                                attachedGameObject =
                                    attachedGameObject.GetUnityObjectDocumentFromFileIDProperty(UnityYamlConstants
                                                                                                .GameObjectProperty);
                            }
                            prefabStartGameObject = UnityObjectPsiUtil.FindTransformComponentForGameObject(attachedGameObject);
                        }
                    }
                    var localModifications = UnityObjectPsiUtil.GetPrefabModification(prefabInstance);
                    ProcessSceneHierarchyFromComponentToRootInner(prefabStartGameObject, consumer, localModifications);
                    currentUnityObject = UnityObjectPsiUtil.GetTransformFromPrefabInstance(prefabInstance);
                }
                else
                {
                    // assert that startGameObject is GameObject
                    var father     = currentUnityObject.GetUnityObjectDocumentFromFileIDProperty(UnityYamlConstants.FatherProperty);
                    var gameObject = currentUnityObject.GetUnityObjectDocumentFromFileIDProperty(UnityYamlConstants.GameObjectProperty);
                    consumer.ConsumeGameObject(gameObject, modifications);
                    currentUnityObject = father;
                }
            }
        }
 public static INode GetValue(this IBlockMappingNode document, string key)
 {
     return(document?.Entries.FirstOrDefault(t => t.Key.MatchesPlainScalarText(key))?.Content?.Value);
 }
 public static INode GetSceneCollection([CanBeNull] IBlockMappingNode blockMappingNode)
 {
     return(GetCollection(blockMappingNode, "EditorBuildSettings", "m_Scenes"));
 }
Ejemplo n.º 13
0
 private static LocalList <long> ExtractChildStateMachinesAnchors([NotNull] IBlockMappingNode root)
 {
     return(ExtractChildAnchors(root, "m_ChildStateMachines", "m_StateMachine"));
 }