Files
RuinAdventurer/Scripts/DSL/Nodes/WhileNode.cs
T

85 lines
1.9 KiB
C#

using Godot;
using System.Collections.Generic;
public class WhileNode : ProgramNode
{
public Item selectedItem;
public int amount;
public string comparator;
public WhileNode()
{
DisplayText = "While";
}
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()
{
WhileNode duplicate = new WhileNode()
{
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<Godot.Collections.Dictionary> connections,
Dictionary<StringName, ProgramNode> 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;
}
}
}
}