Ejemplo n.º 1
0
    /// <summary>
    /// 添加Act单元
    /// </summary>
    /// <param name="actName"></param>
    private void addSkillAct(string group, string actName)
    {
        EditorWidgetState groupWidget = skillGroups[group];

        ActSkillGroup skillGroup = groupWidget.Entity as ActSkillGroup;

        if (skillGroup.ActList == null)
        {
            skillGroup.ActList = new List <ActItemWidget>();
        }

        //不允许相同组下,ACT重复
        foreach (ActItemWidget item in skillGroup.ActList)
        {
            if (item.ActName == actName)
            {
                return;
            }
        }

        ActItemWidget itemWidget = new ActItemWidget();

        itemWidget.GroupName = group;
        itemWidget.ActName   = actName;
        skillGroup.ActList.Add(itemWidget);
    }
Ejemplo n.º 2
0
    /// <summary>
    /// 初始化ACT项的属性,从文件目录加载配置
    /// </summary>
    /// <param name="groupName">Act 的分组</param>
    /// <param name="actName">Act 的名称</param>
    public void InitActItemProperty(string groupName, string actName)
    {
        this.actGroup = groupName;
        this.actName  = actName;

        //加载文件
        string relativePath = string.Concat("Act/", groupName, "/", actName, ".act");

        object[] property = localDataHelper.Import(relativePath);
        widgetList.Clear();

        if (property == null)
        {
            return;                         //新建的文件没有本地数据
        }
        int index = 0;

        foreach (object obj in property)
        {
            EditorWidgetState widget = new EditorWidgetState();
            widget.Entity  = obj;
            widget.FoldOut = index == 0;

            EditorGUIUtil.FindAllWidget(new List <EditorWidgetState>(), widget, widget.Entity);

            index++;
            widgetList.Add(widget);
        }
    }
Ejemplo n.º 3
0
    /// <summary>
    /// 添加新的模块
    /// </summary>
    private void onAddNewModuleGUI()
    {
        EditorGUIUtil.DrawHeader("Add New Module");
        //添加模块视图
        GUILayout.BeginHorizontal("AS TextArea", GUILayout.Height(30));
        selectEnum = (ActModuleEnum)EditorGUILayout.EnumPopup("新模块", selectEnum, GUILayout.MaxWidth(Screen.width * 0.5f));

        GUI.backgroundColor = Color.green;
        if (GUILayout.Button("Add", GUILayout.Width(60)))
        {
            if (string.IsNullOrEmpty(actName))
            {
                return;
            }

            EditorWidgetState widget = new EditorWidgetState();
            widget.Entity  = Activator.CreateInstance(moduleMap[selectEnum]);
            widget.FoldOut = true;

            EditorGUIUtil.FindAllWidget(new List <EditorWidgetState>(), widget, widget.Entity);

            widgetList.Add(widget);
        }
        GUI.backgroundColor = Color.white;

        GUILayout.EndHorizontal();
    }
Ejemplo n.º 4
0
    /// <summary>
    /// 添加角色组
    /// </summary>
    private void addSkillGroup(string name)
    {
        if (skillGroups.ContainsKey(name))
        {
            return;
        }

        EditorWidgetState group = new EditorWidgetState();

        group.CanRemove = true;

        ActSkillGroup asg = new ActSkillGroup();

        asg.GroupName = name;

        group.Entity = asg;
        this.skillGroups.Add(name, group);

        // indexGroup = skillGroups.Count - 1;
    }
Ejemplo n.º 5
0
    /// <summary>
    /// 查找所有的GUI可显示组件项
    /// </summary>
    /// <param name="widgets"></param>
    /// <param name="obj"></param>
    public static void FindAllWidget(List <EditorWidgetState> widgets, EditorWidgetState parentWidget, object obj)
    {
        if (obj == null)
        {
            return;
        }

        Type objType = obj.GetType();

        foreach (PropertyInfo propertyInfo in objType.GetProperties())
        {
            Attribute attribute = Attribute.GetCustomAttribute(propertyInfo, typeof(InjectDataAttribute));
            if (attribute == null)
            {
                continue;
            }

            InjectDataAttribute display = attribute as InjectDataAttribute;
            if (string.IsNullOrEmpty(display.DisplayName))
            {
                continue;
            }

            Type propertyType = propertyInfo.PropertyType;
            if (!propertyType.IsEnum && !propertyType.IsValueType && !propertyType.Equals(typeof(System.String)))
            {
                EditorWidgetState childWidget = new EditorWidgetState();
                object            childObj    = propertyInfo.GetValue(obj, null);
                childWidget.Entity = childObj == null?Activator.CreateInstance(propertyType) : childObj;

                if (childObj == null)
                {
                    propertyInfo.SetValue(obj, childWidget.Entity, null);
                }
                widgets.Add(childWidget);

                FindAllWidget(new List <EditorWidgetState>(), childWidget, childWidget.Entity);
            }
        }
        parentWidget.SubWidget = widgets.ToArray();
    }
Ejemplo n.º 6
0
    /// <summary>
    /// 绘制实例
    /// </summary>
    /// <param name="widgetState"></param>
    /// <param name="isRemove"></param>
    /// <returns></returns>
    public static bool OnGUIInstanceDisplay(EditorWidgetState widgetState, bool isRemove)
    {
        object obj = widgetState.Entity;

        if (obj == null)
        {
            return(false);
        }

        if (isRemove && widgetState.FoldOut)
        {
            NGUIEditorTools.DrawSeparator();
        }
        GUILayout.BeginHorizontal();

        widgetState.FoldOut = EditorGUILayout.Foldout(widgetState.FoldOut, widgetState.Entity.GetType().Name);

        if (isRemove && GUILayout.Button("X", GUILayout.Width(30)))
        {
            return(true);
        }
        GUILayout.EndHorizontal();
        if (isRemove && widgetState.FoldOut)
        {
            NGUIEditorTools.DrawSeparator();
            GUILayout.Space(10);
        }

        //如果被折叠,则不绘制具体的面板信息
        if (!widgetState.FoldOut)
        {
            return(false);
        }

        EditorGUI.indentLevel++;

        Type objType = obj.GetType();

        foreach (PropertyInfo propertyInfo in objType.GetProperties())
        {
            Attribute attribute = Attribute.GetCustomAttribute(propertyInfo, typeof(InjectDataAttribute));
            if (attribute == null)
            {
                continue;
            }

            InjectDataAttribute display = attribute as InjectDataAttribute;
            if (string.IsNullOrEmpty(display.DisplayName))
            {
                continue;
            }

            Type propertyType = propertyInfo.PropertyType;
            if (propertyType.IsEnum || propertyType.IsValueType || propertyType.Equals(typeof(System.String)))
            {
                GUILayout.BeginHorizontal();
                object result = OnGUIProperty(display.DisplayName, propertyType, propertyInfo.GetValue(obj, null));
                propertyInfo.SetValue(obj, result, null); //更新修改值
                GUILayout.EndHorizontal();
            }
        }

        //遍历绘制子层数据
        if (widgetState.SubWidget != null && widgetState.SubWidget.Length > 0)
        {
            EditorGUI.indentLevel++;
            foreach (EditorWidgetState subWidget in widgetState.SubWidget)
            {
                //bool lastFoldOut = subWidget.FoldOut;
                //NGUIEditorTools.DrawSeparator();

                //if(lastFoldOut)     NGUIEditorTools.DrawSeparator();

                OnGUIInstanceDisplay(subWidget, false);
            }
        }

        return(false);
    }