Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    //    [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 ();
    }
Exemplo n.º 3
0
//	[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();
    }
Exemplo n.º 4
0
    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();
    }
Exemplo n.º 5
0
    public virtual bool CheckConditionWrapper(CompositeConditionWrapper compositeConditionWrapper, AIBehavior behavior)
    {
        bool ret = false;

        ret = IsCompositeConditionMatched(compositeConditionWrapper.RootCompositeCondition,
                                          compositeConditionWrapper,
                                          behavior);
        return(ret);
    }
Exemplo n.º 6
0
    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);
    }
Exemplo n.º 7
0
    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);
    }
Exemplo n.º 8
0
    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;
        }
    }
Exemplo n.º 9
0
    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;
    }
Exemplo n.º 10
0
 public virtual bool CheckConditionWrapper(CompositeConditionWrapper compositeConditionWrapper,AIBehavior behavior)
 {
     bool ret = false;
     ret = IsCompositeConditionMatched(compositeConditionWrapper.RootCompositeCondition,
                                       compositeConditionWrapper,
                                       behavior);
     return ret;
 }
Exemplo n.º 11
0
    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 ();
    }
Exemplo n.º 13
0
 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;
 }
Exemplo n.º 14
0
 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));
 }
Exemplo n.º 15
0
    /// <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);
    }