Esempio n. 1
0
    public static bool IsLinkConditionCheck(AILink link,AIUnit linkSrc)
    {
        for (int i = 0; i < link.linkConditionList.Count; i++)
        {
            AILinkCondiction con = link.linkConditionList[i];
            if (con is AiInputCondiction)
            {
                AiInputCondiction input = con as AiInputCondiction;
                if (!CheckInputCondition(input)) return false;
            }
            else if (con is AiTargetStateCondiction)
            {
                AiTargetStateCondiction targetState = con as AiTargetStateCondiction;
                if (!CheckTargetState(targetState, linkSrc))
                {
                    return false;
                }
            }
            else
            {
                Debug.LogError("Not implemented link condition");
            }
        }

        return true;
    }
Esempio n. 2
0
    public static bool IsLinkConditionCheck(AILink link, AIUnit linkSrc)
    {
        for (int i = 0; i < link.linkConditionList.Count; i++)
        {
            AILinkCondiction con = link.linkConditionList[i];
            if (con is AiInputCondiction)
            {
                AiInputCondiction input = con as AiInputCondiction;
                if (!CheckInputCondition(input))
                {
                    return(false);
                }
            }
            else if (con is AiTargetStateCondiction)
            {
                AiTargetStateCondiction targetState = con as AiTargetStateCondiction;
                if (!CheckTargetState(targetState, linkSrc))
                {
                    return(false);
                }
            }
            else
            {
                Debug.LogError("Not implemented link condition");
            }
        }

        return(true);
    }
Esempio n. 3
0
    public static void  DrawAiLinkPopup(AIClipGroup clipGroup, AILink link)
    {
        if (clipGroup == null)
        {
            GUILayout.Label("Ai组为空");
            return;
        }
        if (clipGroup.aiClipList.Count == 0)
        {
            GUILayout.Label("片断列表为空");
            return;
        }

        GUILayout.BeginHorizontal();
        GUILayout.Label("连接动画名", GUILayout.Width(70));
        string[] optionClips = new string[clipGroup.aiClipList.Count];
        for (int i = 0; i < optionClips.Length; i++)
        {
            optionClips[i] = clipGroup.aiClipList[i].NameOnUI;
        }
        int curSelectIndex = clipGroup.aiClipList.FindIndex(delegate(AIClip targetClip)
        {
            return(targetClip.clipKey == link.linkToClip);
        });

        if (curSelectIndex < 0)
        {
            curSelectIndex = 0;
        }

        curSelectIndex  = EditorGUILayout.Popup(curSelectIndex, optionClips); //最终的选择
        link.linkToClip = clipGroup.aiClipList[curSelectIndex].clipKey;

        GUILayout.EndHorizontal();
    }
Esempio n. 4
0
 public static void SelectAIGroup(AIClipGroup group)
 {
     if (selecteClipGroup != group)
     {
         selecteClipGroup = group;
     }
     selectedAiClip = null;
     mSelectedLink  = null;
 }
Esempio n. 5
0
 public static void SelectAIDataUnit(UIAIDataUnit groupUI)
 {
     if (selectedUnit != groupUI)
     {
         selectedUnit     = groupUI;
         selectedDataUnit = groupUI.aiData;
     }
     selectedAiClip   = null;
     mSelectedLink    = null;
     selecteClipGroup = null;
 }
Esempio n. 6
0
 public static void SelectAIClip(AIClip aiClip)
 {
     if (selectedAiClip != aiClip)
     {
         selectedAiClip = aiClip;
         //要保证选择AI片断后自动选择这个片断所在的AI组
         selecteClipGroup = FindOwnerClipGroup(aiClip);
         mSelectedLink    = null;
         selectedHitData  = null;
         aiEvent          = null;
     }
 }
Esempio n. 7
0
 /// <summary>
 /// 检测是否可以连接到其他的片断
 /// </summary>
 public void CheckLinkClips()
 {
     for (int i = 0; i < mCurAIClip.linkAIClipList.Count; i++)
     {
         AILink link = mCurAIClip.linkAIClipList[i];
         if (AILinkHelper.IsLinkConditionCheck(link, this))
         {
             SwitchAIClipByClipKey(link.linkToClip, link.crossFadeTime);
             break;
         }
     }
 }
Esempio n. 8
0
 public static void SelectLinkClip(AILink link)
 {
     if (link != mSelectedLink)
     {
         if (selectedAiClip.linkAIClipList.Contains(link))
         {
             mSelectedLink = link;
         }
         else
         {
             Debug.LogError("此片断不在选择片断的连接列表");
         }
     }
 }
Esempio n. 9
0
    public static void DrawAiLinkConditions(AILink link)
    {
        List <AILinkCondiction> conditionList = link.linkConditionList;

        GUILayout.Label("连接条件:", GUILayout.Width(200));
        if (GUILayout.Button("添加条件", GUILayout.Width(80)))
        {
            AILinkCondictionSelectWnd wnd = EditorWindow.GetWindow <AILinkCondictionSelectWnd>();
            wnd.onSelect = delegate(AILinkCondiction con)
            {
                conditionList.Add(con);
                EditorWindow.GetWindow <AIDataEditor>().Repaint();
            };
        }
        if (conditionList.Count == 0) //
        {
            GUILayout.Label("条件列表为空");
        }
        else
        {
            link.checkAllCondition = GUILayout.Toggle(link.checkAllCondition, "检查全部条件", GUILayout.Width(100));
            foreach (AILinkCondiction condition in conditionList)
            {
                // GUILayout.Label("__________________");
                if (condition is AiInputCondiction) //这个基类怎么转成子类?
                {
                    DrawLinkConditon(condition as AiInputCondiction);
                }
                else if (condition is AiVarCondiction)
                {
                    DrawLinkConditon(condition as AiVarCondiction);
                }
                else if (condition is AiTargetStateCondiction)
                {
                    DrawLinkConditon(condition as AiTargetStateCondiction);
                }
                else
                {
                    Debug.LogError("未实现的变量类型" + condition);
                }
                EditorGUILayout.Separator();
            }
        }
    }
Esempio n. 10
0
 public override void _Ready()
 {
     if (kinBodyNum >= 0)
     {
         body = GetChild <KinematicBody>(kinBodyNum);
     }
     if (animChildNum >= 0)
     {
         animation        = GetChild <AnimationTree>(animChildNum);
         animation.Active = true;
     }
     if (healthChildNum >= 0)
     {
         health = GetChild <HealthKinematic>(healthChildNum);
         health.Init(healthStart);
     }
     currentLink = (AILink)startLink;
     currentLink.AssignController(this);
     currentLink.StartingLink();
     EmitSignal(nameof(StartUpCreature), this);
 }
Esempio n. 11
0
 public static void SelectAIClip(AIClip aiClip)
 {
     if (selectedAiClip != aiClip)
     {
         selectedAiClip = aiClip;
         //要保证选择AI片断后自动选择这个片断所在的AI组
         selecteClipGroup = FindOwnerClipGroup(aiClip);
         mSelectedLink = null;
         selectedHitData = null;
         aiEvent = null;
     }
 }
Esempio n. 12
0
    public static void EditAILink(AIClipGroup clipGroup, AILink link)
    {
        AILinkEditWnd wnd = EditorWindow.GetWindow <AILinkEditWnd>();

        wnd.SetData(clipGroup, link);
    }
Esempio n. 13
0
 public void SetData(AIClipGroup clipGroup, AILink link)
 {
     srcGroup = clipGroup;
     aiLink   = link;
 }
Esempio n. 14
0
 public void UpdateLink(AILink link)
 {
     currentLink = link;
     currentLink.RestartLink();
 }
Esempio n. 15
0
    public static void DrawAiLinkPopup(AIClipGroup clipGroup, AILink link)
    {
        if (clipGroup == null)
        {
            GUILayout.Label("Ai组为空");
            return;
        }
        if (clipGroup.aiClipList.Count == 0)
        {
            GUILayout.Label("片断列表为空");
            return ;
        }

        GUILayout.BeginHorizontal();
        GUILayout.Label("连接动画名", GUILayout.Width(70));
        string[] optionClips =new string[clipGroup.aiClipList.Count];
        for (int i = 0; i < optionClips.Length; i++)
        {
            optionClips[i] = clipGroup.aiClipList[i].NameOnUI;
        }
        int curSelectIndex = clipGroup.aiClipList.FindIndex(delegate(AIClip targetClip)
        {
            return targetClip.clipKey == link.linkToClip;
        });
        if (curSelectIndex < 0)
            curSelectIndex = 0;

        curSelectIndex = EditorGUILayout.Popup(curSelectIndex, optionClips); //最终的选择
        link.linkToClip = clipGroup.aiClipList[curSelectIndex].clipKey;

        GUILayout.EndHorizontal();
    }
Esempio n. 16
0
    public static void DrawAiLinkConditions(AILink link)
    {
        List<AILinkCondiction> conditionList = link.linkConditionList;
        GUILayout.Label("连接条件:", GUILayout.Width(200));
        if (GUILayout.Button("添加条件", GUILayout.Width(80)))
        {
            AILinkCondictionSelectWnd wnd = EditorWindow.GetWindow<AILinkCondictionSelectWnd>();
            wnd.onSelect = delegate(AILinkCondiction con)
            {
                conditionList.Add(con);
                EditorWindow.GetWindow<AIDataEditor>().Repaint();
            };
        }
        if (conditionList.Count == 0) //
        {
            GUILayout.Label("条件列表为空");
        }
        else
        {
            link.checkAllCondition = GUILayout.Toggle(link.checkAllCondition, "检查全部条件", GUILayout.Width(100));
            foreach (AILinkCondiction condition in conditionList)
            {

               // GUILayout.Label("__________________");
                if (condition is AiInputCondiction) //这个基类怎么转成子类?
                {
                    DrawLinkConditon(condition as AiInputCondiction);
                }
                else if (condition is AiVarCondiction)
                {
                    DrawLinkConditon(condition as AiVarCondiction);
                }else if (condition is AiTargetStateCondiction)
                {
                    DrawLinkConditon(condition as AiTargetStateCondiction);

                }
                else
                {
                    Debug.LogError("未实现的变量类型" + condition);
                }
                EditorGUILayout.Separator();

            }
        }
    }
Esempio n. 17
0
 public static bool IsSelectedLinkClip(AILink clip)
 {
     return(mSelectedLink != null && mSelectedLink == clip);
 }
Esempio n. 18
0
    public static void SelectAIDataUnit(UIAIDataUnit groupUI)
    {
        if (selectedUnit != groupUI)
        {
            selectedUnit = groupUI;
            selectedDataUnit = groupUI.aiData;

        }
        selectedAiClip = null;
        mSelectedLink = null;
        selecteClipGroup = null;
    }
Esempio n. 19
0
    public static void SelectAIGroup(AIClipGroup group)
    {
        if (selecteClipGroup != group)
        {
            selecteClipGroup = group;

        }
        selectedAiClip = null;
        mSelectedLink = null;
    }
Esempio n. 20
0
    void DrawSelectedAiClipOrGroup()
    {
        GUILayout.BeginArea(new Rect(410,0, position.width*0.6f, position.height*0.9f));
        //selectionScrollPos = GUILayout.BeginScrollView(selectionScrollPos, true, true, GUILayout.Width(400), GUILayout.Height(position.height * 0.9f));

        GUILayout.Label("当前选中");
        AIClip selectedClip =AIDataSelection.selectedAiClip;
        AIClipGroup selectedGroup = AIDataSelection.selecteClipGroup;
        if (selectedClip != null)
        {
            AIFUIUtility.DrawAIClip(selectedClip,selectedGroup);
            GUILayout.BeginHorizontal();
            GUILayout.Label("连接片断列表:", GUILayout.Width(100));
            if (GUILayout.Button("添加连接", GUILayout.Width(100)))
            {
                AILink link = new AILink();
                selectedClip.linkAIClipList.Add(link);
                AILinkEditWnd wnd = EditorWindow.GetWindow<AILinkEditWnd>();
                wnd.SetData(AIDataSelection.selecteClipGroup,link);
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginArea(new Rect(250, 150, 500, 700));
            AIFUIUtility.DrawAiEvetList(selectedClip);
            GUILayout.EndArea();

            GUILayout.BeginArea(new Rect(450, 150, 500, 700));
            AIFUIUtility.DrawHitDefinitionList(selectedClip);
            GUILayout.EndArea();

            #region Links
            if (selectedClip.linkAIClipList.Count == 0)
            {
                GUILayout.Label("空列表", GUILayout.Width(300));
            }
            else
            {
                for (int i = 0; i < selectedClip.linkAIClipList.Count; i++)
                {
                    AILink ai = selectedClip.linkAIClipList[i];
                    GUILayout.BeginHorizontal();
                    //string fullClipName=
                    if (AIFUIUtility.LayoutButtonWithColor(ai.linkToClip, AIDataSelection.IsSelectedLinkClip(ai) ? Color.cyan : Color.magenta, 150))
                    {
                        AIDataSelection.SelectLinkClip(ai);
                        AILinkEditWnd.EditAILink(selectedGroup, ai);
                    }
                    if (GUILayout.Button("X", GUILayout.Width(20)))
                    {
                        if (EditorUtility.DisplayDialog("提示", "确定要删除连接吗", "确定"))
                        {
                            selectedClip.linkAIClipList.Remove(ai);
                            return;
                        }
                    }
                    GUILayout.EndHorizontal();
                }

                #region 绘制选择连接
                //AILink link = curSelection.SelectedLink;
                //if (link != null)
                //{
                //    GUILayout.BeginArea(new Rect(300, 50, 500, 700));
                //    link.linkToClip = AIFUIUtility.DrawTextField(link.linkToClip, "连接目标");
                //    conditionListPos = GUILayout.BeginScrollView(conditionListPos, true, true, GUILayout.Width(300), GUILayout.Height(position.height * 0.6f));
                //    AIFUIUtility.DrawAiLinkConditions(link);
                //    GUILayout.EndScrollView();
                //    GUILayout.EndArea();
                //}
                #endregion
            }
            #endregion

        }
        else  //没选中AI片断就检测时候在编辑AI组
        {
            if (AIDataSelection.selecteClipGroup != null)
            {
                AIClipGroup clipGroup = AIDataSelection.selecteClipGroup;
                clipGroup.name = EditorGUILayout.TextField("Ai组名称",clipGroup.name,GUILayout.Width(300));
                clipGroup.moveSpeed = EditorGUILayout.FloatField("移动速度", clipGroup.moveSpeed,GUILayout.Width(300));
                clipGroup.targetType = (ETargetType)EditorGUILayout.EnumPopup("目标类型", clipGroup.targetType,GUILayout.Width(300));
                AIFUIUtility.DrawAIShape(AIDataSelection.selecteClipGroup.shape);
                AIFUIUtility.DrawCommanAnimation(AIDataSelection.selecteClipGroup.commonAnimation, AIDataSelection.selecteClipGroup);
            }
            else if (AIDataSelection.selectedUnit != null)
            {
                AIDataSelection.selectedUnit.aiData.AiName = EditorGUILayout.TextField("AI单位名称",AIDataSelection.selectedUnit.aiData.AiName ,
                    GUILayout.Width(400));
                //
            }
        }

        //GUILayout.EndScrollView();
        GUILayout.EndArea();
    }
Esempio n. 21
0
    void DrawSelectedAiClipOrGroup()
    {
        GUILayout.BeginArea(new Rect(410, 0, position.width * 0.6f, position.height * 0.9f));
        //selectionScrollPos = GUILayout.BeginScrollView(selectionScrollPos, true, true, GUILayout.Width(400), GUILayout.Height(position.height * 0.9f));

        GUILayout.Label("当前选中");
        AIClip      selectedClip  = AIDataSelection.selectedAiClip;
        AIClipGroup selectedGroup = AIDataSelection.selecteClipGroup;

        if (selectedClip != null)
        {
            AIFUIUtility.DrawAIClip(selectedClip, selectedGroup);
            GUILayout.BeginHorizontal();
            GUILayout.Label("连接片断列表:", GUILayout.Width(100));
            if (GUILayout.Button("添加连接", GUILayout.Width(100)))
            {
                AILink link = new AILink();
                selectedClip.linkAIClipList.Add(link);
                AILinkEditWnd wnd = EditorWindow.GetWindow <AILinkEditWnd>();
                wnd.SetData(AIDataSelection.selecteClipGroup, link);
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginArea(new Rect(250, 150, 500, 700));
            AIFUIUtility.DrawAiEvetList(selectedClip);
            GUILayout.EndArea();

            GUILayout.BeginArea(new Rect(450, 150, 500, 700));
            AIFUIUtility.DrawHitDefinitionList(selectedClip);
            GUILayout.EndArea();

            #region Links
            if (selectedClip.linkAIClipList.Count == 0)
            {
                GUILayout.Label("空列表", GUILayout.Width(300));
            }
            else
            {
                for (int i = 0; i < selectedClip.linkAIClipList.Count; i++)
                {
                    AILink ai = selectedClip.linkAIClipList[i];
                    GUILayout.BeginHorizontal();
                    //string fullClipName=
                    if (AIFUIUtility.LayoutButtonWithColor(ai.linkToClip, AIDataSelection.IsSelectedLinkClip(ai) ? Color.cyan : Color.magenta, 150))
                    {
                        AIDataSelection.SelectLinkClip(ai);
                        AILinkEditWnd.EditAILink(selectedGroup, ai);
                    }
                    if (GUILayout.Button("X", GUILayout.Width(20)))
                    {
                        if (EditorUtility.DisplayDialog("提示", "确定要删除连接吗", "确定"))
                        {
                            selectedClip.linkAIClipList.Remove(ai);
                            return;
                        }
                    }
                    GUILayout.EndHorizontal();
                }



                #region 绘制选择连接
                //AILink link = curSelection.SelectedLink;
                //if (link != null)
                //{
                //    GUILayout.BeginArea(new Rect(300, 50, 500, 700));
                //    link.linkToClip = AIFUIUtility.DrawTextField(link.linkToClip, "连接目标");
                //    conditionListPos = GUILayout.BeginScrollView(conditionListPos, true, true, GUILayout.Width(300), GUILayout.Height(position.height * 0.6f));
                //    AIFUIUtility.DrawAiLinkConditions(link);
                //    GUILayout.EndScrollView();
                //    GUILayout.EndArea();
                //}
                #endregion
            }
            #endregion
        }
        else  //没选中AI片断就检测时候在编辑AI组
        {
            if (AIDataSelection.selecteClipGroup != null)
            {
                AIClipGroup clipGroup = AIDataSelection.selecteClipGroup;
                clipGroup.name       = EditorGUILayout.TextField("Ai组名称", clipGroup.name, GUILayout.Width(300));
                clipGroup.moveSpeed  = EditorGUILayout.FloatField("移动速度", clipGroup.moveSpeed, GUILayout.Width(300));
                clipGroup.targetType = (ETargetType)EditorGUILayout.EnumPopup("目标类型", clipGroup.targetType, GUILayout.Width(300));
                AIFUIUtility.DrawAIShape(AIDataSelection.selecteClipGroup.shape);
                AIFUIUtility.DrawCommanAnimation(AIDataSelection.selecteClipGroup.commonAnimation, AIDataSelection.selecteClipGroup);
            }
            else if (AIDataSelection.selectedUnit != null)
            {
                AIDataSelection.selectedUnit.aiData.AiName = EditorGUILayout.TextField("AI单位名称", AIDataSelection.selectedUnit.aiData.AiName,
                                                                                       GUILayout.Width(400));
                //
            }
        }


        //GUILayout.EndScrollView();
        GUILayout.EndArea();
    }
Esempio n. 22
0
 public static bool IsSelectedLinkClip(AILink clip)
 {
     return mSelectedLink != null && mSelectedLink == clip;
 }
Esempio n. 23
0
 public static void SelectLinkClip(AILink link)
 {
     if (link != mSelectedLink)
     {
         if (selectedAiClip.linkAIClipList.Contains(link))
         {
             mSelectedLink = link;
         }
         else
         {
             Debug.LogError("此片断不在选择片断的连接列表");
         }
     }
 }