/// <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); }
/// <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); }
/// <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); }
/// <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); }
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); }
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); }