Ejemplo n.º 1
0
        public override void DoGUI(int depth)
        {
            BaseTimeline.ShouldRenderGizmos = IsExpanded && USPreferenceWindow.RenderHierarchyGizmos;

            using (new Shared.GUIBeginHorizontal())
            {
                using (new Shared.GUIBeginVertical(GUILayout.MaxWidth(FloatingWidth)))
                {
                    FloatingOnGUI(depth);

                    if (IsExpanded)
                    {
                        var propertyArea = FloatingBackgroundRect;
                        propertyArea.y     += ItemHeightStep;
                        propertyArea.x      = GetXOffsetForDepth(depth + 1);
                        propertyArea.width -= propertyArea.x;

                        using (new Shared.GUIBeginArea(propertyArea))
                        {
                            foreach (var propertyBox in propertyBoxes)
                            {
                                using (new Shared.GUIBeginHorizontal())
                                {
                                    propertyBox.OnGUI();

                                    using (new Shared.GUIChangeColor(Color.red))
                                    {
                                        if (GUILayout.Button("-", GUILayout.Width(20.0f)))
                                        {
                                            removingProperty = propertyBox;
                                        }
                                    }

                                    // This can happen during undo redo.
                                    if (propertyBox.PropertyFieldInfo == null)
                                    {
                                        continue;
                                    }

                                    var preFix       = propertyBox.PropertyFieldInfo.Name;
                                    var propertyInfo = PropertyTimeline.GetProperty(preFix, propertyBox.PropertyFieldInfo.Component);
                                    using (new Shared.GUIChangeColor(propertyInfo.UseCurrentValue ? Color.red : GUI.color))
                                    {
                                        if (GUILayout.Button("C"))
                                        {
                                            propertyInfo.UseCurrentValue = !propertyInfo.UseCurrentValue;
                                        }
                                    }
                                }
                            }

                            if (GUILayout.Button("Animate"))
                            {
                                if (Event.current.type == EventType.Repaint)
                                {
                                    animateButton = GUILayoutUtility.GetLastRect();
                                }

                                var components = PropertyTimeline.AffectedObject.GetComponents <Component>().ToList();

                                var allPropertyBoxes = new List <PropertyBox>();
                                foreach (var component in components)
                                {
                                    var properties = component.GetType().GetProperties().Where(property => !PropertyFieldInfoUtility.ShouldIgnoreProperty(property, component));
                                    var fields     = component.GetType().GetFields().Where(field => !PropertyFieldInfoUtility.shouldIgnoreField(field, component));

                                    foreach (var property in properties)
                                    {
                                        allPropertyBoxes.Add(new PropertyBox(new PropertyFieldInfo(component, property), true));
                                    }

                                    foreach (var field in fields)
                                    {
                                        allPropertyBoxes.Add(new PropertyBox(new PropertyFieldInfo(component, field), true));
                                    }
                                }

                                foreach (var propertyBox in propertyBoxes)
                                {
                                    var overlappingProperties = allPropertyBoxes.Where(innerPropertyBox => innerPropertyBox.Component == propertyBox.Component && innerPropertyBox.PropertyName == propertyBox.PropertyName);
                                    foreach (var overlappingProperty in overlappingProperties)
                                    {
                                        overlappingProperty.AddingProperty = true;
                                    }
                                }

                                USWindow.ShowPopupForProperties(animateButton, allPropertyBoxes, CommitModifications);
                            }
                        }
                    }
                }

                if (Event.current.type == EventType.Repaint)
                {
                    var newMaxHeight = GUILayoutUtility.GetLastRect().height;

                    if (MaxHeight != newMaxHeight)
                    {
                        EditorWindow.Repaint();
                        MaxHeight = newMaxHeight;
                    }
                }

                ContentOnGUI();
            }

            if (removingProperty != null)
            {
                RemoveProperty(removingProperty);
            }

            removingProperty = null;

            if (Event.current.commandName == "UndoRedoPerformed")
            {
                return;
            }

            if (CurveEditor.AreCurvesDirty)
            {
                PropertyTimeline.Process(PropertyTimeline.Sequence.RunningTime, PropertyTimeline.Sequence.PlaybackRate);
                CurveEditor.AreCurvesDirty = false;
            }
        }
Ejemplo n.º 2
0
        public override void Initialize(USTimelineBase timeline)
        {
            var properties = Component.GetType().GetProperties().Where(property => !PropertyFieldInfoUtility.ShouldIgnoreProperty(property, Component));
            var fields     = Component.GetType().GetFields().Where(field => !PropertyFieldInfoUtility.shouldIgnoreField(field, Component));

            var totalCount = properties.Count() + fields.Count();

            // Removal
            if (totalCount < Children.Count)
            {
                var propertiesNotInBoth = Children.Where((hierarchyItem) => ((hierarchyItem as USPropertyHierarchyItem).PropertyFieldInfo != null && !properties.Contains((hierarchyItem as USPropertyHierarchyItem).PropertyFieldInfo.Property)));
                var fieldsNotInBoth     = Children.Where((hierarchyItem) => ((hierarchyItem as USPropertyHierarchyItem).PropertyFieldInfo != null && !fields.Contains((hierarchyItem as USPropertyHierarchyItem).PropertyFieldInfo.Field)));

                foreach (var missingProperty in propertiesNotInBoth)
                {
                    RemoveChild(missingProperty as IUSHierarchyItem);
                }
                foreach (var missingField in fieldsNotInBoth)
                {
                    RemoveChild(missingField as IUSHierarchyItem);
                }
            }

            /*
             *              // Addition
             *              if(totalCount > Children.Count)
             *              {
             *                      var extraProperties = properties.Where((property) => !Children.Any((item) => ((item is USPropertyHierarchyItem) && (item as USPropertyHierarchyItem).PropertyFieldInfo && (item as USPropertyHierarchyItem).PropertyFieldInfo.Property == property)));
             *                      var extraFields = fields.Where((field) => !Children.Any((item) => ((item is USPropertyHierarchyItem) && (item as USPropertyHierarchyItem).PropertyFieldInfo && (item as USPropertyHierarchyItem).PropertyFieldInfo.Field == field)));
             *
             *                      foreach(var extraProperty in extraProperties)
             *                      {
             *                              PropertyFieldInfo propertyFieldInfo = ScriptableObject.CreateInstance(typeof(PropertyFieldInfo)) as PropertyFieldInfo;
             *                              propertyFieldInfo.Component = Component;
             *                              propertyFieldInfo.Property = extraProperty;
             *
             *                              var mappedType = USPropertyMemberUtility.GetUnityPropertyNameFromUSProperty(propertyFieldInfo.Property.Name, Component);
             *                              if(mappedType == string.Empty)
             *                                      continue;
             *
             *                              USPropertyHierarchyItem hierarchyItem = ScriptableObject.CreateInstance(typeof(USPropertyHierarchyItem)) as USPropertyHierarchyItem;
             *                              hierarchyItem.PropertyFieldInfo = propertyFieldInfo;
             *                              hierarchyItem.PropertyTimeline = PropertyTimeline;
             *                              hierarchyItem.MappedType = mappedType;
             *                              hierarchyItem.Initialize(PropertyTimeline);
             *
             *                              AddChild(hierarchyItem as IUSHierarchyItem);
             *                      }
             *                      foreach(var extraField in extraFields)
             *                      {
             *                              PropertyFieldInfo propertyFieldInfo = ScriptableObject.CreateInstance(typeof(PropertyFieldInfo)) as PropertyFieldInfo;
             *                              propertyFieldInfo.Component = Component;
             *                              propertyFieldInfo.Field = extraField;
             *
             *                              var mappedType = USPropertyMemberUtility.GetUnityPropertyNameFromUSProperty(propertyFieldInfo.Field.Name, Component);
             *                              if(mappedType == string.Empty)
             *                                      continue;
             *
             *                              USPropertyHierarchyItem hierarchyItem = ScriptableObject.CreateInstance(typeof(USPropertyHierarchyItem)) as USPropertyHierarchyItem;
             *                              hierarchyItem.PropertyFieldInfo = propertyFieldInfo;
             *                              hierarchyItem.PropertyTimeline = PropertyTimeline;
             *                              hierarchyItem.MappedType = mappedType;
             *                              hierarchyItem.Initialize(PropertyTimeline);
             *
             *                              AddChild(hierarchyItem as IUSHierarchyItem);
             *                      }
             *              }
             */
        }