Exemplo n.º 1
0
        void OnAddClicked(Blackboard t)
        {
            GenericMenu menu = new GenericMenu();

            foreach (var dataType in CZTypeFactory.TypeCreator.Keys)
            {
                Type valueType = Utility_Reflection.GetFieldInfo(dataType, "value").FieldType;
                if (!typeof(UnityEngine.Object).IsAssignableFrom(valueType) && !UIElementsFactory.FieldDrawerCreatorMap.ContainsKey(valueType))
                {
                    continue;
                }
                menu.AddItem(new GUIContent(dataType.Name), false, () =>
                {
                    string name = dataType.Name;

                    int i = 0;
                    while (GraphView.Model.ContainsName_BB(name))
                    {
                        name = dataType.Name + " " + i++;
                    }
                    GraphView.Model.AddData_BB(name, CZTypeFactory.TypeCreator[dataType]());
                });
            }

            menu.ShowAsContext();
        }
Exemplo n.º 2
0
 static CZTypeFactory()
 {
     foreach (var type in Utility_Reflection.GetChildrenTypes <ICZType>())
     {
         if (!type.IsGenericType && !type.IsAbstract)
         {
             TypeCreator[type] = () => { return(Activator.CreateInstance(type) as ICZType); }
         }
         ;
     }
 }
Exemplo n.º 3
0
 protected virtual IEnumerable <Type> GetNodeTypes()
 {
     foreach (var type in Utility_Reflection.GetChildrenTypes <BaseNode>())
     {
         if (type.IsAbstract)
         {
             continue;
         }
         Debug.Log(type.Name);
         yield return(type);
     }
 }
 static GraphProcessorCache()
 {
     portCache = new Dictionary <Type, List <NodePort> >();
     foreach (var nodeType in Utility_Reflection.GetChildrenTypes <BaseNode>())
     {
         if (nodeType.IsAbstract)
         {
             continue;
         }
         CachePorts(nodeType);
     }
 }
 static TimelineLiteObject()
 {
     ActionDataDict = new Dictionary <Type, Type>();
     foreach (var actionType in Utility_Reflection.GetChildrenTypes <ITLAction>())
     {
         if (actionType.IsGenericType || actionType.IsAbstract)
         {
             continue;
         }
         Type actionDataType = actionType.GetProperty("TActionData",
                                                      BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).PropertyType;
         ActionDataDict[actionDataType] = actionType;
     }
 }
Exemplo n.º 6
0
 public ConversationManager()
 {
     if (CommandResolverTypeCache == null)
     {
         CommandResolverTypeCache = new Dictionary <string, Type>();
         foreach (var type in Utility_Reflection.GetChildrenTypes <IConversationCommand>())
         {
             if (Utility_Attribute.TryGetTypeAttribute(type, out CommandNameAttribute attribute))
             {
                 CommandResolverTypeCache[attribute.commandText] = type;
             }
         }
     }
 }
Exemplo n.º 7
0
 protected override IEnumerable <Type> GetNodeTypes()
 {
     foreach (var type in Utility_Reflection.GetChildrenTypes <GOAPAction>())
     {
         if (type.IsAbstract)
         {
             continue;
         }
         yield return(type);
     }
     foreach (var type in Utility_Reflection.GetChildrenTypes <GOAPActionEvtNode>())
     {
         if (type.IsAbstract)
         {
             continue;
         }
         yield return(type);
     }
 }
        static void CachePorts(Type _nodeType)
        {
            List <FieldInfo> fieldInfos = Utility_Reflection.GetFieldInfos(_nodeType);

            foreach (var fieldInfo in fieldInfos)
            {
                // 获取接口特性
                if (!Utility_Attribute.TryGetFieldAttribute(_nodeType, fieldInfo.Name, out PortAttribute portAttribute))
                {
                    continue;
                }

                if (!portCache.ContainsKey(_nodeType))
                {
                    portCache.Add(_nodeType, new List <NodePort>());
                }

                portCache[_nodeType].Add(new NodePort(fieldInfo, portAttribute));
            }
        }
Exemplo n.º 9
0
        public static IEnumerable <SharedVariable> CollectionObjectSharedVariables(object _object)
        {
            List <FieldInfo> fieldInfos = Utility_Reflection.GetFieldInfos(_object.GetType());
            Type             sharedType = typeof(SharedVariable);

            foreach (var fieldInfo in fieldInfos)
            {
                if (sharedType.IsAssignableFrom(fieldInfo.FieldType))
                {
                    SharedVariable variable = fieldInfo.GetValue(_object) as SharedVariable;
                    if (variable == null)
                    {
                        variable = Activator.CreateInstance(fieldInfo.FieldType) as SharedVariable;
                        fieldInfo.SetValue(_object, variable);
                    }
                    yield return(variable);

                    continue;
                }
            }
        }
Exemplo n.º 10
0
        /// <summary> 绘制内部所有字段 </summary>
        public static object DrawFields(object _object)
        {
            if (_object == null)
            {
                return(null);
            }

            List <FieldInfo> fields = Utility_Reflection.GetFieldInfos(_object.GetType());

            for (int j = 0; j < fields.Count; j++)
            {
                if (CanDraw(fields[j]))
                {
                    EditorGUI.BeginChangeCheck();
                    object value = EditorGUILayoutExtension.DrawField(fields[j], fields[j].GetValue(_object));
                    if (EditorGUI.EndChangeCheck())
                    {
                        fields[j].SetValue(_object, value);
                        GUI.changed = true;
                    }
                }
            }
            return(_object);
        }
Exemplo n.º 11
0
 public void Initialize(object _target)
 {
     Target = _target;
     Script = EditorUtilityExtension.FindScriptFromType(Target.GetType());
     Fields = Utility_Reflection.GetFieldInfos(Target.GetType()).FindAll(field => EditorGUILayoutExtension.CanDraw(field));
 }
Exemplo n.º 12
0
 public List <FieldInfo> GetNodeFieldInfos()
 {
     return(Utility_Reflection.GetFieldInfos(GetType()));
 }
Exemplo n.º 13
0
        protected virtual void BuildToolboxTreeView(ToolboxTreeView _treeView)
        {
            _treeView.AddItem(ToolboxTreeViewItem.GetSeparator(2));

            // 打开脚本,ping和选中保存按钮
            ToolboxTreeViewItem helpControl = ToolboxTreeViewItem.GetItem((rect, item) =>
            {
#if UNITY_2018_1_OR_NEWER
                TimelineLiteAsset timelineLiteAsset = TimelineEditor.inspectedAsset as TimelineLiteAsset;
#else
                TimelineLiteAsset timelineLiteAsset = TimelineEditor.timelineAsset as TimelineLiteAsset;
#endif
                EditorGUI.BeginDisabledGroup(timelineLiteAsset == null);
                rect.width = 30;
                if (GUI.Button(rect, csIcon))
                {
                    AssetDatabase.OpenAsset(MonoScript.FromScriptableObject(timelineLiteAsset));
                }
                rect.x += rect.width;

                if (GUI.Button(rect, pingIcon))
                {
                    Type type           = Utility_Reflection.GetType("UnityEditor.ProjectBrowser", "UnityEditor");
                    EditorWindow window = GetWindow(type);
                    EditorGUIUtility.PingObject(timelineLiteAsset);
                }
                rect.x += rect.width;
                if (GUI.Button(rect, selectIcon))
                {
                    Selection.activeObject = timelineLiteAsset;
                }
                rect.x    += rect.width;
                rect.width = 50;
                if (GUI.Button(rect, "Save"))
                {
                    GenericMenu genericMenu = new GenericMenu();
                    BuildSingleAssetItemMenu(timelineLiteAsset, genericMenu);
                    genericMenu.ShowAsContext();
                }
                EditorGUI.EndDisabledGroup();
            });

            helpControl.Height = 30;
            _treeView.AddItem(helpControl);

            _treeView.AddItem(ToolboxTreeViewItem.GetSeparator(2));

            // 创建轨道按钮
            ToolboxTreeViewItem editorControl = ToolboxTreeViewItem.GetItem((rect, item) =>
            {
#if UNITY_2018_1_OR_NEWER
                TimelineLiteAsset timelineLiteAsset = TimelineEditor.inspectedAsset as TimelineLiteAsset;
#else
                TimelineLiteAsset timelineLiteAsset = TimelineEditor.timelineAsset as TimelineLiteAsset;
#endif

                rect.width = 30;
                EditorGUI.BeginDisabledGroup(timelineLiteAsset == null);
                if (GUI.Button(rect, createTrackIcon))
                {
                    trackTypeMenu.ShowAsContext();
                }
                EditorGUI.EndDisabledGroup();
            });

            editorControl.Height = 30;
            _treeView.AddItem(editorControl);

            // 播放进度控制条和播放按钮
            ToolboxTreeViewItem progressControl = ToolboxTreeViewItem.GetItem((rect, item) =>
            {
#if UNITY_2018_1_OR_NEWER
                TimelineLiteAsset timelineLiteAsset = TimelineEditor.inspectedAsset as TimelineLiteAsset;
#else
                TimelineLiteAsset timelineLiteAsset = TimelineEditor.timelineAsset as TimelineLiteAsset;
#endif
                GUI.Box(rect, "");
                rect.height = 25;

                bool hasPlayable           = Playable != null;
                bool hasTimeline           = hasPlayable && Playable.Timeline != null;
                bool disable               = !hasPlayable || !hasTimeline;
                bool inspectorTimelineLite = timelineLiteAsset != null;

                if (!EditorApplication.isPlaying)
                {
                    // 非播放状态下只用来调整指针
                    EditorGUI.BeginDisabledGroup(!inspectorTimelineLite);
                    int frameCount   = inspectorTimelineLite ? (int)timelineLiteAsset.GetFrameCount() : 0;
                    int currentFrame = Mathf.Clamp(inspectorTimelineLite ? indicatorFrame : 0, 0, frameCount);
                    IndicatorFrame   = TimelineLiteUtility.ConvertToFrameIndex(EditorGUIExtension.ProgressBar(rect, currentFrame, 0, frameCount, currentFrame + "/" + frameCount, true));
                    EditorGUI.EndDisabledGroup();
                }
                else
                {
                    // 播放状态下可用来调整动画进度
                    EditorGUI.BeginDisabledGroup(!hasPlayable || playable.PlayStatus == PlayStatus.Stopped);
                    int frameCount   = hasTimeline ? Playable.Timeline.FrameCount : 0;
                    int currentFrame = hasTimeline ? Playable.CurrentFrame : 0;
                    IndicatorFrame   = TimelineLiteUtility.ConvertToFrameIndex(EditorGUIExtension.ProgressBar(rect, currentFrame, 0, frameCount, currentFrame + "/" + frameCount, true));
                    if (indicatorFrame != currentFrame)
                    {
                        Playable.Pause();
                        Playable.SetFrame(indicatorFrame);
                    }
                    EditorGUI.EndDisabledGroup();
                }

                rect.y     += 30;
                rect.height = 15;
                rect.x      = 0;
                rect.width  = rect.width / 4;
                if (EditorApplication.isPlaying)
                {
                    // 上一帧按钮
                    EditorGUI.BeginDisabledGroup(!hasPlayable || playable.PlayStatus != PlayStatus.Pausing);
                    if (GUI.Button(rect, EditorGUIUtility.IconContent("Animation.PrevKey"), (GUIStyle)"MiniToolbarButton"))
                    {
                        playable.SetFrame(playable.CurrentFrame - 1);
                    }
                    EditorGUI.EndDisabledGroup();
                }
                else
                {
                    // 非播放状态下
                    EditorGUI.BeginDisabledGroup(!inspectorTimelineLite);
                    if (GUI.Button(rect, EditorGUIUtility.IconContent("Animation.PrevKey"), (GUIStyle)"MiniToolbarButton"))
                    {
                        int frameCount = inspectorTimelineLite ? (int)timelineLiteAsset.GetFrameCount() : 0;
                        indicatorFrame = Mathf.Clamp(--indicatorFrame, 0, frameCount);
                    }
                    EditorGUI.EndDisabledGroup();
                }

                EditorGUI.BeginDisabledGroup(!EditorApplication.isPlaying);
                rect.x += rect.width;
                if (hasPlayable)
                {
                    switch (playable.PlayStatus)
                    {
                    case PlayStatus.Playing:
                        if (GUI.Button(rect, EditorGUIUtility.IconContent("PauseButton"), (GUIStyle)"MiniToolbarButton"))
                        {
                            playable.Pause();
                        }
                        break;

                    case PlayStatus.Pausing:
                        if (GUI.Button(rect, EditorGUIUtility.IconContent("PlayButton"), (GUIStyle)"MiniToolbarButton"))
                        {
                            playable.Resume();
                        }
                        break;

                    case PlayStatus.Stopped:
                        if (playable.Timeline != null)
                        {
                            if (GUI.Button(rect, EditorGUIUtility.IconContent("PlayButton"), (GUIStyle)"MiniToolbarButton"))
                            {
                                playable.Play();
                            }
                        }
                        else
                        {
                            EditorGUI.BeginDisabledGroup(!inspectorTimelineLite);
                            if (GUI.Button(rect, EditorGUIUtility.IconContent("PlayButton"), (GUIStyle)"MiniToolbarButton"))
                            {
                                TimelineLiteObjectData data            = timelineLiteAsset.Extract();
                                ITimelineLiteObject timelineLiteObject = Activator.CreateInstance(timelineLiteAsset.TargetObjectType, data) as ITimelineLiteObject;
                                Playable.Play(timelineLiteObject);
                            }
                            EditorGUI.EndDisabledGroup();
                        }
                        break;
                    }
                }
                else
                {
                    GUI.Button(rect, EditorGUIUtility.IconContent("PlayButton"), (GUIStyle)"MiniToolbarButton");
                }
                EditorGUI.EndDisabledGroup();

                // 下一帧按钮
                rect.x += rect.width;

                if (EditorApplication.isPlaying)
                {
                    EditorGUI.BeginDisabledGroup(!hasPlayable || playable.PlayStatus != PlayStatus.Pausing);
                    if (GUI.Button(rect, EditorGUIUtility.IconContent("Animation.NextKey"), (GUIStyle)"MiniToolbarButton"))
                    {
                        playable.SetFrame(playable.CurrentFrame + 1);
                    }
                    EditorGUI.EndDisabledGroup();
                }
                else
                {
                    EditorGUI.BeginDisabledGroup(!inspectorTimelineLite);
                    if (GUI.Button(rect, EditorGUIUtility.IconContent("Animation.NextKey"), (GUIStyle)"MiniToolbarButton"))
                    {
                        int currentFrame = inspectorTimelineLite ? indicatorFrame : 0;
                        int frameCount   = inspectorTimelineLite ? (int)timelineLiteAsset.GetFrameCount() : 0;
                        indicatorFrame   = Mathf.Clamp(++indicatorFrame, currentFrame, frameCount);
                    }
                    EditorGUI.EndDisabledGroup();
                }

                rect.x += rect.width;
                EditorGUI.BeginDisabledGroup(!hasPlayable || (playable.PlayStatus == PlayStatus.Stopped && playable.Timeline == null));
                if (GUI.Button(rect, EditorGUIUtility.IconContent("PreMatQuad"), (GUIStyle)"MiniToolbarButton"))
                {
                    playable.Play <ITimelineLiteObject>(null);
                }
                EditorGUI.EndDisabledGroup();
            });

            progressControl.Height = 50;
            _treeView.AddItem(progressControl);
        }