/// <summary>
        /// Initializes all assigned drawers using provided settings reference.
        /// </summary>
        /// <param name="settings"></param>
        internal static void InitializeDrawers(IToolboxDrawersSettings settings)
        {
            ToolboxDrawerUtility.settings = settings;

            CreateAttributeDrawers(settings);
            CreateTargetTypeDrawers(settings);
        }
Esempio n. 2
0
        /// <summary>
        /// Initializes all assigned drawers using provided settings reference.
        /// </summary>
        /// <param name="settings"></param>
        internal static void PerformData(IToolboxDrawersSettings settings)
        {
            ToolboxDrawerUtility.settings = settings;

            CreateAttributeDrawers(settings);
            CreateTargetTypeDrawers(settings);

            ToolboxDrawersAllowed = settings.UseToolboxDrawers;
        }
Esempio n. 3
0
        /// <summary>
        /// Creates all possible type-based drawers and add them ro proper collection.
        /// </summary>
        /// <param name="settings"></param>
        private static void CreateTargetTypeDrawers(IToolboxDrawersSettings settings)
        {
            targetTypeDrawers.Clear();
            for (var i = 0; i < settings.TargetTypeDrawersCount; i++)
            {
                var drawerType = settings.GetTargetTypeDrawerTypeAt(i);
                if (drawerType == null)
                {
                    continue;
                }
                var drawerInstance = Activator.CreateInstance(drawerType) as ToolboxTargetTypeDrawer;
                var targetTypes    = drawerInstance.GetTargetType().GetAllChildClasses();

                foreach (var type in targetTypes)
                {
                    targetTypeDrawers[type] = drawerInstance;
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Creates all possible attribute-based drawers and add them to proper collections.
        /// </summary>
        /// <param name="settings"></param>
        private static void CreateAttributeDrawers(IToolboxDrawersSettings settings)
        {
            void AddAttributeDrawer <T>(Type drawerType, Type targetAttributeType, Dictionary <Type, T> drawersCollection) where T : ToolboxAttributeDrawer
            {
                if (drawerType == null)
                {
                    return;
                }
                var drawerInstance = Activator.CreateInstance(drawerType) as T;

                if (drawersCollection.ContainsKey(targetAttributeType))
                {
                    Debug.LogWarning(targetAttributeType + " is already associated to more than one ToolboxDrawer.");
                    return;
                }

                drawersCollection.Add(targetAttributeType, drawerInstance);
            }

            Type GetAttributeTargetType(Type drawerType, Type drawerBaseType)
            {
                if (drawerType == null)
                {
                    Debug.LogWarning("One of assigned drawer types in " + nameof(ToolboxEditorSettings) + " is empty.");
                    return(null);
                }

                while (!drawerType.IsGenericType || drawerType.GetGenericTypeDefinition() != drawerBaseType)
                {
                    if (drawerType.BaseType == null)
                    {
                        return(null);
                    }

                    drawerType = drawerType.BaseType;
                }

                return(drawerType.IsGenericType ? drawerType.GetGenericArguments().FirstOrDefault() : null);
            }

            decoratorDrawers.Clear();
            for (var i = 0; i < settings.DecoratorDrawersCount; i++)
            {
                var drawerType = settings.GetDecoratorDrawerTypeAt(i);
                var targetType = GetAttributeTargetType(settings.GetDecoratorDrawerTypeAt(i), decoratorDrawerBase);
                AddAttributeDrawer(drawerType, targetType, decoratorDrawers);
            }

            propertyDrawers.Clear();
            for (var i = 0; i < settings.PropertyDrawersCount; i++)
            {
                var drawerType = settings.GetPropertyDrawerTypeAt(i);
                var targetType = GetAttributeTargetType(settings.GetPropertyDrawerTypeAt(i), propertyDrawerBase);
                AddAttributeDrawer(drawerType, targetType, propertyDrawers);
            }

            collectionDrawers.Clear();
            for (var i = 0; i < settings.CollectionDrawersCount; i++)
            {
                var drawerType = settings.GetCollectionDrawerTypeAt(i);
                var targetType = GetAttributeTargetType(settings.GetCollectionDrawerTypeAt(i), collectionDrawerBase);
                AddAttributeDrawer(drawerType, targetType, collectionDrawers);
            }

            conditionDrawers.Clear();
            for (var i = 0; i < settings.ConditionDrawersCount; i++)
            {
                var drawerType = settings.GetConditionDrawerTypeAt(i);
                var targetType = GetAttributeTargetType(settings.GetConditionDrawerTypeAt(i), conditionDrawerBase);
                AddAttributeDrawer(drawerType, targetType, conditionDrawers);
            }
        }