(WIP) switched from previous DSL System (UI order based) to a new DSL System (node connection based)

This commit is contained in:
2026-05-13 13:18:47 +02:00
parent 1eef71f454
commit 5893f9f7b9
47 changed files with 706 additions and 1153 deletions
@@ -0,0 +1,71 @@
using Godot;
public partial class CraftNodeDisplay : NodeDisplay
{
protected override ProgramNode CreateProgramNode()
{
return new CraftNode();
}
protected override void LoadContent(NodeDisplay display, string content)
{
HBoxContainer valueContainer = GetValueContainer(display);
string[] parts = content.Split(",");
string itemString = parts[1].Replace("Item:", "").Trim();
if (itemString.ToLower() != "empty")
{
CraftNode craftNode = display.node as CraftNode;
if (craftNode != null)
{
craftNode.selectedItem = new Item { data = GameData.availableItems[itemString] };
}
}
string amountString = parts[2].Replace("Amount:", "").Trim();
valueContainer.GetNode<SpinBox>("./Amount").Value = int.Parse(amountString);
}
public override void ReadParameters()
{
CraftNode craftNode = node as CraftNode;
if (craftNode == null) return;
HBoxContainer valueContainer = GetValueContainer();
OptionButton items = valueContainer.GetNode<OptionButton>("./Item");
string readableItem = items.GetItemText(items.GetSelectedId()).Split(":")[0];
if (GameData.availableItems.ContainsKey(ItemData.GetIndex(readableItem)))
{
craftNode.selectedItem = new Item { data = GameData.availableItems[ItemData.GetIndex(readableItem)] };
}
craftNode.amount = (int)valueContainer.GetNode<SpinBox>("./Amount").Value;
}
public override void SetupDisplay()
{
CraftNode craftNode = node as CraftNode;
if (craftNode == null) return;
OptionButton options = GetValueContainer().GetNode<OptionButton>("./Item");
options.Clear();
options.AddItem("Select item...");
foreach (ItemData item in GameData.availableItems.Values)
{
if (GameData.availableResearch[item.Research].state != ResearchState.RESEARCHED) continue;
if (item.Inputs.Count > 0)
{
options.AddItem(item.GetCraftingDisplay());
}
}
if (craftNode.selectedItem != null)
{
for (int i = 0; i < options.ItemCount; i++)
{
if (ItemData.GetIndex(options.GetItemText(i).Split(":")[0]) == craftNode.selectedItem.data.Id)
{
options.Select(i);
break;
}
}
}
}
}
@@ -0,0 +1 @@
uid://bfosue8mejnr5
@@ -0,0 +1,7 @@
public partial class ExploreNodeDisplay : NodeDisplay
{
protected override ProgramNode CreateProgramNode()
{
return new ExploreNode();
}
}
@@ -0,0 +1 @@
uid://bbju8q0es5rcf
@@ -0,0 +1,31 @@
using Godot;
public partial class ForNodeDisplay : NodeDisplay
{
protected override ProgramNode CreateProgramNode()
{
return new ForNode();
}
protected override void LoadContent(NodeDisplay display, string content)
{
HBoxContainer valueContainer = GetValueContainer(display);
string[] parts = content.Split(",");
string amountExecuted = parts[1].Replace("AmountExecuted:", "").Trim();
ForNode forNode = display.node as ForNode;
if (forNode != null)
{
forNode.amountExecuted = int.Parse(amountExecuted);
}
string amountString = parts[2].Replace("Amount:", "").Trim();
valueContainer.GetNode<SpinBox>("./Amount").Value = int.Parse(amountString);
}
public override void ReadParameters()
{
ForNode forNode = node as ForNode;
if (forNode == null) return;
forNode.amount = (int)GetValueContainer().GetNode<SpinBox>("./Amount").Value;
}
}
@@ -0,0 +1 @@
uid://gptqyjv5swwc
@@ -0,0 +1,7 @@
public partial class HarvestNodeDisplay : NodeDisplay
{
protected override ProgramNode CreateProgramNode()
{
return new HarvestNode();
}
}
@@ -0,0 +1 @@
uid://u2y14qj6oxyy
@@ -0,0 +1,88 @@
using Godot;
public partial class IfNodeDisplay : NodeDisplay
{
protected override ProgramNode CreateProgramNode()
{
return new IfNode();
}
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")
{
IfNode ifNode = display.node as IfNode;
if (ifNode != null)
{
ifNode.selectedItem = new Item { data = GameData.availableItems[itemString] };
ifNode.comparator = comparatorString;
}
}
string amountString = parts[3].Replace("Amount:", "").Trim();
valueContainer.GetNode<SpinBox>("./Amount").Value = int.Parse(amountString);
}
public override void ReadParameters()
{
IfNode ifNode = node as IfNode;
if (ifNode == null) return;
HBoxContainer valueContainer = GetValueContainer();
OptionButton items = valueContainer.GetNode<OptionButton>("./Item");
string readableItem = items.GetItemText(items.GetSelectedId()).Split(":")[0];
if (GameData.availableItems.ContainsKey(ItemData.GetIndex(readableItem)))
{
ifNode.selectedItem = new Item { data = GameData.availableItems[ItemData.GetIndex(readableItem)] };
}
ifNode.amount = (int)valueContainer.GetNode<SpinBox>("./Amount").Value;
OptionButton comparators = valueContainer.GetNode<OptionButton>("./Comparator");
ifNode.comparator = comparators.GetItemText(comparators.GetSelectedId());
}
public override void SetupDisplay()
{
IfNode ifNode = node as IfNode;
if (ifNode == null) return;
HBoxContainer valueContainer = GetValueContainer();
OptionButton options = valueContainer.GetNode<OptionButton>("./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 (ifNode.selectedItem != null)
{
for (int i = 0; i < options.ItemCount; i++)
{
if (ItemData.GetIndex(options.GetItemText(i).Split(":")[0]) == ifNode.selectedItem.data.Id)
{
options.Select(i);
break;
}
}
}
OptionButton comparators = valueContainer.GetNode<OptionButton>("./Comparator");
if (ifNode.comparator != null)
{
for (int i = 0; i < comparators.ItemCount; i++)
{
if (comparators.GetItemText(i) == ifNode.comparator)
{
comparators.Select(i);
break;
}
}
}
}
}
@@ -0,0 +1 @@
uid://cngxwfcrim746
@@ -0,0 +1,7 @@
public partial class MaintainNodeDisplay : NodeDisplay
{
protected override ProgramNode CreateProgramNode()
{
return new MaintainNode();
}
}
@@ -0,0 +1 @@
uid://wfsar5uiexvn
@@ -0,0 +1,48 @@
using Godot;
public partial class MoveNodeDisplay : NodeDisplay
{
protected override ProgramNode CreateProgramNode()
{
return new MoveNode();
}
protected override void LoadContent(NodeDisplay display, string content)
{
HBoxContainer valueContainer = GetValueContainer(display);
string[] parts = content.Split(",");
string positionValues = parts[1].Replace("Position:", "").Replace("(", "").Replace(")", "").Trim();
int posX = int.Parse(positionValues.Split("|")[0]);
int posY = int.Parse(positionValues.Split("|")[1]);
int posZ = int.Parse(positionValues.Split("|")[2]);
valueContainer.GetNode<SpinBox>("./CoordinateX").Value = posX;
valueContainer.GetNode<SpinBox>("./CoordinateY").Value = posY;
valueContainer.GetNode<SpinBox>("./CoordinateZ").Value = posZ;
MoveNode moveNode = display.node as MoveNode;
if (moveNode != null)
{
moveNode.targetPosition = new Vector3I(posX, posY, posZ);
}
}
public override void ReadParameters()
{
MoveNode moveNode = node as MoveNode;
if (moveNode == null) return;
HBoxContainer valueContainer = GetValueContainer();
int posX = (int)valueContainer.GetNode<SpinBox>("./CoordinateX").Value;
int posY = (int)valueContainer.GetNode<SpinBox>("./CoordinateY").Value;
int posZ = (int)valueContainer.GetNode<SpinBox>("./CoordinateZ").Value;
moveNode.targetPosition = new Vector3I(posX, posY, posZ);
}
public override void SetupDisplay()
{
HBoxContainer valueContainer = GetValueContainer();
valueContainer.GetNode<SpinBox>("./CoordinateX").MaxValue = GameData.layerSize;
valueContainer.GetNode<SpinBox>("./CoordinateY").MaxValue = GameData.ruinSize;
valueContainer.GetNode<SpinBox>("./CoordinateZ").MaxValue = GameData.layerSize;
}
}
@@ -0,0 +1 @@
uid://bucamlwjs0mm2
@@ -0,0 +1,7 @@
public partial class SacrificeNodeDisplay : NodeDisplay
{
protected override ProgramNode CreateProgramNode()
{
return new SacrificeNode();
}
}
@@ -0,0 +1 @@
uid://cu1nghtcsenfs
@@ -0,0 +1,88 @@
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<SpinBox>("./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<OptionButton>("./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<SpinBox>("./Amount").Value;
OptionButton comparators = valueContainer.GetNode<OptionButton>("./Comparator");
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<OptionButton>("./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<OptionButton>("./Comparator");
if (whileNode.comparator != null)
{
for (int i = 0; i < comparators.ItemCount; i++)
{
if (comparators.GetItemText(i) == whileNode.comparator)
{
comparators.Select(i);
break;
}
}
}
}
}
@@ -0,0 +1 @@
uid://d3npiur46icru