Beispiel #1
0
        static public RoutineType GetRoutineTypeFromNode(NodeMethodAttribute node)
        {
            switch (node.type)
            {
            case NodeMethodType.Event:
                return(RoutineType.Event);

            case NodeMethodType.Condition:
                return(RoutineType.Condition);

            case NodeMethodType.Action:
                return(RoutineType.Action);

            case NodeMethodType.Other:
                throw new Exception("Other is not a suitable type for a Routine");

            default:
                if (((NodeMethodType.Event) & node.type) == NodeMethodType.Event)
                {
                    return(RoutineType.Event);
                }
                else if (((NodeMethodType.Condition) & node.type) == NodeMethodType.Condition)
                {
                    return(RoutineType.Condition);
                }
                else if (((NodeMethodType.Action) & node.type) == NodeMethodType.Action)
                {
                    return(RoutineType.Action);
                }
                else
                {
                    throw new Exception("Node type is not a suitable type for a Routine");
                }
            }
        }
 protected ButtonAnswer[] GetNodeButtons(NodeMethodAttribute node)
 {
     if (node.type == NodeMethodType.Other)
     {
         if (m_selectedRoutine == null)
         {
             return(new ButtonAnswer[] { });
         }
         else
         {
             return(new ButtonAnswer[] { ButtonAnswer.Insert });
         }
     }
     else
     {
         if (m_selectedRoutine == null)
         {
             return(new ButtonAnswer[] { ButtonAnswer.Add });
         }
         else
         {
             return(new ButtonAnswer[] { ButtonAnswer.Add, ButtonAnswer.Insert });
         }
     }
 }
Beispiel #3
0
        static public MethodInfo[] GetNodeMethods(out NodeMethodAttribute[] nodeMethodsAttribute, NodeMethodType filter)
        {
            List <MethodInfo>          resultMethodsInfo = new List <MethodInfo>();
            List <NodeMethodAttribute> resultAttributes  = new List <NodeMethodAttribute>();

            Type[] types = Assembly.GetExecutingAssembly().GetTypes();

            foreach (Type type in types)
            {
                MethodInfo[] allMethodsOfType = type.GetMethods();
                foreach (MethodInfo methodInfo in allMethodsOfType)
                {
                    if (methodInfo.DeclaringType != methodInfo.ReflectedType)
                    {
                        continue;
                    }

                    object[] methodAttributes = methodInfo.GetCustomAttributes(typeof(NodeMethodAttribute), true);
                    if (methodAttributes.Length > 0)
                    {
                        NodeMethodAttribute nodeMethodAttribute = (NodeMethodAttribute)methodAttributes[0];
                        if ((nodeMethodAttribute.m_type & filter) != nodeMethodAttribute.m_type)
                        {
                            continue;
                        }

                        resultMethodsInfo.Add(methodInfo);
                        resultAttributes.Add(nodeMethodAttribute);
                    }
                }
            }

            nodeMethodsAttribute = resultAttributes.ToArray();
            return(resultMethodsInfo.ToArray());
        }
Beispiel #4
0
        protected void RetrieveNodeMethodAttribute()
        {
            if (methodInfo == null)
            {
                return;
            }
            object[] attributes = methodInfo.GetCustomAttributes(typeof(NodeMethodAttribute), true);
            if ((attributes == null) || (attributes.Length == 0))
            {
                return;
            }

            m_nodeMethodAttribute = attributes[0] as NodeMethodAttribute;
        }
        static private NodeSetData RetrieveNodeMethods(NodeMethodType filter)
        {
            NodeMethodAttribute[] nodeMethodsAttribute;
            MethodInfo[]          nodeMethodsInfo = NodeMethodAttribute.GetNodeMethods(out nodeMethodsAttribute, filter);

            List <string> categories = GetNodeCategories(nodeMethodsAttribute);

            categories.Sort();

            List <NodeMethodAttribute>[] attributesByCategory = new List <NodeMethodAttribute> [categories.Count];
            List <MethodInfo>[]          methodsByCategory    = new List <MethodInfo> [categories.Count];
            for (int i = 0; i < categories.Count; i++)
            {
                attributesByCategory[i] = new List <NodeMethodAttribute>();
                methodsByCategory[i]    = new List <MethodInfo>();
            }

            for (int i = 0; i < nodeMethodsAttribute.Length; i++)
            {
                int categoryIndex = categories.IndexOf(nodeMethodsAttribute[i].category);
                attributesByCategory[categoryIndex].Add(nodeMethodsAttribute[i]);
                methodsByCategory[categoryIndex].Add(nodeMethodsInfo[i]);
            }

            List <string> filteredCategories = new List <string>(categories.Count);
            List <NodeMethodAttribute[]> filteredNodeMethodsAttributes = new List <NodeMethodAttribute[]>(categories.Count);
            List <MethodInfo[]>          filteredNodeMethods           = new List <MethodInfo[]>(categories.Count);

            for (int i = 0; i < categories.Count; i++)
            {
                if (!categories[i].StartsWith("Hidden"))
                {
                    filteredCategories.Add(categories[i]);
                    filteredNodeMethodsAttributes.Add(attributesByCategory[i].ToArray());
                    filteredNodeMethods.Add(methodsByCategory[i].ToArray());
                }
            }

            return(new NodeSetData
            {
                nodeMethodsAttributes = filteredNodeMethodsAttributes.ToArray(),
                nodeMethods = filteredNodeMethods.ToArray(),
                nodeCategories = filteredCategories.ToArray()
            });
        }
        protected void DrawRoutineLine(Routine routine, float rectOffset, int routineIndex)
        {
            Texture2D routineIcon = null;

            if (routine.finalNode != null)
            {
                MethodInfo nodeMethodInfo = routine.finalNode.methodInfo;
                if (nodeMethodInfo == null)
                {
                    routine.RemoveNode(routine.finalNode);
                    return;
                }
                NodeMethodAttribute nodeMethodAttribute = routine.finalNode.nodeMethodAttribute;
                if (nodeMethodAttribute == null)
                {
                    routine.RemoveNode(routine.finalNode);
                    return;
                }

                routineIcon = GetCategoryIcon(nodeMethodAttribute.category);
            }
            GUIContent routineNameGUIContent = new GUIContent(routine.name, routineIcon);

            float width        = topPanelRect.width;
            Color routineColor = (routine == m_selectedRoutine) ? s_topPanelSelectedRoutineColor : s_topPanelRoutineColor;

            Rect routineRect = new Rect(16, rectOffset, width - 18, 18);

            EditorGUI.DrawRect(routineRect, routineColor);
            routineRect.position += Vector2.one * 2;
            routineRect.size     -= Vector2.one * 4;
            EditorGUI.DrawRect(routineRect, Color.Lerp(routineColor, s_sidePanelsColor, 0.7f));

            switch (DrawLabeledIconButtons(routineNameGUIContent, false, ButtonAnswer.Modify, ButtonAnswer.Duplicate, ButtonAnswer.MoveDown, ButtonAnswer.MoveUp, ButtonAnswer.Delete))
            {
            case ButtonAnswer.Modify:
                if (m_selectedRoutine != routine)
                {
                    GUI.FocusControl("Dummy");
                }
                m_selectedRoutine = routine;
                break;

            case ButtonAnswer.Duplicate:
                m_selectedTrigger.DuplicateRoutine(routine);
                SetSceneDirty();
                break;

            case ButtonAnswer.MoveDown:
                m_selectedTrigger.SwapRoutines(routineIndex, (routineIndex + 1) % m_selectedTrigger.GetRoutinesCount(routine.type), routine.type);
                SetSceneDirty();
                break;

            case ButtonAnswer.MoveUp:
                m_selectedTrigger.SwapRoutines(routineIndex, (routineIndex == 0) ? m_selectedTrigger.GetRoutinesCount(routine.type) - 1 : routineIndex - 1, routine.type);
                SetSceneDirty();
                break;

            case ButtonAnswer.Delete:
                if (routine == m_selectedRoutine)
                {
                    m_selectedRoutine = null;
                }
                GUI.FocusControl("Dummy");
                m_selectedTrigger.RemoveRoutine(routine);
                SetSceneDirty();
                break;
            }

            GUILayout.Space(2);
        }