using Godot; using System.Collections.Generic; public class IfNode : ProgramNode { public Item selectedItem; public int amount; public string comparator; public IfNode() { DisplayText = "If"; TooltipText = "Checks an inventory condition once. If the condition is true, execution follows the main output (Top slot); otherwise it follows the negative output. (Bottom slot)"; } public override NodeResult Execute(Robot robot, double delta) { if (selectedItem == null) { lastExecutionMessage = "No Item selected"; return NodeResult.FAILURE; } if (comparator == null) { lastExecutionMessage = "No comparator selected"; return NodeResult.FAILURE; } bool isConditionFulfilled = DetermineCondition(); return isConditionFulfilled ? NodeResult.SUCCESS : NodeResult.CONDITIONFALSE; } private bool DetermineCondition() { int inventoryAmount = GameData.inventory.GetItemAmount(selectedItem.data.Id); return comparator switch { "is bigger than" => inventoryAmount > amount, "is less than" => inventoryAmount < amount, "is not" => inventoryAmount != amount, "is less than or equal to" => inventoryAmount <= amount, "is bigger than or equal to" => inventoryAmount >= amount, _ => inventoryAmount == amount }; } public override ProgramNode Duplicate() { IfNode duplicate = new IfNode() { selectedItem = selectedItem, amount = amount, comparator = comparator }; return duplicate; } public override string Save() { return $"Name: {DisplayText}, Item: {(selectedItem == null ? "Empty" : selectedItem.data.Id)}, Comparator: {comparator}, Amount: {amount}"; } public override void SetNextNode( List connections, Dictionary availableNodes ) { SetBranchNodes(connections, availableNodes); } }