public virtual bool IsCompositeConditionMatched(CompositeCondition compositeCondition, CompositeConditionWrapper compositeConditionWrapper, AIBehavior behavior) { bool ret = false; switch (compositeCondition.Operator) { case LogicConjunction.None: ret = IsConditionEntityMatched(compositeCondition.Entity1, compositeConditionWrapper, behavior); break; case LogicConjunction.And: ret = IsConditionEntityMatched(compositeCondition.Entity1, compositeConditionWrapper, behavior); if (ret) { ret = IsConditionEntityMatched(compositeCondition.Entity2, compositeConditionWrapper, behavior); } break; case LogicConjunction.Or: ret = IsConditionEntityMatched(compositeCondition.Entity1, compositeConditionWrapper, behavior); if (ret == false) { ret = IsConditionEntityMatched(compositeCondition.Entity2, compositeConditionWrapper, behavior); } break; } return(ret); }
// [MenuItem("Component/AI/EditCondition")] // public static void init () // { // ConditionEditorWindow window = (ConditionEditorWindow)EditorWindow.GetWindow (typeof(ConditionEditorWindow)); // window.title = "Root composite condition"; // } public static void DisplayConditionEditorWindow(AIEditor aiEditor, CompositeConditionWrapper compositionConditionWrapper) { ConditionEditorWindow window = (ConditionEditorWindow)EditorWindow.GetWindow (typeof(ConditionEditorWindow)); window.compositionConditionWrapper = compositionConditionWrapper; window.aiEditor = aiEditor; window.Show (); }
// [MenuItem("Component/AI/EditCondition")] // public static void init () // { // ConditionEditorWindow window = (ConditionEditorWindow)EditorWindow.GetWindow (typeof(ConditionEditorWindow)); // window.title = "Root composite condition"; // } public static void DisplayConditionEditorWindow(AIEditor aiEditor, CompositeConditionWrapper compositionConditionWrapper) { ConditionEditorWindow window = (ConditionEditorWindow)EditorWindow.GetWindow(typeof(ConditionEditorWindow)); window.compositionConditionWrapper = compositionConditionWrapper; window.aiEditor = aiEditor; window.Show(); }
void EditConditionWrapper(CompositeConditionWrapper compositionConditionWrapper) { //Edit Atom condition EnableEditAtomCondition = EditorGUILayout.BeginToggleGroup("Edit atom condition", EnableEditAtomCondition); if (EnableEditAtomCondition) { if (GUILayout.Button("Add atom condition")) { AtomConditionData atomCondition = new AtomConditionData(); compositionConditionWrapper.atomConditionDataArray = Util.AddToArray <AtomConditionData> (atomCondition, compositionConditionWrapper.atomConditionDataArray); } foreach (AtomConditionData atomCondition in compositionConditionWrapper.atomConditionDataArray) { this.aiEditor.EditAtomConditionData(atomCondition); if (GUILayout.Button("Delete atom condition:" + atomCondition.Id)) { compositionConditionWrapper.atomConditionDataArray = Util.CloneExcept <AtomConditionData> (compositionConditionWrapper.atomConditionDataArray, atomCondition); } EditorGUILayout.Space(); EditorGUILayout.Space(); } } EditorGUILayout.EndToggleGroup(); //Edit composite condition EnableEditCompositeCondition = EditorGUILayout.BeginToggleGroup("Edit composite condition", EnableEditCompositeCondition); if (EnableEditCompositeCondition) { if (GUILayout.Button("Add composite condition")) { CompositeCondition compositeCondition = new CompositeCondition(); compositionConditionWrapper.CompositeConditionArray = Util.AddToArray <CompositeCondition> (compositeCondition, compositionConditionWrapper.CompositeConditionArray); } foreach (CompositeCondition compositeCondition in compositionConditionWrapper.CompositeConditionArray) { this.aiEditor.EditCompositeCondition(compositeCondition, compositionConditionWrapper); if (GUILayout.Button("Delete composite condition:" + compositeCondition.Id)) { compositionConditionWrapper.CompositeConditionArray = Util.CloneExcept <CompositeCondition> (compositionConditionWrapper.CompositeConditionArray, compositeCondition); } EditorGUILayout.Space(); EditorGUILayout.Space(); } } EditorGUILayout.EndToggleGroup(); //Edit root composite condition EnableEditRootCompositeCondition = EditorGUILayout.BeginToggleGroup("Edit root composite condition", EnableEditRootCompositeCondition); if (EnableEditRootCompositeCondition) { this.aiEditor.EditCompositeCondition(compositionConditionWrapper.RootCompositeCondition, compositionConditionWrapper); } EditorGUILayout.EndToggleGroup(); }
public virtual bool CheckConditionWrapper(CompositeConditionWrapper compositeConditionWrapper, AIBehavior behavior) { bool ret = false; ret = IsCompositeConditionMatched(compositeConditionWrapper.RootCompositeCondition, compositeConditionWrapper, behavior); return(ret); }
public CompositeConditionWrapper GetClone() { CompositeConditionWrapper clone = new CompositeConditionWrapper(); clone.RootCompositeCondition = this.RootCompositeCondition.GetClone(); foreach (CompositeCondition compositeCondition in this.CompositeConditionArray) { CompositeCondition cloneCompositiobCondition = compositeCondition.GetClone(); clone.CompositeConditionArray = Util.AddToArray <CompositeCondition>(cloneCompositiobCondition, clone.CompositeConditionArray); } foreach (AtomConditionData atomCondition in this.atomConditionDataArray) { AtomConditionData cloneAtomCondition = atomCondition.GetClone(); clone.atomConditionDataArray = Util.AddToArray <AtomConditionData>(cloneAtomCondition, clone.atomConditionDataArray); } return(clone); }
private bool IsConditionEntityMatched(ConditionEntity conditionEntity, CompositeConditionWrapper compositeConditionWrapper, AIBehavior behavior) { bool ret = false; switch (conditionEntity.EntityType) { case ConditionEntityType.AtomCondition: AtomConditionData atomCondition = compositeConditionWrapper.AtomConditionDataDict[conditionEntity.EntityReferenceId]; ret = CheckAtomCondition(atomCondition, behavior); break; case ConditionEntityType.ReferenceToComposite: CompositeCondition compositeCondition = compositeConditionWrapper.CompositeConditionDict[conditionEntity.EntityReferenceId]; ret = IsCompositeConditionMatched(compositeCondition, compositeConditionWrapper, behavior); break; } return(ret); }
public virtual void EditCompositeConditionEntity(string Label, ConditionEntity entity, CompositeConditionWrapper compositionConditionWrapper) { EditorGUILayout.LabelField(Label); entity.EntityType = (ConditionEntityType)EditorGUILayout.EnumPopup(new GUIContent("Entity type ", ""), entity.EntityType); string label = ""; switch (entity.EntityType) { case ConditionEntityType.AtomCondition: label = "Choose one of atom condition id:"; entity.EntityReferenceId = EditorCommon.EditPopup(label, entity.EntityReferenceId, compositionConditionWrapper.atomConditionDataArray.Select(x => x.Id).ToArray()); break; case ConditionEntityType.ReferenceToComposite: label = "Choose one of composite condition id:"; entity.EntityReferenceId = EditorCommon.EditPopup(label, entity.EntityReferenceId, compositionConditionWrapper.CompositeConditionArray.Select(x => x.Id).ToArray()); break; } }
public virtual bool IsCompositeConditionMatched(CompositeCondition compositeCondition, CompositeConditionWrapper compositeConditionWrapper, AIBehavior behavior) { bool ret = false; switch(compositeCondition.Operator) { case LogicConjunction.None: ret = IsConditionEntityMatched(compositeCondition.Entity1,compositeConditionWrapper,behavior); break; case LogicConjunction.And: ret = IsConditionEntityMatched(compositeCondition.Entity1,compositeConditionWrapper,behavior); if(ret) ret = IsConditionEntityMatched(compositeCondition.Entity2,compositeConditionWrapper,behavior); break; case LogicConjunction.Or: ret = IsConditionEntityMatched(compositeCondition.Entity1,compositeConditionWrapper,behavior); if(ret == false) ret = IsConditionEntityMatched(compositeCondition.Entity2,compositeConditionWrapper,behavior); break; } return ret; }
public virtual bool CheckConditionWrapper(CompositeConditionWrapper compositeConditionWrapper,AIBehavior behavior) { bool ret = false; ret = IsCompositeConditionMatched(compositeConditionWrapper.RootCompositeCondition, compositeConditionWrapper, behavior); return ret; }
private bool IsConditionEntityMatched(ConditionEntity conditionEntity, CompositeConditionWrapper compositeConditionWrapper, AIBehavior behavior) { bool ret = false; switch(conditionEntity.EntityType) { case ConditionEntityType.AtomCondition: AtomConditionData atomCondition = compositeConditionWrapper.AtomConditionDataDict[conditionEntity.EntityReferenceId]; ret = CheckAtomCondition(atomCondition, behavior); break; case ConditionEntityType.ReferenceToComposite: CompositeCondition compositeCondition = compositeConditionWrapper.CompositeConditionDict[conditionEntity.EntityReferenceId]; ret = IsCompositeConditionMatched(compositeCondition, compositeConditionWrapper, behavior); break; } return ret; }
void EditConditionWrapper(CompositeConditionWrapper compositionConditionWrapper) { //Edit Atom condition EnableEditAtomCondition = EditorGUILayout.BeginToggleGroup ("Edit atom condition", EnableEditAtomCondition); if (EnableEditAtomCondition) { if (GUILayout.Button ("Add atom condition")) { AtomConditionData atomCondition = new AtomConditionData (); compositionConditionWrapper.atomConditionDataArray = Util.AddToArray<AtomConditionData> (atomCondition, compositionConditionWrapper.atomConditionDataArray); } foreach (AtomConditionData atomCondition in compositionConditionWrapper.atomConditionDataArray) { this.aiEditor.EditAtomConditionData (atomCondition); if (GUILayout.Button ("Delete atom condition:" + atomCondition.Id)) { compositionConditionWrapper.atomConditionDataArray = Util.CloneExcept<AtomConditionData> (compositionConditionWrapper.atomConditionDataArray, atomCondition); } EditorGUILayout.Space (); EditorGUILayout.Space (); } } EditorGUILayout.EndToggleGroup (); //Edit composite condition EnableEditCompositeCondition = EditorGUILayout.BeginToggleGroup ("Edit composite condition", EnableEditCompositeCondition); if (EnableEditCompositeCondition) { if (GUILayout.Button ("Add composite condition")) { CompositeCondition compositeCondition = new CompositeCondition (); compositionConditionWrapper.CompositeConditionArray = Util.AddToArray<CompositeCondition> (compositeCondition, compositionConditionWrapper.CompositeConditionArray); } foreach (CompositeCondition compositeCondition in compositionConditionWrapper.CompositeConditionArray) { this.aiEditor.EditCompositeCondition (compositeCondition, compositionConditionWrapper); if (GUILayout.Button ("Delete composite condition:" + compositeCondition.Id)) { compositionConditionWrapper.CompositeConditionArray = Util.CloneExcept<CompositeCondition> (compositionConditionWrapper.CompositeConditionArray, compositeCondition); } EditorGUILayout.Space (); EditorGUILayout.Space (); } } EditorGUILayout.EndToggleGroup (); //Edit root composite condition EnableEditRootCompositeCondition = EditorGUILayout.BeginToggleGroup ("Edit root composite condition", EnableEditRootCompositeCondition); if (EnableEditRootCompositeCondition) { this.aiEditor.EditCompositeCondition (compositionConditionWrapper.RootCompositeCondition, compositionConditionWrapper); } EditorGUILayout.EndToggleGroup (); }
public CompositeConditionWrapper GetClone() { CompositeConditionWrapper clone = new CompositeConditionWrapper(); clone.RootCompositeCondition = this.RootCompositeCondition.GetClone(); foreach(CompositeCondition compositeCondition in this.CompositeConditionArray) { CompositeCondition cloneCompositiobCondition = compositeCondition.GetClone(); clone.CompositeConditionArray = Util.AddToArray<CompositeCondition>(cloneCompositiobCondition, clone.CompositeConditionArray); } foreach(AtomConditionData atomCondition in this.atomConditionDataArray) { AtomConditionData cloneAtomCondition = atomCondition.GetClone(); clone.atomConditionDataArray = Util.AddToArray<AtomConditionData>(cloneAtomCondition, clone.atomConditionDataArray); } return clone; }
public virtual void EditCompositeCondition(CompositeCondition compositeCondition, CompositeConditionWrapper conditionWrapper) { EditorGUILayout.LabelField(" -------------- Composite condition:" + compositeCondition.Id + " ------------ "); compositeCondition.Id = EditorGUILayout.TextField("Id:", compositeCondition.Id); compositeCondition.Operator = (LogicConjunction)EditorGUILayout.EnumPopup(new GUIContent("Operator ", ""), compositeCondition.Operator); if (compositeCondition.Operator == LogicConjunction.None) { EditCompositeConditionEntity("Entity 1:", compositeCondition.Entity1, conditionWrapper); } else { EditCompositeConditionEntity("Entity 1:", compositeCondition.Entity1, conditionWrapper); EditCompositeConditionEntity("Entity 2:", compositeCondition.Entity2, conditionWrapper); } EditorGUILayout.LabelField("Condition description:"); EditorGUILayout.LabelField(GetCompositeConditionDescription(compositeCondition, conditionWrapper)); }
/// <summary> /// Composites the condition to string description. /// </summary> public string GetCompositeConditionDescription(CompositeCondition compositeCondition, CompositeConditionWrapper compositeConditionWrapper) { string LeftEntityDescription = ""; string RightEntityDescription = ""; string refId = ""; switch (compositeCondition.Entity1.EntityType) { case ConditionEntityType.AtomCondition: refId = compositeCondition.Entity1.EntityReferenceId; IEnumerable <AtomConditionData> AllAtomConditionData = compositeConditionWrapper.atomConditionDataArray.Where(x => x.Id == refId); if (AllAtomConditionData.Count() > 0) { AtomConditionData atomCondition = AllAtomConditionData.First(); LeftEntityDescription = atomCondition.GetDescription(); } break; case ConditionEntityType.ReferenceToComposite: refId = compositeCondition.Entity1.EntityReferenceId; IEnumerable <CompositeCondition> AllCompositeConditionData = compositeConditionWrapper.CompositeConditionArray.Where(x => x.Id == refId); if (AllCompositeConditionData.Count() > 0) { CompositeCondition referComposite = AllCompositeConditionData.Where(x => x.Id == refId).First(); if (referComposite == compositeCondition) { LeftEntityDescription = "Error !!! CompositeCondition - Id:" + compositeCondition.Id + " is referring to itself!"; } else { LeftEntityDescription = GetCompositeConditionDescription(referComposite, compositeConditionWrapper); } } break; } switch (compositeCondition.Entity2.EntityType) { case ConditionEntityType.AtomCondition: refId = compositeCondition.Entity2.EntityReferenceId; IEnumerable <AtomConditionData> AllAtomConditionData = compositeConditionWrapper.atomConditionDataArray.Where(x => x.Id == refId); if (AllAtomConditionData.Count() > 0) { AtomConditionData atomCondition = AllAtomConditionData.First(); RightEntityDescription = atomCondition.GetDescription(); } break; case ConditionEntityType.ReferenceToComposite: refId = compositeCondition.Entity2.EntityReferenceId; IEnumerable <CompositeCondition> AllCompositeConditionData = compositeConditionWrapper.CompositeConditionArray.Where(x => x.Id == refId); if (AllCompositeConditionData.Count() > 0) { CompositeCondition referComposite = AllCompositeConditionData.First(); if (referComposite == compositeCondition) { RightEntityDescription = "Error !!! CompositeCondition - Id:" + compositeCondition.Id + " is referring to itself!"; } else { RightEntityDescription = GetCompositeConditionDescription(referComposite, compositeConditionWrapper); } } break; } string ret = "({0} {1} {2})"; switch (compositeCondition.Operator) { case LogicConjunction.None: ret = string.Format(ret, LeftEntityDescription, "", ""); break; case LogicConjunction.And: case LogicConjunction.Or: ret = string.Format(ret, LeftEntityDescription, compositeCondition.Operator.ToString(), RightEntityDescription); break; } return(ret); }