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); } }
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); }
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; } }
public void SetPredicate(ConditionPredicate newPredicate) { if (predicate != newPredicate) { parameters.Clear(); predicate = newPredicate; BuildBaseParameters(); } }
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); }
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(); } }
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)); }
public static Coroutine StartACoroutine(ConditionPredicate ConditionToSatisfy, System.Action ActionUntilCondtionSatisfied, System.Action OnSatisfied) { RequestInstanceCreation(); return(Instance.StartCoroutine(GenericRoutine(ConditionToSatisfy, ActionUntilCondtionSatisfied, OnSatisfied))); }
public void SetPredicate(ConditionPredicate newPredicate, int indexAnd, int indexOr) { and[indexAnd].SetPredicate(newPredicate, indexOr); }
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; }