using Godot; public partial class WhileNodeDisplay : NodeDisplay { protected override ProgramNode CreateProgramNode() { return new WhileNode(); } protected override void LoadContent(NodeDisplay display, string content) { HBoxContainer valueContainer = GetValueContainer(display); string[] parts = content.Split(","); string itemString = parts[1].Replace("Item:", "").Trim(); string comparatorString = parts[2].Replace("Comparator:", "").Trim(); if (itemString.ToLower() != "empty") { WhileNode whileNode = display.node as WhileNode; if (whileNode != null) { whileNode.selectedItem = new Item { data = GameData.availableItems[itemString] }; whileNode.comparator = comparatorString; } } string amountString = parts[3].Replace("Amount:", "").Trim(); valueContainer.GetNode("./Amount").Value = int.Parse(amountString); } public override void ReadParameters() { WhileNode whileNode = node as WhileNode; if (whileNode == null) return; HBoxContainer valueContainer = GetValueContainer(); OptionButton items = valueContainer.GetNode("./Item"); string readableItem = items.GetItemText(items.GetSelectedId()).Split(":")[0]; if (GameData.availableItems.ContainsKey(ItemData.GetIndex(readableItem))) { whileNode.selectedItem = new Item { data = GameData.availableItems[ItemData.GetIndex(readableItem)] }; } whileNode.amount = (int)valueContainer.GetNode("./Amount").Value; OptionButton comparators = valueContainer.GetNode("./Comparator"); if(comparators.GetSelectedId() == -1) return; whileNode.comparator = comparators.GetItemText(comparators.GetSelectedId()); } public override void SetupDisplay() { WhileNode whileNode = node as WhileNode; if (whileNode == null) return; HBoxContainer valueContainer = GetValueContainer(); OptionButton options = valueContainer.GetNode("./Item"); options.Clear(); options.AddItem("Select item..."); foreach (ItemData item in GameData.availableItems.Values) { if (GameData.availableResearch[item.Research].state != ResearchState.RESEARCHED) continue; options.AddItem(item.GetReadableName()); } if (whileNode.selectedItem != null) { for (int i = 0; i < options.ItemCount; i++) { if (ItemData.GetIndex(options.GetItemText(i).Split(":")[0]) == whileNode.selectedItem.data.Id) { options.Select(i); break; } } } OptionButton comparators = valueContainer.GetNode("./Comparator"); if (whileNode.comparator != null) { for (int i = 0; i < comparators.ItemCount; i++) { if (comparators.GetItemText(i) == whileNode.comparator) { comparators.Select(i); break; } } } } }