private void ReadMonoBehaviours(PrefabMetadata metadata, string content)
        {
            var documents = content.Split(new string[] { "--- !u!114" }, StringSplitOptions.RemoveEmptyEntries);

            for (int i = 1; i < documents.Length; i++)
            {
                var document      = documents[i];
                var monoBehaviour = new MonoBehaviourMetadata();
                var script        = new ScriptMetadata
                {
                    FileId = ReadFileId(document, ScriptFileIdRegex),
                    Guid   = ReadString(document, ScriptGuidRegex, "guid")
                };
                script.FullName = m_scriptMetadataService.GetFullNameByFileId(script.FileId);

                if (String.IsNullOrEmpty(script.FullName))
                {
                    script.FullName = MetaFileService.GetFileNameByGuid(script.Guid);
                }

                monoBehaviour.Script = script;

                metadata.MonoBehaviours.Add(monoBehaviour);
            }
        }
Ejemplo n.º 2
0
        public void GetMissingMaterials_MissingMaterials_Materials()
        {
            var target = new PrefabMetadata
            {
                Path = "Test.prefab"
            };

            target.Materials.Add(new MaterialMetadata {
                FullName = "Test.Material1"
            });
            target.Materials.Add(new MaterialMetadata {
                FullName = "Test.Material2"
            });

            var assetRepository = MockRepository.GenerateMock <IAssetRepository>();

            var gameObject = MockRepository.GenerateMock <IGameObject>();
            var material1  = MockRepository.GenerateMock <IMaterial>();

            material1.Expect(m => m.Name).Return("Material1");

            gameObject.Expect(g => g.GetMaterials()).Return(new IMaterial[] { material1 });
            assetRepository.Expect(a => a.GetGameObject("Test.prefab")).Return(gameObject);

            var actual = target.GetMissingMaterials(assetRepository);

            Assert.AreEqual(1, actual.Count());
            Assert.AreEqual("Test.Material2", actual.First().FullName);

            assetRepository.VerifyAllExpectations();
            gameObject.VerifyAllExpectations();
        }
        public void FixMissingMonobehaviours_Prefab_PrefabMetadataUpdated()
        {
            var prefab = new PrefabMetadata();

            prefab.Path = "Prefab1.prefab";

            var missingMonoBehaviours = new MonoBehaviourMetadata[]
            {
                new MonoBehaviourMetadata {
                    Script = new ScriptMetadata {
                        FileId = 1, FullName = "System.String"
                    }
                },
                new MonoBehaviourMetadata {
                    Script = new ScriptMetadata {
                        FileId = 3, FullName = "System.DateTime"
                    }
                },
            };

            m_prefabMetadataWriter.Expect(w => w.ReplaceGuid(missingMonoBehaviours.First().Script, "1.2", "Prefab1.prefab"));
            m_prefabMetadataWriter.Expect(w => w.ReplaceGuid(missingMonoBehaviours.Last().Script, "3.2", "Prefab1.prefab"));

            m_typeService.Expect(t => t.GetTypeByName("System.String")).Return(typeof(string));
            m_typeService.Expect(t => t.GetTypeByName("System.DateTime")).Return(typeof(DateTime));
            m_typeService.Expect(t => t.GetGuid(typeof(string))).Return("1.2");
            m_typeService.Expect(t => t.GetGuid(typeof(DateTime))).Return("3.2");

            m_target.FixMissingMonobehaviours(prefab, missingMonoBehaviours);

            m_prefabMetadataWriter.VerifyAllExpectations();
        }
        /// <summary>
        /// Reads the prefab metadata form the specified file.
        /// </summary>
        /// <param name="fileName">The file name.</param>
        public PrefabMetadata Read(string fileName)
        {
            var metadata = new PrefabMetadata();
            var content  = m_fileSystem.ReadAllText(fileName);

            ReadMonoBehaviours(metadata, content);
            ReadMaterials(metadata, content);

            return(metadata);
        }
 ProxyListViewData(string template, Proxy proxy, int index, int depth, PrefabMetadata prefabMetadata,
                   string transformPath, List <ProxyListViewData> children = null)
 {
     m_Template       = template;
     m_Proxy          = proxy;
     m_Index          = index;
     m_Depth          = depth;
     m_Children       = children;
     m_PrefabMetadata = prefabMetadata;
     m_TransformPath  = transformPath;
     m_ComponentIndex = -1;
 }
 protected ProxyListViewData(string template, object container, int index, int depth, PrefabMetadata prefabMetadata,
                             string transformPath, int componentIndex, List <ProxyListViewData> children = null)
 {
     m_Template       = template;
     Container        = container;
     m_Index          = index;
     m_Depth          = depth;
     m_Children       = children;
     m_PrefabMetadata = prefabMetadata;
     m_TransformPath  = transformPath;
     m_ComponentIndex = componentIndex;
 }
Ejemplo n.º 7
0
        public void GetScriptByFileId_ScriptWithFileId_Script()
        {
            var target = new PrefabMetadata();

            target.MonoBehaviours.Add(new MonoBehaviourMetadata {
                Script = new ScriptMetadata {
                    FileId = 1
                }
            });
            var actual = target.GetScriptByFileId(1);

            Assert.AreEqual(1, actual.FileId);
        }
Ejemplo n.º 8
0
        public void GetScriptByFileId_NoScriptWithFileId_Null()
        {
            var target = new PrefabMetadata();

            target.MonoBehaviours.Add(new MonoBehaviourMetadata {
                Script = new ScriptMetadata {
                    FileId = 1
                }
            });
            var actual = target.GetScriptByFileId(2);

            Assert.IsNull(actual);
        }
Ejemplo n.º 9
0
        public void GetMissingMaterials_refabNotFindOnAssetRepository_Exception()
        {
            var target = new PrefabMetadata
            {
                Path = "Test.prefab"
            };
            var assetRepository = MockRepository.GenerateMock <IAssetRepository>();

            Assert.Catch <InvalidOperationException>(delegate
            {
                target.GetMissingMaterials(assetRepository);
            });
        }
Ejemplo n.º 10
0
        public void GetMissingMonoBehaviours_PrefabNotFindOnAssetRepository_Exception()
        {
            var target = new PrefabMetadata
            {
                Path = "Test.prefab"
            };
            var typeService     = MockRepository.GenerateMock <ITypeService>();
            var assetRepository = MockRepository.GenerateMock <IAssetRepository>();

            Assert.Catch <InvalidOperationException>(delegate
            {
                target.GetMissingMonoBehaviours(assetRepository, typeService);
            });
        }
        public PrefabMetadataContainer(PrefabMetadata prefabMetadata, SerializationMetadata metadata)
        {
            m_Guid            = prefabMetadata.Guid;
            AddedGameObjects  = prefabMetadata.AddedGameObjects;
            AddedComponents   = prefabMetadata.AddedComponents;
            RemovedComponents = prefabMetadata.RemovedComponents;
            PropertyOverrides = prefabMetadata.PropertyOverrides;

            // Convert any UnityObject properties back to UnityObjectReference for serialization
            if (PropertyOverrides == null)
            {
                return;
            }

            PostProcessOverrideList(PropertyOverrides, metadata);
        }
        void HandlePropertyOverrides(List <RuntimePrefabPropertyOverride> overrides, SerializationMetadata metadata)
        {
            var root = m_GameObject.transform;

            foreach (var propertyOverride in overrides)
            {
                if (propertyOverride == null)
                {
                    Debug.LogError("Encountered null property override");
                    continue;
                }

                propertyOverride.ApplyOverride(root, metadata);
            }

            // Convert UnityObjectReference properties to UnityObjects because SceneId's might change
            PrefabMetadata.PostProcessOverrideList(overrides, metadata);
        }
        private static void ReadMaterials(PrefabMetadata metadata, string content)
        {
            var documents = content.Split(new string[] { "type: 2}" }, StringSplitOptions.RemoveEmptyEntries);

            for (int i = 0; i < documents.Length - 1; i++)
            {
                var document = documents[i];
                document = FixMaterialRegex.Replace(document, ", type: 2}");
                var material = new MaterialMetadata
                {
                    FileId = ReadFileId(document, MaterialFileIdRegex),
                    Guid   = ReadString(document, MaterialGuidRegex, "guid")
                };
                material.FullName = Path.GetFileNameWithoutExtension(MetaFileService.GetFileNameByGuid(material.Guid));

                metadata.Materials.Add(material);
            }
        }
Ejemplo n.º 14
0
        public void GetMissingMonoBehaviours_MissingMonoBehaviours_MonoBehaviours()
        {
            var target = new PrefabMetadata
            {
                Path = "Test.prefab"
            };

            target.MonoBehaviours.Add(new MonoBehaviourMetadata {
                Script = new ScriptMetadata {
                    FileId = 1, FullName = "System.String"
                }
            });
            target.MonoBehaviours.Add(new MonoBehaviourMetadata {
                Script = new ScriptMetadata {
                    FileId = 2, FullName = "System.Int32"
                }
            });

            var typeService = MockRepository.GenerateMock <ITypeService>();

            typeService.Expect(t => t.GetTypeByName("System.String")).Return(typeof(string));
            typeService.Expect(t => t.GetTypeByName("System.Int32")).Return(typeof(int));

            var assetRepository = MockRepository.GenerateMock <IAssetRepository>();

            var gameObject = MockRepository.GenerateMock <IGameObject>();

            gameObject.Expect(g => g.HasComponent(typeof(string))).Return(true);
            gameObject.Expect(g => g.HasComponent(typeof(int))).Return(false);
            assetRepository.Expect(a => a.GetGameObject("Test.prefab")).Return(gameObject);

            var actual = target.GetMissingMonoBehaviours(assetRepository, typeService);

            Assert.AreEqual(1, actual.Count());
            Assert.AreEqual("System.Int32", actual.First().Script.FullName);

            typeService.VerifyAllExpectations();
            assetRepository.VerifyAllExpectations();
            gameObject.VerifyAllExpectations();
        }
        static void CreateProxyListViewData(Component component, int componentIndex, PrefabMetadata prefabMetadata,
                                            string transformPath, List <ProxyListViewData> listViewData, ref int autoIncrement, int depth = 0)
        {
#if !NET_DOTS && !ENABLE_IL2CPP
            SceneSerialization.RegisterPropertyBagRecursively(component.GetType());
#endif

            var componentProperty = new ProxyListViewData(k_ComponentTemplate, component,
                                                          autoIncrement++, depth, prefabMetadata, transformPath, componentIndex);

            listViewData.Add(componentProperty);

            var optionalPropertyPathVisitor = new OptionalConstraintPropertyPathGetterVisitor();
            PropertyContainer.Visit(component, optionalPropertyPathVisitor);

            var optionalPropertyVisitor = new OptionalConstraintPropertyGetterVisitor
            {
                OptionalConstraintProperties = optionalPropertyPathVisitor.OptionalConstraintProperties
            };

            PropertyContainer.Visit(component, optionalPropertyVisitor);

            var visitor = new PropertyGetterVisitor
            {
                ParentData     = componentProperty,
                PrefabMetadata = prefabMetadata,
                TransformPath  = transformPath,
                ComponentIndex = componentIndex,
                AutoIncrement  = autoIncrement,
                OptionalConstraintProperties     = optionalPropertyPathVisitor.OptionalConstraintProperties,
                OptionalConstraintBoolProperties = optionalPropertyVisitor.OptionalConstraintBoolProperties
            };

            PropertyContainer.Visit(component, visitor);
            autoIncrement = visitor.AutoIncrement;
        }
        static ProxyListViewPropertyData <TContainer> PropertyToPropertyData <TContainer>(IProperty <TContainer> property,
                                                                                          ref TContainer container, int index, string propertyPath, PrefabMetadata prefabMetadata, string transformPath,
                                                                                          int depth = 0, int componentIndex = -1, IProperty optionalConstraint = null)
        {
            string template;
            var    propertyType = property.DeclaredValueType();

            if (propertyType == typeof(Vector2) || propertyType == typeof(Vector3) || propertyType == typeof(Vector4) || propertyType == typeof(Quaternion))
            {
                template = k_ProxyListVectorItemTemplate;
            }
            else if (propertyType == typeof(string) || propertyType == typeof(char))
            {
                template = k_ProxyListStringItemTemplate;
            }
            else if (propertyType == typeof(Bounds))
            {
                template = k_ProxyListUnimplementedItemTemplate;
            }
            else if (propertyType == typeof(Color) || propertyType == typeof(Color32))
            {
                template = k_ProxyListColorItemTemplate;
            }
            else if (propertyType == typeof(Rect))
            {
                template = k_ProxyListUnimplementedItemTemplate;
            }
            else if (propertyType == typeof(bool))
            {
                template = k_ProxyListBoolItem;
            }
            else if (propertyType.IsEnum || propertyType == typeof(LayerMask))
            {
                template = k_ProxyListDropdownItemTemplate;
            }
            else if (propertyType.IsPrimitive)
            {
                template = k_ProxyListNumberItem;
            }
            else if (property is IUnityObjectReferenceValueProperty <TContainer> )
            {
                template = k_ProxyListObjectFieldItemTemplate;
            }
            else
            {
                template = k_ProxyListGenericItemTemplate;
            }

            var propertyData = new ProxyListViewPropertyData <TContainer>(template, container, index, depth, null, property, propertyPath,
                                                                          prefabMetadata, transformPath, componentIndex);

            if (optionalConstraint != null)
            {
                propertyData.SetOptionalConstraintProperty(optionalConstraint);
            }

            return(propertyData);
        }
Ejemplo n.º 17
0
 public ProxyListViewPropertyData(string template, TContainer container, int index, int depth, List <ProxyListViewData> children,
                                  IProperty <TContainer> property, string propertyPath, PrefabMetadata prefabMetadata, string transformPath, int componentIndex)
     : base(template, container, index, depth, prefabMetadata, transformPath, componentIndex, children)
 {
     m_PropertyPath   = propertyPath;
     m_Property       = property;
     m_DisplayName    = ReflectionUtils.NicifyVariableName(property.Name);
     m_TypedContainer = container;
 }