public static void CloneFrom(this SkillHsmConfigTransition self, SkillHsmConfigTransition transition) { self.TransitionId = transition.TransitionId; self.ToStateId = transition.ToStateId; for (int i = 0; i < transition.ParameterList.Count; ++i) { SkillHsmConfigHSMParameter parameter = transition.ParameterList[i]; self.ParameterList.Add(parameter.Clone()); } for (int i = 0; i < transition.GroupList.Count; ++i) { SkillHsmConfigTransitionGroup group = transition.GroupList[i]; SkillHsmConfigTransitionGroup clone = new SkillHsmConfigTransitionGroup(); clone.Index = group.Index; for (int j = 0; j < group.ParameterList.Count; ++j) { clone.ParameterList.Add(group.ParameterList[j]); } self.GroupList.Add(clone); } }
private void CheckTransition(SkillHsmConfigTransition transition) { for (int i = transition.GroupList.Count - 1; i >= 0; --i) { SkillHsmConfigTransitionGroup group = transition.GroupList[i]; bool validGroup = false; for (int j = group.ParameterList.Count - 1; j >= 0; --j) { string parameter = group.ParameterList[j]; SkillHsmConfigHSMParameter hSMParameter = transition.ParameterList.Find(a => (a.ParameterName.CompareTo(parameter) == 0)); if (null == hSMParameter) { group.ParameterList.RemoveAt(j); Debug.LogError("group ParameterList remove :" + parameter); } else { validGroup = true; } } if (!validGroup) { transition.GroupList.RemoveAt(i); Debug.LogError("RemoveGroup :" + group.Index); } } }
public void SetGroup(SkillHsmConfigTransition transition) { for (int i = 0; i < transition.GroupList.Count; ++i) { SkillHsmConfigTransitionGroup transitionGroup = transition.GroupList[i]; TransitionGroupParameter group = GetParameter(transitionGroup, transition.ParameterList); groupList.Add(group); } }
private void DrawTransitionParameter(SkillHsmConfigNodeData nodeData, SkillHsmConfigTransition transition, string title) { EditorGUILayout.BeginVertical("box"); { if (null != transition) { SkillHsmConfigNodeData toNode = HSMManager.Instance.GetNode(transition.ToStateId); string toNodeDescript = (null != toNode) ? toNode.Descript : string.Empty; string msg = string.Format("节点{0} -> 节点{1}", nodeData.Id, transition.ToStateId); EditorGUILayout.LabelField(msg); } } EditorGUILayout.EndVertical(); int transitionId = (null != transition) ? transition.TransitionId : -1; List <SkillHsmConfigHSMParameter> parametersList = (null != transition) ? transition.ParameterList : new List <SkillHsmConfigHSMParameter>(); Action <SkillHsmConfigHSMParameter> DelCallBack = (hSMParameter) => { if (null != HSMManager.hSMNodeAddDelParameter) { HSMManager.hSMNodeAddDelParameter(nodeData.Id, transitionId, hSMParameter, false); } }; Action <string> ChangeParameter = (parameterName) => { if (null != HSMManager.hSMNodeChangeParameter) { HSMManager.hSMNodeChangeParameter(nodeData.Id, transitionId, parameterName); } }; SkillHsmConfigTransitionGroup group = null; EditorGUILayout.BeginVertical("box"); { group = HSMTransitionGroup.DrawTransitionGroup(nodeData, transition); DrawTransitionAddGroup(nodeData, transitionId); } EditorGUILayout.EndVertical(); for (int i = 0; i < parametersList.Count; ++i) { parametersList[i].Index = i; } DrawParameter(nodeData, parametersList, DelCallBack, ChangeParameter, group); GUILayout.Space(10); EditorGUILayout.BeginVertical("box"); { DrawTransitionAddParameter(nodeData, transitionId); } EditorGUILayout.EndVertical(); }
public static SkillHsmConfigHSMTreeData UpdateData(SkillHsmConfigHSMTreeData skillHsmData) { HashSet <string> useParameter = new HashSet <string>(); for (int i = 0; i < skillHsmData.NodeList.Count; ++i) { SkillHsmConfigNodeData nodeData = skillHsmData.NodeList[i]; for (int j = 0; j < nodeData.TransitionList.Count; ++j) { SkillHsmConfigTransition transition = nodeData.TransitionList[j]; for (int k = 0; k < transition.GroupList.Count; ++k) { SkillHsmConfigTransitionGroup transitionGroup = transition.GroupList[k]; for (int n = 0; n < transitionGroup.ParameterList.Count; ++n) { string parameter = transitionGroup.ParameterList[n]; if (!useParameter.Contains(parameter)) { useParameter.Add(parameter); } if (parameter.CompareTo("ForcedAbortSkill") == 0) { Debug.LogError(skillHsmData.FileName + " ForcedAbortSkill:" + nodeData.Id + " " + transition.ToStateId); } if (parameter.CompareTo("ForcedAbortSkillToFish") == 0) { Debug.LogError(skillHsmData.FileName + " ForcedAbortSkillToFish:" + nodeData.Id + " " + transition.ToStateId); } } } } } for (int k = skillHsmData.ParameterList.Count - 1; k >= 0; --k) { SkillHsmConfigHSMParameter parameter = skillHsmData.ParameterList[k]; if (!useParameter.Contains(parameter.ParameterName)) { Debug.LogError(skillHsmData.FileName + " " + parameter.ParameterName + " " + parameter.CNName); skillHsmData.ParameterList.RemoveAt(k); } } return(skillHsmData); }
private TransitionGroupParameter GetParameter(SkillHsmConfigTransitionGroup transitionGroup, List <SkillHsmConfigHSMParameter> parameterList) { TransitionGroupParameter group = new TransitionGroupParameter(); for (int i = 0; i < transitionGroup.ParameterList.Count; ++i) { string parameter = transitionGroup.ParameterList[i]; for (int j = 0; j < parameterList.Count; ++j) { if (parameter.CompareTo(parameterList[j].ParameterName) == 0) { group.parameterList.Add(parameterList[j]); } } } return(group); }
private void NodeTransitionAddDelGroup(int stateId, int transitionId, int groupId, bool isAdd) { SkillHsmConfigNodeData nodeValue = GetNode(stateId); if (null == nodeValue) { return; } if (isAdd) { for (int i = 0; i < nodeValue.TransitionList.Count; ++i) { SkillHsmConfigTransition transition = null; if (nodeValue.TransitionList[i].TransitionId != transitionId) { continue; } transition = nodeValue.TransitionList[i]; for (int j = 0; j < transition.GroupList.Count + 1; ++j) { SkillHsmConfigTransitionGroup transitionGroup = transition.GroupList.Find(a => a.Index == j); if (null == transitionGroup) { transitionGroup = new SkillHsmConfigTransitionGroup(); transitionGroup.Index = j; transition.GroupList.Add(transitionGroup); break; } } if (transition.GroupList.Count <= 0) { SkillHsmConfigTransitionGroup transitionGroup = new SkillHsmConfigTransitionGroup(); transitionGroup.Index = 0; transition.GroupList.Add(transitionGroup); } } } else { for (int i = 0; i < nodeValue.TransitionList.Count; ++i) { SkillHsmConfigTransition transition = null; if (nodeValue.TransitionList[i].TransitionId != transitionId) { continue; } transition = nodeValue.TransitionList[i]; for (int j = 0; j < transition.GroupList.Count; ++j) { if (transition.GroupList[j].Index == groupId) { transition.GroupList.RemoveAt(j); } } } } }
private void DrawParameter(SkillHsmConfigNodeData nodeData, List <SkillHsmConfigHSMParameter> parametersList, Action <SkillHsmConfigHSMParameter> delCallBack, Action <string> ChangeParameter, SkillHsmConfigTransitionGroup group) { EditorGUILayout.BeginVertical("box", GUILayout.ExpandWidth(true)); { int height = 0; for (int i = 0; i < parametersList.Count; ++i) { SkillHsmConfigHSMParameter parameter = parametersList[i]; height += 50; } height = height <= 300 ? height : 300; scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Height(height)); { for (int i = 0; i < parametersList.Count; ++i) { SkillHsmConfigHSMParameter hSMParameter = parametersList[i]; Action DelCallBack = () => { if (null != delCallBack) { delCallBack(hSMParameter); } }; Color color = Color.white; if (null != group) { string name = group.ParameterList.Find(a => (a.CompareTo(hSMParameter.ParameterName) == 0)); if (!string.IsNullOrEmpty(name)) { color = colorArr[0]; } } GUI.backgroundColor = color; // new Color(0.85f, 0.85f, 0.85f, 1f); EditorGUILayout.BeginVertical("box"); { string parameterName = hSMParameter.ParameterName; SkillHsmConfigHSMParameter tempParameter = hSMParameter.Clone(); tempParameter = HSMDrawParameter.Draw(hSMParameter, HSMDrawParameterType.NODE_PARAMETER, DelCallBack); if (parameterName.CompareTo(hSMParameter.ParameterName) != 0) { if (null != ChangeParameter) { ChangeParameter(hSMParameter.ParameterName); } } else { hSMParameter.CloneFrom(tempParameter); } } EditorGUILayout.EndVertical(); GUILayout.Space(5); GUI.backgroundColor = Color.white; } } EditorGUILayout.EndScrollView(); } EditorGUILayout.EndVertical(); }