Exemple #1
0
        static List <string> GuestListModifier(List <string> guests, string[] input, Predicate <string> condition)
        {
            List <string> modified = new List <string>();
            string        command  = input[0];

            switch (command)
            {
            case "Remove":
                foreach (var item in guests)
                {
                    if (!ConditionPredicate(input)(item))
                    {
                        modified.Add(item);
                    }
                }
                return(modified);

            case "Double":
                foreach (var item in guests)
                {
                    modified.Add(item);
                    if (ConditionPredicate(input)(item))
                    {
                        modified.Add(item);
                    }
                }
                return(modified);

            default:
                return(null);
            }
        }
Exemple #2
0
 public bool?Evaluate(ConditionPredicate predicate, List <string> parameters)
 {
     if (predicate != ConditionPredicate.HasItem)
     {
         return(null);
     }
     string[] parameterArray = parameters.ToArray();
     for (int i = 0; i < parameterArray.Length; i++)
     {
         int           slot;
         InventoryItem item = InventoryItem.GetFromID(parameterArray[i]);
         i++;
         if (HasItem(item, out slot))
         {
             if (GetCountInSlot(slot) < int.Parse(parameters[i]))
             {
                 return(false);
             }
         }
         else
         {
             return(false);
         }
     }
     return(true);
 }
Exemple #3
0
        protected override void DoRender(MachineInstructionRenderer renderer, MachineInstructionRendererOptions options)
        {
            if (ConditionPredicate != null)
            {
                renderer.WriteMnemonic("if");
                renderer.WriteString(" (");
                if (ConditionInverted)
                {
                    renderer.WriteChar('!');
                }
                ConditionPredicate.Render(renderer, options);
                if (ConditionPredicateNew)
                {
                    renderer.WriteString(".new");
                }
                renderer.WriteString(") ");
            }
            switch (Mnemonic)
            {
            case Mnemonic.ASSIGN:
                RenderOperand(Operands[0], renderer, options);
                renderer.WriteString(" = ");
                RenderOperand(Operands[1], renderer, options);
                break;

            case Mnemonic.ANDEQ:
                RenderOperand(Operands[0], renderer, options);
                renderer.WriteString(" &= ");
                RenderOperand(Operands[1], renderer, options);
                break;

            case Mnemonic.SUBEQ:
                RenderOperand(Operands[0], renderer, options);
                renderer.WriteString(" -= ");
                RenderOperand(Operands[1], renderer, options);
                break;

            case Mnemonic.OREQ:
                RenderOperand(Operands[0], renderer, options);
                renderer.WriteString(" |= ");
                RenderOperand(Operands[1], renderer, options);
                break;

            case Mnemonic.ADDEQ:
                RenderOperand(Operands[0], renderer, options);
                renderer.WriteString(" += ");
                RenderOperand(Operands[1], renderer, options);
                break;

            case Mnemonic.SIDEEFFECT:
                RenderOperand(Operands[0], renderer, options);
                break;

            default:
                RenderMnemonic(renderer, options);
                RenderOperands(renderer, options);
                break;
            }
        }
Exemple #4
0
            public void SetPredicate(ConditionPredicate newPredicate)
            {
                if (predicate != newPredicate)
                {
                    parameters.Clear();
                    predicate = newPredicate;

                    BuildBaseParameters();
                }
            }
Exemple #5
0
        public bool?Evaluate(ConditionPredicate predicate, List <string> parameters)
        {
            switch (predicate)
            {
            case ConditionPredicate.HasQuest:
                foreach (var parameter in parameters)
                {
                    if (!HasQuest(Quest.GetByName(parameter)))
                    {
                        return(false);
                    }
                }
                return(true);

            case ConditionPredicate.CompleteQuest:
                return(GetQuestStatus(Quest.GetByName(parameters[0])).IsComplete());

            case ConditionPredicate.CompleteObjective:
                QuestStatus status = GetQuestStatus(Quest.GetByName(parameters[0]));
                if (status != null)
                {
                    return(status.IsObjectiveComplete(parameters[1]));
                }
                return(null);
            }

            // if(predicate == ConditionPredicate.None) return null;
            // else if(predicate == ConditionPredicate.HasQuest)
            // {
            //     foreach (var parameter in parameters)
            //     {
            //         if(!HasQuest(Quest.GetByName(parameter))) return false;
            //     }
            //     return true;
            // }
            // else if(predicate == ConditionPredicate.CompleteQuest)
            // {
            //     return GetQuestStatus(Quest.GetByName(parameters[0])).IsComplete();
            // }
            // else if(predicate == ConditionPredicate.CompleteObjective)
            // {
            //     QuestStatus status = GetQuestStatus(Quest.GetByName(parameters[0]));
            //     if(status != null)
            //     {
            //         return status.IsObjectiveComplete(parameters[1]);
            //     }
            // }

            return(null);
        }
Exemple #6
0
    static IEnumerator GenericRoutine(ConditionPredicate ConditionToSatisfy, System.Action ActionUntilCondtionSatisfied, System.Action OnSatisfied)
    {
        while (!ConditionToSatisfy())
        {
            if (ActionUntilCondtionSatisfied != null)
            {
                ActionUntilCondtionSatisfied();
            }
            yield return(null);
        }

        if (OnSatisfied != null)
        {
            OnSatisfied();
        }
    }
        private static void LayoutConditionSelectionUI(DialogueNode node)
        {
            int conditionSize = node.GetConditionSize();

            for (int k = 0; k < conditionSize; k++)
            {
                bool foldout = node.GetFoldout(k);
                node.SetFold(EditorGUILayout.BeginFoldoutHeaderGroup(foldout, $"Condition Group {k}"), k);
                if (foldout)
                {
                    ConditionPredicate[] predicates = node.GetConditionPredicates(k).ToArray();
                    for (int i = 0; i < predicates.Length; i++)
                    {
                        GUILayout.BeginHorizontal();
                        EditorGUILayout.LabelField("Condition:", GUILayout.Width(60));
                        ConditionPredicate newPredicate = (ConditionPredicate)EditorGUILayout.EnumPopup(predicates[i]);
                        node.SetConditionPredicate(newPredicate, k, i);
                        if (GUILayout.Button("-"))
                        {
                            node.RemoveCondition(k, i);
                            conditionSize = node.GetConditionSize();
                        }
                        GUILayout.EndHorizontal();

                        List <string> parameterList = new List <string>();
                        int           removeCount   = 1;

                        if (newPredicate == ConditionPredicate.None)
                        {
                        }
                        else if (newPredicate == ConditionPredicate.HasQuest)
                        {
                            EditorQuestSelect(node, parameterList, k, i);
                        }
                        else if (newPredicate == ConditionPredicate.CompleteQuest)
                        {
                            EditorQuestSelect(node, parameterList, k, i);
                        }
                        else if (newPredicate == ConditionPredicate.CompleteObjective)
                        {
                            string[] objectiveList = node.GetParameters(k, i).ToArray();
                            if (objectiveList.Length > 0)
                            {
                                Quest questSelect = GenerateQuestSelect(objectiveList[0]);
                                if (questSelect != null)
                                {
                                    parameterList.Add(questSelect.name);
                                }
                                else
                                {
                                    parameterList.Add("");
                                }
                                for (int j = 1; j < objectiveList.Length; j++)
                                {
                                    GUILayout.BeginHorizontal();
                                    EditorGUILayout.LabelField("Objective:", GUILayout.Width(58));
                                    if (questSelect != null)
                                    {
                                        string[] questObjectives = questSelect.GetObjectives().ToArray();
                                        int      objectiveIndex  = EditorGUILayout.Popup(node.GetObjectiveIndex(k, i), questObjectives);
                                        node.SetObjectiveIndex(objectiveIndex, k, i);
                                        parameterList.Add(questObjectives[objectiveIndex]);
                                    }
                                    else
                                    {
                                        EditorGUILayout.Popup(0, new string[] { "" });
                                        parameterList.Add("");
                                    }
                                    GUILayout.EndHorizontal();
                                }
                            }
                        }
                        else if (newPredicate == ConditionPredicate.HasItem)
                        {
                            removeCount = 2;
                            string[] itemList = node.GetParameters(k, i).ToArray();
                            if (itemList.Length > 0)
                            {
                                for (int j = 0; j < itemList.Length; j++)
                                {
                                    InventoryItem item = InventoryItem.GetFromID(itemList[j]);
                                    item = GenerateItemSelect(item);
                                    j++;
                                    if (item != null)
                                    {
                                        parameterList.Add(item.GetItemID());
                                        if (j < itemList.Length)
                                        {
                                            parameterList.Add(GenerateItemCountField(itemList[j]).ToString());
                                        }
                                        else
                                        {
                                            parameterList.Add("");
                                        }
                                    }
                                    else
                                    {
                                        parameterList.Add("");
                                    }
                                }
                            }
                        }
                        GUILayout.BeginHorizontal();
                        if (GUILayout.Button("Add"))
                        {
                            parameterList.Add("");
                        }
                        if (GUILayout.Button("Remove"))
                        {
                            for (int j = 0; j < removeCount; j++)
                            {
                                parameterList.RemoveAt(parameterList.Count() - 1);
                            }
                        }
                        node.SetConditionNegate(EditorGUILayout.Toggle(node.GetConditionNegate(k, i)), k, i);
                        EditorGUILayout.LabelField("Negate", GUILayout.Width(74));
                        if (GUILayout.Button("New"))
                        {
                            node.AddNewCondition(k);
                        }
                        GUILayout.EndHorizontal();

                        node.SetConditionParameters(parameterList, k, i);
                    }
                }
                EditorGUILayout.EndFoldoutHeaderGroup();
            }
        }
Exemple #8
0
 public void SetConditionPredicate(ConditionPredicate newPredicate, int indexAnd, int indexOr)
 {
     Undo.RecordObject(this, "Change Condition Predicate");
     condition.SetPredicate(newPredicate, indexAnd, indexOr);
     EditorUtility.SetDirty(this);
 }
 public void AddCondition(ConditionPredicate <T> condition, LogicalOperation operation)
 {
     _conditions.Add(new RuleCondition <T>(condition, operation));
 }
Exemple #10
0
    public static Coroutine StartACoroutine(ConditionPredicate ConditionToSatisfy, System.Action ActionUntilCondtionSatisfied, System.Action OnSatisfied)
    {
        RequestInstanceCreation();

        return(Instance.StartCoroutine(GenericRoutine(ConditionToSatisfy, ActionUntilCondtionSatisfied, OnSatisfied)));
    }
Exemple #11
0
 public void SetPredicate(ConditionPredicate newPredicate, int indexAnd, int indexOr)
 {
     and[indexAnd].SetPredicate(newPredicate, indexOr);
 }
Exemple #12
0
 public void SetPredicate(ConditionPredicate newPredicate, int index)
 {
     or[index].SetPredicate(newPredicate);
 }
        private static void LayoutConditionSelectionUI(DialogueNode node)
        {
            int conditionSize = node.GetConditionSize();

            for (int k = 0; k < conditionSize; k++)
            {
                bool foldout = node.GetFoldout(k);
                node.SetFold(EditorGUILayout.BeginFoldoutHeaderGroup(foldout, $"Condition Group {k}"), k);
                if (foldout)
                {
                    ConditionPredicate[] predicates = node.GetConditionPredicates(k).ToArray();
                    for (int i = 0; i < predicates.Length; i++)
                    {
                        GUILayout.BeginHorizontal();
                        EditorGUILayout.LabelField("Condition:", GUILayout.Width(60));
                        ConditionPredicate newPredicate = (ConditionPredicate)EditorGUILayout.EnumPopup(predicates[i]);
                        node.SetConditionPredicate(newPredicate, k, i);
                        if (GUILayout.Button("-"))
                        {
                            node.RemoveCondition(k, i);
                            conditionSize = node.GetConditionSize();
                        }
                        GUILayout.EndHorizontal();

                        List <string> parameterList = new List <string>();
                        int           removeCount   = 1;

                        if (newPredicate == ConditionPredicate.None)
                        {
                        }
                        // else if (newPredicate == ConditionPredicate.HasItem)
                        // {
                        //     removeCount = 2;
                        //     string[] itemList = node.GetParameters(k, i).ToArray();
                        //     if (itemList.Length > 0)
                        //     {
                        //         for (int j = 0; j < itemList.Length; j++)
                        //         {
                        //             InventoryItem item = InventoryItem.GetFromID(itemList[j]);
                        //             item = GenerateItemSelect(item);
                        //             j++;
                        //             if (item != null)
                        //             {
                        //                 parameterList.Add(item.GetItemID());
                        //                 if (j < itemList.Length)
                        //                 {
                        //                     parameterList.Add(GenerateItemCountField(itemList[j]));
                        //                 }
                        //                 else
                        //                 {
                        //                     parameterList.Add("");
                        //                 }
                        //             }
                        //             else
                        //             {
                        //                 parameterList.Add("");
                        //             }
                        //         }
                        //     }

                        // }
                        GUILayout.BeginHorizontal();
                        if (GUILayout.Button("Add"))
                        {
                            parameterList.Add("");
                        }
                        if (GUILayout.Button("Remove"))
                        {
                            for (int j = 0; j < removeCount; j++)
                            {
                                parameterList.RemoveAt(parameterList.Count() - 1);
                            }
                        }
                        node.SetConditionNegate(EditorGUILayout.Toggle(node.GetConditionNegate(k, i)), k, i);
                        EditorGUILayout.LabelField("Negate", GUILayout.Width(74));
                        if (GUILayout.Button("New"))
                        {
                            node.AddNewCondition(k);
                        }
                        GUILayout.EndHorizontal();

                        node.SetConditionParameters(parameterList, k, i);
                    }
                }
                EditorGUILayout.EndFoldoutHeaderGroup();
            }
        }
 public RuleCondition(ConditionPredicate <T> conditions, LogicalOperation operation)
 {
     _conditions = conditions;
     Operation   = operation;
 }