예제 #1
0
 private void DrawGenericMenu()
 {
     if (GUILayout.Button(SkillEditTempData.settingTex, EditorStyles.toolbarButton, GUILayout.Width(20)))
     {
         GenericMenu toolsMenu = new GenericMenu();
         for (int j = 0; j < SkillEditorUtility.timeLineTypes.Count; j++)
         {
             int copyj   = j;
             var display = SkillEditorUtility.GetDisplayAttr(SkillEditorUtility.timeLineTypes[j]);
             if (display != null)
             {
                 GenericMenu.MenuFunction func = () =>
                 {
                     var tl = Activator.CreateInstance(SkillEditorUtility.timeLineTypes[copyj]) as TimeLine;
                     timglineGroup.TimeLines.Add(tl);
                     eTimelines.Add(new ETimeline(this, tl));
                 };
                 toolsMenu.AddItem(new GUIContent("添加/" + display.DisplayName), false, func);
                 GenericMenu.MenuFunction pasteFunc = () =>
                 {
                     var tl = SkillEditTempData.copyItem as TimeLine;
                     timglineGroup.TimeLines.Add(tl);
                     eTimelines.Add(new ETimeline(this, tl));
                 };
                 if (SkillEditTempData.copyItem != null && SkillEditTempData.copyItem is TimeLine)
                 {
                     toolsMenu.AddItem(new GUIContent("粘贴"), false, pasteFunc);
                 }
             }
         }
         var e = UnityEngine.Event.current;
         toolsMenu.DropDown(new Rect(e.mousePosition.x, e.mousePosition.y, 0, 0));
         EditorGUIUtility.ExitGUI();
     }
 }
예제 #2
0
    public void Draw()
    {
        GUILayout.BeginVertical();
        GUILayout.BeginHorizontal(GUILayout.MinWidth(150));
        DisplayAttribute displayAttr = SkillEditorUtility.GetDisplayAttr(timeline.GetType());

        GUILayout.Space(30);
        if (GUILayout.Button((displayAttr.DisplayName + "   时长:" + timeline.FrameCount + "  次数:" + timeline.Times), "Label"))
        {
            SkillEditTempData.editingItemCache = timeline;
            // OnSelected.Invoke(timeline);
        }
        DrawGenericMenu();
        GUILayout.EndHorizontal();
        for (int i = 0; i < list.Count; i++)
        {
            if (list[i].action.GetType().Equals(typeof(BaseAction)))
            {
            }
            else
            {
                list[i].Draw();
            }
        }
        GUILayout.EndVertical();
    }
예제 #3
0
 public void Initiate()
 {
     SkillEditTempData.copyItem         = null;
     SkillEditTempData.editingItem      = null;
     SkillEditTempData.editingItemCache = null;
     SkillEditTempData.editingSkill     = null;
     Type[] typelist = SkillEditorUtility.GetAllClasses();
     SkillEditorUtility.timeLineTypes.Clear();
     SkillEditorUtility.actionTypes.Clear();
     foreach (Type t in typelist)
     {
         if (typeof(BaseAction).IsAssignableFrom(t))
         {
             SkillEditorUtility.actionTypes.Add(t);
         }
         else if (typeof(TimeLine).IsAssignableFrom(t))
         {
             SkillEditorUtility.timeLineTypes.Add(t);
         }
         else if (typeof(Skill).IsAssignableFrom(t))
         {
             SkillEditorUtility.skillTypes.Add(t);
         }
         else if (typeof(Buff).IsAssignableFrom(t))
         {
             SkillEditorUtility.buffTypes.Add(t);
         }
         else if (typeof(Logic.Skill.Event).IsAssignableFrom(t))
         {
             SkillEditorUtility.eventTypes.Add(t);
         }
     }
     fileInfos.Clear();
     _runtimeOperatePanel = new ERuntimeOperatePanel();
     _actionDetailPanel   = new EShowActionDetailPanel();
     GetFiles(SkillUtility.GetRequiredConfigsPath(), fileInfos, null);
     SkillEditTempData.settingTex = AssetDatabase.LoadAssetAtPath <Texture2D>("Assets/Editor/Image/setting.png");
 }
예제 #4
0
    public override void Draw()
    {
        GUILayout.BeginHorizontal(GUILayout.MinWidth(400));
        GUILayout.Space(30 * 2);
        GUI.color = Color.white;
        int val = (int)GUILayout.HorizontalSlider((float)action.ExecuteFrameIndex, 0, parent.timeline.FrameCount, GUILayout.MinWidth(150));

        if (val != action.ExecuteFrameIndex)
        {
            SkillEditorUtility.SetValue(action, "ExecuteFrameIndex", val);
        }
        GUI.color = Color.white;
        DrawGenericMenu();
        GUI.color = Color.white;
        var attr = SkillEditorUtility.GetDisplayAttr(action.GetType());

        if (GUILayout.Button(attr.DisplayName + "  调用帧数" + action.ExecuteFrameIndex.ToString("000"), "Label"))
        {
            SkillEditTempData.editingItemCache = action;
        }
        GUI.color = Color.white;
        GUILayout.EndHorizontal();
        base.Draw();
    }
예제 #5
0
 public void DrawGenericMenu()
 {
     if (GUILayout.Button(SkillEditTempData.settingTex, EditorStyles.toolbarButton, GUILayout.MaxWidth(20)))
     {
         GenericMenu toolsMenu         = new GenericMenu();
         GenericMenu.MenuFunction func = () =>
         {
             if (action == SkillEditTempData.editingItem)
             {
                 SkillEditTempData.editingItem = null;
             }
             parent.RemoveAction(this);
         };
         toolsMenu.AddItem(new GUIContent("删除"), false, func);
         GenericMenu.MenuFunction copyFunc = () =>
         {
             SkillEditTempData.copyItem = SkillEditorUtility.Clone(action);
         };
         toolsMenu.AddItem(new GUIContent("复制"), false, copyFunc);
         Event e = Event.current;
         toolsMenu.DropDown(new Rect(e.mousePosition.x, e.mousePosition.y, 0, 0));
         EditorGUIUtility.ExitGUI();
     }
 }
예제 #6
0
    public void DrawGenericMenu()
    {
        if (GUILayout.Button(SkillEditTempData.settingTex, EditorStyles.toolbarButton, GUILayout.MaxWidth(20)))
        {
            int         cur_tl_index            = parent.timglineGroup.TimeLines.IndexOf(timeline);
            GenericMenu toolsMenu               = new GenericMenu();
            GenericMenu.MenuFunction moveUpFunc = () =>
            {
                var tempTl = this.timeline;

                parent.timglineGroup.TimeLines[cur_tl_index]     = parent.timglineGroup.TimeLines[cur_tl_index - 1];
                parent.timglineGroup.TimeLines[cur_tl_index - 1] = tempTl;
            };
            if (cur_tl_index != 0)
            {
                toolsMenu.AddItem(new GUIContent("向上"), false, moveUpFunc);
            }
            GenericMenu.MenuFunction moveDownFunc = () =>
            {
                var tempTl = parent.timglineGroup.TimeLines[cur_tl_index];
                parent.timglineGroup.TimeLines[cur_tl_index]     = parent.timglineGroup.TimeLines[cur_tl_index + 1];
                parent.timglineGroup.TimeLines[cur_tl_index + 1] = tempTl;
            };
            if (cur_tl_index != parent.timglineGroup.TimeLines.Count - 1)
            {
                toolsMenu.AddItem(new GUIContent("向下"), false, moveDownFunc);
            }
            GenericMenu.MenuFunction copyFunc = () =>
            {
                SkillEditTempData.copyItem = SkillEditorUtility.Clone(parent.timglineGroup.TimeLines[cur_tl_index]);
            };
            toolsMenu.AddItem(new GUIContent("复制"), false, copyFunc);

            GenericMenu.MenuFunction pasteFunc = () =>
            {
                timeline.BaseActions.Add(SkillEditTempData.copyItem as BaseAction);
                list.Add(new EActionControl(this, SkillEditTempData.copyItem as BaseAction));
            };
            if (SkillEditTempData.copyItem != null && SkillEditTempData.copyItem is BaseAction)
            {
                toolsMenu.AddItem(new GUIContent("粘贴"), false, pasteFunc);
            }
            for (int j = 0; j < SkillEditorUtility.actionTypes.Count; j++)
            {
                int copyj   = j;
                var display = SkillEditorUtility.GetDisplayAttr(SkillEditorUtility.actionTypes[j]);
                if (display != null)
                {
                    GenericMenu.MenuFunction func = () =>
                    {
                        var new_action = Activator.CreateInstance(SkillEditorUtility.actionTypes[copyj]) as BaseAction;
                        timeline.BaseActions.Add(new_action);
                        this.list.Add(new EActionControl(this, new_action));
                    };
                    if (typeof(DisplayAction).IsAssignableFrom(SkillEditorUtility.actionTypes[j]))
                    {
                        toolsMenu.AddItem(new GUIContent("添加/表现/" + display.DisplayName), false, func);
                    }
                    else
                    {
                        toolsMenu.AddItem(new GUIContent("添加/逻辑/" + display.DisplayName), false, func);
                    }
                }
            }
            GenericMenu.MenuFunction del_func = () =>
            {
                if (SkillEditTempData.editingItem == timeline)
                {
                    SkillEditTempData.editingItem = null;
                }
                parent.RemoveTimeline(this);
            };
            toolsMenu.AddItem(new GUIContent("删除"), false, del_func);
            Event e = Event.current;
            toolsMenu.DropDown(new Rect(e.mousePosition.x, e.mousePosition.y, 0, 0));
            EditorGUIUtility.ExitGUI();
        }
    }
    public void Draw()
    {
        if (SkillEditTempData.editingItem != null)
        {
            Dictionary <string, List <PropertyInfo> > group_items = new Dictionary <string, List <PropertyInfo> >();
            PropertyInfo[] fields = SkillEditTempData.editingItem.GetType().GetProperties();
            for (int i = 0; i < fields.Length; i++)
            {
                var displayAttributes = fields[i].GetCustomAttributes(typeof(DisplayAttribute), true) as DisplayAttribute[];//.FieldType.GetCustomAttributes<DisplayAttribute>();
                foreach (var displayAttribute in displayAttributes)
                {
                    if (!group_items.ContainsKey(displayAttribute.GroupName))
                    {
                        group_items.Add(displayAttribute.GroupName, new List <PropertyInfo>());
                    }
                    group_items[displayAttribute.GroupName].Add(fields[i]);
                }
            }
            foreach (var groupItem in group_items)
            {
                GUILayout.Label(groupItem.Key);
                for (int i = 0; i < groupItem.Value.Count; i++)
                {
                    PropertyInfo fi          = groupItem.Value[i];
                    var          displayAttr = SkillEditorUtility.GetDisplayAttr(fi);
                    GUILayout.BeginHorizontal(GUILayout.MinWidth(100));
                    GUILayout.Space(space);
                    GUILayout.Label(displayAttr.DisplayName);
                    GUILayout.Space(space);
                    if (displayAttr.ControlType == UIControlType.Range)
                    {
                        TimeLine tl      = GetTimeLine();
                        var      val     = fi.GetValue(SkillEditTempData.editingItem, null);
                        var      new_val = GUILayout.HorizontalSlider((int)val, 0, tl.FrameCount, GUILayout.MinWidth(100), GUILayout.MaxWidth(200), GUILayout.ExpandWidth(false));
                        fi.SetValue(SkillEditTempData.editingItem, (int)new_val, null);
                        GUILayout.Label(new_val.ToString("0.00"));
                    }
                    else if (displayAttr.ControlType == UIControlType.MutiSelection)
                    {
                        System.Array enumValues = System.Enum.GetValues(displayAttr.data as Type);
                        GUILayout.BeginVertical();
                        foreach (var item in enumValues)
                        {
                            int  val       = (int)item;
                            int  storedVal = (int)fi.GetValue(SkillEditTempData.editingItem, null);
                            bool check     = (storedVal & val) != 0;
                            bool new_check = GUILayout.Toggle(check, item.ToString(), GUILayout.MinWidth(70));
                            if (new_check != check)
                            {
                                if (new_check)
                                {
                                    storedVal += val;
                                }
                                else
                                {
                                    storedVal -= val;
                                }
                                fi.SetValue(SkillEditTempData.editingItem, storedVal, null);
                            }
                        }
                        GUILayout.EndVertical();
                    }

                    else if (displayAttr.ControlType == UIControlType.Default)
                    {
                        if (fi.PropertyType == typeof(string))
                        {
                            string val = fi.GetValue(SkillEditTempData.editingItem, null) as string;
                            val = val == null ? "" : val;
                            int textFieldID = GUIUtility.GetControlID("TextField".GetHashCode(), FocusType.Keyboard) + 1;
                            if (textFieldID != 0)
                            {
                                val = SkillEditorUtility.HandleCopyPaste(textFieldID) ?? val;
                            }
                            string new_val = GUILayout.TextField(val, GUILayout.MinWidth(100));
                            fi.SetValue(SkillEditTempData.editingItem, new_val, null);
                        }
                        else if (fi.PropertyType == typeof(int))
                        {
                            int    val     = (int)fi.GetValue(SkillEditTempData.editingItem, null);
                            string new_val = GUILayout.TextField(val.ToString(), GUILayout.MinWidth(70));
                            if (int.TryParse(new_val, out val))
                            {
                                fi.SetValue(SkillEditTempData.editingItem, val, null);
                            }
                        }
                        else if (fi.PropertyType == typeof(bool))
                        {
                            bool val     = (bool)fi.GetValue(SkillEditTempData.editingItem, null);
                            bool new_val = GUILayout.Toggle(val, "", GUILayout.MinWidth(70));
                            fi.SetValue(SkillEditTempData.editingItem, new_val, null);
                        }
                        else if (fi.PropertyType == typeof(float))
                        {
                            float  val     = (float)fi.GetValue(SkillEditTempData.editingItem, null);
                            string new_val = GUILayout.TextField(val.ToString(), GUILayout.MinWidth(70));
                            if (new_val != val.ToString() && float.TryParse(new_val, out val))
                            {
                                fi.SetValue(SkillEditTempData.editingItem, val, null);
                            }
                        }
                        else if (fi.PropertyType.IsEnum)
                        {
                            var val     = fi.GetValue(SkillEditTempData.editingItem, null) as Enum;
                            var new_val = EditorGUILayout.EnumPopup("", val, GUILayout.MinWidth(70));
                            fi.SetValue(SkillEditTempData.editingItem, new_val, null);
                        }
                        else if (fi.PropertyType == typeof(FixedAnimationCurve))
                        {
                            var val = fi.GetValue(SkillEditTempData.editingItem, null) as FixedAnimationCurve;
                            if (val == null)
                            {
                                val = new FixedAnimationCurve();
                            }
                            AnimationCurve ac = new AnimationCurve();
                            if (val.Keyframes.Count > 0)
                            {
                                Keyframe[] keyframes = new Keyframe[val.Keyframes.Count];
                                for (int j = 0; j < val.Keyframes.Count; j++)
                                {
                                    var ori_key = val.Keyframes[j];
                                    keyframes[j]             = new Keyframe(ori_key.time.ToFloat(), ori_key.value.ToFloat(), ori_key.inTangent.ToFloat(), ori_key.outTangent.ToFloat());
                                    keyframes[j].tangentMode = ori_key.tangentMode;
                                }
                                ac.keys = keyframes;
                            }
                            var new_val = EditorGUILayout.CurveField("", ac);
                            val.Keyframes.Clear();
                            List <FixedKeyFrame> ckfs = new List <FixedKeyFrame>();
                            for (int j = 0; j < new_val.keys.Length; j++)
                            {
                                Keyframe kf = new_val.keys[j];
                                val.AddKeyFrame(new FixedKeyFrame()
                                {
                                    time        = kf.time.ToLong(), value = kf.value.ToLong(), inTangent = kf.inTangent.ToLong(), outTangent = kf.outTangent.ToLong(),
                                    tangentMode = kf.tangentMode
                                });
                            }
                            fi.SetValue(SkillEditTempData.editingItem, val, null);
                        }
                        else if (fi.PropertyType == typeof(List <EventTrigger>))
                        {
                            GUILayout.BeginVertical();
                            var val = fi.GetValue(SkillEditTempData.editingItem, null) as List <EventTrigger>;
                            if (GUILayout.Button("添加事件", GUILayout.MaxWidth(70)))
                            {
                                val.Add(new EventTrigger());
                            }
                            for (int j = 0; j < val.Count; j++)
                            {
                                GUILayout.BeginHorizontal();
                                DisplayAttribute event_display_attr = SkillEditorUtility.GetDisplayAttr(SkillEditorUtility.GetPropertyInfo(val[j], "e"));
                                GUILayout.Label(event_display_attr.DisplayName);
                                var res = (Logic.Skill.EventType)EditorGUILayout.EnumPopup("", val[j].e, GUILayout.MinWidth(70));
                                if ((int)res < (int)Logic.Skill.EventType.MEELEEWEAPONHIT)
                                {
                                    res = Logic.Skill.EventType.MEELEEWEAPONHIT;
                                }
                                SkillEditorUtility.SetValue(val[j], "e", res);
                                GUILayout.EndHorizontal();
                                GUILayout.BeginHorizontal();
                                DisplayAttribute path_display_attr = SkillEditorUtility.GetDisplayAttr(SkillEditorUtility.GetPropertyInfo(val[j], "path"));
                                GUILayout.Label(path_display_attr.DisplayName);
                                var path = GUILayout.TextField(val[j].EventId.ToString(), GUILayout.MinWidth(70));
                                SkillEditorUtility.SetValue(val[j], "path", path);
                                GUILayout.Space(space);
                                if (GUILayout.Button("删除"))
                                {
                                    val.RemoveAt(j);
                                }
                                GUILayout.EndHorizontal();
                            }
                            fi.SetValue(SkillEditTempData.editingItem, val, null);
                            GUILayout.EndVertical();
                        }
                        else if (fi.PropertyType.Name.Contains("DataBind"))
                        {
                            object val           = fi.GetValue(SkillEditTempData.editingItem, null);
                            Type   db_type       = val.GetType();
                            var    db_properites = db_type.GetProperties((BindingFlags)int.MaxValue);
                            bool   needBind      = false;
                            for (int j = 0; j < db_properites.Length; j++)
                            {
                                if (db_properites[j].Name.Contains("needDataBind"))
                                {
                                    needBind = (bool)(db_properites[j].GetValue(val, null));
                                    GUILayout.Label("数据绑定");
                                    bool new_needBind = GUILayout.Toggle(needBind, "");
                                    if (new_needBind != needBind)
                                    {
                                        db_properites[j].SetValue(val, new_needBind, null);
                                    }
                                    break;
                                }
                            }
                            if (needBind)
                            {
                                for (int j = 0; j < db_properites.Length; j++)
                                {
                                    if (db_properites[j].Name.Contains("bindFrom"))
                                    {
                                        GUILayout.Label("数据源字段");
                                        string bindFrom = (string)(db_properites[j].GetValue(val, null));
                                        if (bindFrom == null)
                                        {
                                            bindFrom = "";
                                        }
                                        string new_bindFrom = GUILayout.TextField(bindFrom, GUILayout.Width(50));
                                        if (bindFrom != new_bindFrom)
                                        {
                                            db_properites[j].SetValue(val, new_bindFrom, null);
                                        }
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                for (int j = 0; j < db_properites.Length; j++)
                                {
                                    if (db_properites[j].Name.Contains("value_SetDirectly"))
                                    {
                                        GUILayout.Label("数据");
                                        var genericTypes = fi.PropertyType.GetGenericArguments();
                                        if (genericTypes[0] == typeof(int))
                                        {
                                            int    bindFrom         = (int)(db_properites[j].GetValue(val, null));
                                            string new_bindFrom_str = GUILayout.TextField(bindFrom.ToString(),
                                                                                          GUILayout.Width(50));
                                            int new_bindFrom;
                                            if (int.TryParse(new_bindFrom_str, out new_bindFrom))
                                            {
                                                if (bindFrom != new_bindFrom)
                                                {
                                                    db_properites[j].SetValue(val, new_bindFrom, null);
                                                }
                                            }
                                        }
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    GUILayout.EndHorizontal();
                }
            }
        }
    }