using Godot; using System.Collections.Generic; public class IfNode : ProgramNode { public Item selectedItem; public int amount; public string comparator; public IfNode() { DisplayText = "If"; } public override NodeResult Execute(Robot robot, double delta) { if (selectedItem == null) { lastExecutionMessage = "No Item selected"; return NodeResult.FAILURE; } bool isConditionFulfilled = DetermineCondition(); return isConditionFulfilled? NodeResult.SUCCESS : NodeResult.CONDITIONFALSE; } private bool DetermineCondition() { int inventoryAmount = GameData.inventory.GetItemAmount(selectedItem.data.Id); switch (comparator) { case "is bigger than": return inventoryAmount > amount; case "is less than": return inventoryAmount < amount; case "is not": return inventoryAmount != amount; case "is less than or equal to": return inventoryAmount <= amount; case "is bigger than or equal to": return inventoryAmount >= amount; default: return 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 ) { nextNode = null; NegativeNode = null; foreach (Godot.Collections.Dictionary connection in connections) { int port = (int)connection["from_port"]; ProgramNode connectedNode = GetConnectedNode(connection, availableNodes); if (port == 0) { nextNode = connectedNode; } else { NegativeNode = connectedNode; } } } }