Example #1
0
        public static float GetHeight(ValueDefinition definition, VariableInitializerType initializerType, TagList tags, bool isExpanded)
        {
            var height = EditorGUIUtility.singleLineHeight;

            if (HasConstraint(definition.Type, definition.Constraint, definition.IsConstraintLocked))
            {
                height += GetConstraintHeight(definition.Type, definition.Constraint);
            }

            if (HasInitializer(definition.Type, initializerType))
            {
                if (initializerType == VariableInitializerType.Expression && definition.Initializer != null)
                {
                    height += ExpressionControl.GetFoldoutHeight(definition.Initializer, isExpanded, true, 2, 3) + RectHelper.VerticalSpace;
                }
                else
                {
                    height += RectHelper.LineHeight;
                }
            }

            if (HasTags(tags))
            {
                height += RectHelper.LineHeight;
            }

            return(height);
        }
Example #2
0
        private static bool HasInitializer(VariableType type, VariableInitializerType initializer)
        {
            if (initializer == VariableInitializerType.None)
            {
                return(false);
            }

            switch (type)
            {
            case VariableType.Bool:
            case VariableType.Float:
            case VariableType.Int:
            case VariableType.Int2:
            case VariableType.Int3:
            case VariableType.IntRect:
            case VariableType.IntBounds:
            case VariableType.Vector2:
            case VariableType.Vector3:
            case VariableType.Vector4:
            case VariableType.Quaternion:
            case VariableType.Rect:
            case VariableType.Bounds:
            case VariableType.Color:
            case VariableType.String: return(true);

            default: return(false);
            }
        }
Example #3
0
        public override void Setup(VariableSchema target, SerializedProperty property, FieldInfo fieldInfo, PropertyAttribute attribute)
        {
            _owner  = property.serializedObject.targetObject;
            _schema = target;
            _proxy  = new DefinitionsProxy {
                Schema = target
            };

            List.Setup(_proxy)
            .MakeDrawable(DrawDefinition)
            .MakeRemovable(_removeDefinitionButton, RemoveDefinition)
            .MakeCollapsable(property.serializedObject.targetObject.GetType().Name + "." + property.propertyPath + ".IsOpen")
            .MakeReorderable()
            .MakeHeaderButton(_addDefinitionButton, new AddPopup(new AddVariableContent(this), _addDefinitionLabel), Color.white)
            .MakeCustomHeight(GetDefinitionHeight)
            .MakeEmptyLabel(_emptyLabel);

            _type           = TypeHelper.GetAttribute <VariableInitializerAttribute>(fieldInfo)?.Type ?? VariableInitializerType.Expression;
            _availabilities = TypeHelper.GetAttribute <VariableAvailabilitiesAttribute>(fieldInfo)?.Availabilities;
        }
Example #4
0
 public VariableInitializerAttribute(VariableInitializerType type) => Type = type;
Example #5
0
        public static ValueDefinition Draw(Rect position, GUIContent label, ValueDefinition definition, VariableInitializerType initializer, TagList tags, bool showConstraintLabel, ref bool isExpanded)
        {
            var tag        = definition.Tag;
            var constraint = definition.Constraint;

            var hasInitializer = HasInitializer(definition.Type, initializer);
            var hasConstraint  = HasConstraint(definition.Type, definition.Constraint, definition.IsConstraintLocked);
            var hasTag         = HasTags(tags);

            var typeRect = RectHelper.TakeLine(ref position);

            if (label != GUIContent.none)
            {
                var labelRect = RectHelper.TakeWidth(ref typeRect, RectHelper.CurrentLabelWidth);
                EditorGUI.LabelField(labelRect, label);
            }

            var type = DrawType(typeRect, definition.IsTypeLocked, definition.Type);

            if (hasConstraint)
            {
                var constraintHeight = GetConstraintHeight(definition.Type, definition.Constraint);
                var constraintRect   = RectHelper.TakeHeight(ref position, constraintHeight);

                DrawConstraint(constraintRect, type, definition.IsConstraintLocked, ref constraint, showConstraintLabel);
            }

            if (hasInitializer && definition.Initializer != null)
            {
                if (initializer == VariableInitializerType.Expression)
                {
                    var initializerHeight = ExpressionControl.GetFoldoutHeight(definition.Initializer, isExpanded, true, 2, 3);
                    var initializerRect   = RectHelper.TakeHeight(ref position, initializerHeight);
                    RectHelper.TakeVerticalSpace(ref position);
                    DrawInitializer(initializerRect, ref definition, ref isExpanded);
                }
                else if (initializer == VariableInitializerType.DefaultValue)
                {
                    var initializerRect = RectHelper.TakeLine(ref position);
                    DrawDefaultValue(initializerRect, ref definition);
                }
            }

            if (hasTag)
            {
                var tagRect = RectHelper.TakeLine(ref position);
                tag = DrawTag(tagRect, tag, tags);
            }

            return(ValueDefinition.Create(type, constraint, tag, definition.Initializer, definition.IsTypeLocked, definition.IsConstraintLocked));
        }
Example #6
0
        public static ValueDefinition Draw(GUIContent label, ValueDefinition definition, VariableInitializerType initializer, TagList tags, bool showConstraintLabel, ref bool isExpanded)
        {
            var rect = EditorGUILayout.GetControlRect(false, GetHeight(definition, initializer, tags, false));

            return(Draw(rect, label, definition, initializer, tags, showConstraintLabel, ref isExpanded));
        }