示例#1
0
        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);
            }
        }
示例#2
0
    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);
            }
        }
    }
示例#3
0
 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);
     }
 }
示例#4
0
        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();
        }
示例#5
0
        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);
        }
示例#6
0
    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);
    }
示例#7
0
    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);
                    }
                }
            }
        }
    }
示例#8
0
        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();
        }