Ejemplo n.º 1
0
    /// <summary>
    /// 添加技能
    /// </summary>
    /// <param name="newSkillId">技能id</param>
    /// <param name="isCreateAsset">是否创建新的资源</param>
    static TreeViewItem AddSkill(int newSkillId, bool isCreateAsset = true)
    {
        Skill skill = ScriptableObject.CreateInstance <Skill>();

        _skillDic[skill.skillId] = skill;
        skill.skillId            = newSkillId;
        if (isCreateAsset)
        {
            AssetEditor.CreateAsset(skill, FixPath + newSkillId, "Skill");
        }

        TreeViewItem skillItem = _root.AddItem(newSkillId.ToString());
        SkillBase    data      = new SkillBase();

        data.type             = ItemType.Root;
        data.resPath          = ResPath + newSkillId + "/Skill";
        data.skillId          = newSkillId;
        skillItem.DataContext = data;
        AddEvents(skillItem);
        if (isCreateAsset)
        {
            TreeViewItem evtItem = AddSkillEventNode(skillItem, SkillEventType.ActiveEvent.ToString());
            if (evtItem != null)
            {
                AddSkillAction(evtItem, "PlayAnimator");
                AddSkillAction(evtItem, "FinishSkill");
            }
            AddSkillEventNode(skillItem, SkillEventType.AnimaEvent.ToString());
        }

        return(skillItem);
    }
Ejemplo n.º 2
0
    /// <summary>
    /// 添加技能
    /// </summary>
    TreeViewItem AddSkill(TreeViewItem parent, int skillId, bool createAsset = false)
    {
        try
        {
            //技能节点的数据
            ItemData itemData = new ItemData();
            itemData.resPath = ResPath + skillId + "/Skill";
            itemData.type    = ItemType.Skill;

            //增加技能节点
            TreeViewItem item = parent.AddItem(skillId.ToString());
            item.DataContext = itemData;
            AddEvents(item);

            if (createAsset)
            {
                Skill skill = ScriptableObject.CreateInstance <Skill>();
                skill.ID = skillId;
                skillTable.Add(skill.ID, skill);
                AssetEditor.CreateAsset(skill, FixedPath + skillId, "Skill");
                TreeViewItem activeEventItem = AddEvent(item, "ActiveEvent", true);
                AddAction(activeEventItem, "AnimationAction", true);
                AddAction(activeEventItem, "FinishAction", true);
                AddEvent(item, "AnimEvent", true);
            }

            return(item);
        }
        catch (Exception e)
        {
            this.ShowNotification(new GUIContent(e.Message));
        }

        return(null);
    }
Ejemplo n.º 3
0
    /// <summary>
    /// 添加事件
    /// </summary>
    /// <param name="item">父节点</param>
    /// <param name="name">事件名</param>
    /// <param name="isCreateAsset">是否创建新的资源</param>
    /// <returns></returns>
    static TreeViewItem AddSkillEventNode(TreeViewItem item, string name, bool isCreateAsset = true)
    {
        if (name == String.Empty)
        {
            return(null);
        }
        Skill skill = RegetditSkill(item);

        if (skill == null)
        {
            return(null);
        }
        string   evtName = name;
        Assembly ass     = typeof(SkillEvent).Assembly;

        string[]    nameList = name.Split('_');
        System.Type type     = ass.GetType(nameList[0]);
        SkillEvent  evt      = System.Activator.CreateInstance(type) as SkillEvent;
        SkillBase   evtData  = new SkillBase();

        if (evt is ActiveEvent)
        {
            if (isCreateAsset)
            {
                skill.activeEvent.Add(evt as ActiveEvent);
            }
        }
        else
        {
            if (skill.animaEvent.Count > 0)
            {
                evtName = name + "_" + skill.animaEvent.Count;
            }
            if (isCreateAsset)
            {
                skill.animaEvent.Add(evt as AnimaEvent);
            }
        }
        if (isCreateAsset)
        {
            AssetEditor.CreateAsset(evt, FixPath + skill.skillId + "/" + evtName, evtName);
        }
        else
        {
            evtName = name;
        }
        TreeViewItem evtItem = item.AddItem(evtName);

        evtData.type        = ItemType.SkillEvent;
        evtData.skillId     = skill.skillId;
        evtData.resPath     = ResPath + skill.skillId + "/" + evtName + "/" + evtName;
        evtItem.DataContext = evtData;
        AddEvents(evtItem);
        EditorUtility.SetDirty(skill);
        return(evtItem);
    }
Ejemplo n.º 4
0
    /// <summary>
    /// 添加技能action
    /// </summary>
    /// <param name="item">父节点</param>
    /// <param name="name">action名</param>
    /// <param name="isCreateAsset">是否创建新资源</param>
    static void AddSkillAction(TreeViewItem item, string name, bool isCreateAsset = true)
    {
        SkillBase  data    = item.DataContext as SkillBase;
        SkillBase  actData = new SkillBase();
        Skill      skill   = RegetditSkill(item);
        SkillEvent evt     = Resources.Load(data.resPath) as SkillEvent;

        if (skill == null || evt == null)
        {
            return;
        }
        Assembly ass = typeof(SkillAction).Assembly;

        string[]    nameList = name.Split('_');
        System.Type type     = ass.GetType(nameList[0]);
        SkillAction act      = System.Activator.CreateInstance(type) as SkillAction;

        string actName = name;
        int    num     = 0;

        foreach (var act2 in evt.skillActions)
        {
            if (act2.name.StartsWith(name))
            {
                num++;
            }
        }
        if (num > 0)
        {
            actName = actName + "_" + num;
        }
        if (isCreateAsset)
        {
            evt.skillActions.Add(act);
            AssetEditor.CreateAsset(act, FixPath + skill.skillId + "/" + evt.name + "/SkillAction", actName);
        }
        else
        {
            actName = name;
        }

        TreeViewItem evtItem = item.AddItem(actName);

        actData.type        = ItemType.SkillAction;
        actData.skillId     = skill.skillId;
        actData.resPath     = ResPath + skill.skillId + "/" + evt.name + "/SkillAction/" + actName;
        evtItem.DataContext = actData;
        AddEvents(evtItem);
        EditorUtility.SetDirty(evt);
        EditorUtility.SetDirty(skill);
    }
Ejemplo n.º 5
0
    TreeViewItem AddEvent(TreeViewItem parent, string type, bool createAsset = false)
    {
        try
        {
            int    skillId = (parent.DataContext as ItemData).skillId;
            string name    = type;
            if (createAsset)
            {
                Skill      skill      = skillTable[skillId];
                Assembly   ass        = typeof(SkillEvent).Assembly;
                SkillEvent skillEvent = System.Activator.CreateInstance(ass.GetType(type)) as SkillEvent;
                if (skillEvent is ActiveEvent)
                {
                    name = "ActiveEvent";
                    skill.ActiveEvents.Add(skillEvent as ActiveEvent);
                }
                else
                {
                    if (skill.AnimEvents.Count > 0)
                    {
                        name = type + skill.AnimEvents.Count;
                    }
                    else
                    {
                        name = type;
                    }
                    skill.AnimEvents.Add(skillEvent as AnimEvent);
                }
                AssetEditor.CreateAsset(skillEvent, FixedPath + skillId + "/" + name, name);
                EditorUtility.SetDirty(skill);
            }

            ItemData itemData = new ItemData();
            itemData.resPath = ResPath + skillId + "/" + name + "/" + name;
            itemData.type    = ItemType.Event;

            TreeViewItem item = parent.AddItem(name);
            item.Header      = name;
            item.DataContext = itemData;
            AddEvents(item);

            return(item);
        }
        catch (Exception e)
        {
            this.ShowNotification(new GUIContent(e.Message));
        }
        return(null);
    }
Ejemplo n.º 6
0
    TreeViewItem AddAction(TreeViewItem parent, string type, bool createAsset = false)
    {
        try
        {
            ItemData parentData    = parent.DataContext as ItemData;
            string   name          = type;
            string[] arr           = parentData.resPath.Split('/');
            string   actionResPath = "";
            for (int i = 0; i < arr.Length - 1; i++)
            {
                actionResPath += arr[i];
                actionResPath += "/";
            }

            if (createAsset)
            {
                Assembly    ass         = typeof(SkillAction).Assembly;
                SkillAction skillAction = System.Activator.CreateInstance(ass.GetType(type)) as SkillAction;

                SkillEvent parentEvent = Resources.Load <SkillEvent>(parentData.resPath);
                parentEvent.actions.Add(skillAction);

                int count = 0;
                foreach (var act in parentEvent.actions)
                {
                    if (act.name.StartsWith(type))
                    {
                        count++;
                    }
                }

                if (count > 0)
                {
                    skillAction.name = type + count.ToString();
                }
                else
                {
                    skillAction.name = type;
                }
                name = skillAction.name;

                AssetEditor.CreateAsset(skillAction, "Assets/Resources/" + actionResPath + "Actions", name);
                EditorUtility.SetDirty(parentEvent);
            }

            ItemData itemData = new ItemData();
            itemData.resPath = actionResPath + "Actions/" + name;
            itemData.type    = ItemType.Aciton;

            TreeViewItem item = parent.AddItem(name);
            item.Header      = name;
            item.DataContext = itemData;
            AddEvents(item);



            return(item);
        }
        catch (Exception e)
        {
            this.ShowNotification(new GUIContent(e.Message));
        }
        return(null);
    }