public static Dictionary <string, SkillEditorData> GetSkillEditorDict()
    {
        var types = AppDomain.CurrentDomain.GetAssemblies()
                    .SelectMany(a => a.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(ISkillEventEditor))))
                    .ToArray();
        Dictionary <string, SkillEditorData> dict = new Dictionary <string, SkillEditorData>();

        foreach (Type t in types)
        {
            SkillEventAttribute attribute =
                (SkillEventAttribute)t.GetCustomAttribute(typeof(SkillEventAttribute));
            SkillEditorData data = new SkillEditorData();
            data.classdata = t;
            data.attr      = attribute;
            dict.Add(attribute.Name, data);
        }

        return(dict);
    }
Esempio n. 2
0
    /// <summary>
    /// 当前技能帧事件
    /// </summary>
    private void OnGUI_DrawSkillEvent()
    {
        GUILayout.BeginVertical(GUILayout.Width(300), GUILayout.Height(550));
        GUILayout.Label("技能事件列表:");
        if (curSkillEventList != null)
        {
            int count = curSkillEventList.Count;
            for (int i = 0; i < curSkillEventList.Count; i++)
            {
                GUILayout.BeginHorizontal();
                if (curSkillEvnetIndex == i)
                {
                    GUI.color = Color.green;
                }
                else
                {
                    GUI.color = Color.white;
                }

                var e = curSkillEventList[i];
                if (GUILayout.Button(string.Format("[{0}] " + e.EventName, i)))
                {
                    this.curSkillEvnetIndex = i;
                    //TODO 需要给Editor进行赋值
                    SkillEditorData data = skillEditorDict[e.EventName];
                    curSkillEventEditor =
                        (ISkillEventEditor)data.classdata.Assembly.CreateInstance(data.classdata.FullName);

                    GUI.FocusControl("RefreshFocus");
                }

                GUI.color = GUI.backgroundColor;
                if (GUILayout.Button("DEL", GUILayout.Width(35)))
                {
                    curSkillEventList.Remove(e);
                    curSkillblock.Events.Remove(e);
                    this.curSkillEvnetIndex = -1;
                    curSkillEventEditor     = null;
                    count = curSkillEventList.Count;

                    GUI.FocusControl("RefreshFocus");
                }
                GUILayout.EndHorizontal();
            }
        }

        GUILayout.Space(20);
        if (curSkillblock != null)
        {
            if (GUILayout.Button("添加事件"))
            {
                Window_SelectSkillEvent window =
                    (Window_SelectSkillEvent)EditorWindow.GetWindow(typeof(Window_SelectSkillEvent), false,
                                                                    "选择创建skillevent");
                window.Show(this.curframe, this.curSkillblock, this.curSkillEventList);
            }
        }

        GUILayout.EndVertical();
        TableToolMenu.Layout_DrawSeparatorV(Color.gray, 2);
    }