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; }
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); }
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(); }
public static void SelectAIGroup(AIClipGroup group) { if (selecteClipGroup != group) { selecteClipGroup = group; } selectedAiClip = null; mSelectedLink = null; }
public static void SelectAIDataUnit(UIAIDataUnit groupUI) { if (selectedUnit != groupUI) { selectedUnit = groupUI; selectedDataUnit = groupUI.aiData; } selectedAiClip = null; mSelectedLink = null; selecteClipGroup = null; }
public static void SelectAIClip(AIClip aiClip) { if (selectedAiClip != aiClip) { selectedAiClip = aiClip; //要保证选择AI片断后自动选择这个片断所在的AI组 selecteClipGroup = FindOwnerClipGroup(aiClip); mSelectedLink = null; selectedHitData = null; aiEvent = null; } }
/// <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; } } }
public static void SelectLinkClip(AILink link) { if (link != mSelectedLink) { if (selectedAiClip.linkAIClipList.Contains(link)) { mSelectedLink = link; } else { Debug.LogError("此片断不在选择片断的连接列表"); } } }
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(); } } }
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); }
public static void EditAILink(AIClipGroup clipGroup, AILink link) { AILinkEditWnd wnd = EditorWindow.GetWindow <AILinkEditWnd>(); wnd.SetData(clipGroup, link); }
public void SetData(AIClipGroup clipGroup, AILink link) { srcGroup = clipGroup; aiLink = link; }
public void UpdateLink(AILink link) { currentLink = link; currentLink.RestartLink(); }
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(); }
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(); } } }
public static bool IsSelectedLinkClip(AILink clip) { return(mSelectedLink != null && mSelectedLink == clip); }
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(); }
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(); }
public static bool IsSelectedLinkClip(AILink clip) { return mSelectedLink != null && mSelectedLink == clip; }