Updated the way gates are generated (Not with weight but as a one time necessary tile)

This commit is contained in:
=
2026-04-28 15:57:09 +02:00
parent 4b460926c5
commit 83d9620e39
2 changed files with 62 additions and 39 deletions
+34 -15
View File
@@ -83,11 +83,11 @@ public partial class Layer : Node3D
{
foreach (var tile in tiles)
{
var node = new Node3D
{
Position = tile.Position
};
decorationRoot.AddChild(node);
var node = new Node3D
{
Position = tile.Position
};
decorationRoot.AddChild(node);
tile.ContentNode = node;
}
@@ -116,45 +116,45 @@ public partial class Layer : Node3D
List<string> possibilities = new();
if(x == 0 && y == 0)
if (x == 0 && y == 0)
{
possibilities.Add("corner_down_right");
}
else if(x == 0 && y == layerSize - 1)
else if (x == 0 && y == layerSize - 1)
{
possibilities.Add("corner_up_right");
}
else if(x == layerSize - 1 && y == 0)
else if (x == layerSize - 1 && y == 0)
{
possibilities.Add("corner_down_left");
}
else if(x == layerSize - 1 && y == layerSize - 1)
else if (x == layerSize - 1 && y == layerSize - 1)
{
possibilities.Add("corner_up_left");
}
else if(y == 0)
else if (y == 0)
{
possibilities.Add("straight_left_right");
possibilities.Add("t_down");
}
else if(y == layerSize - 1)
else if (y == layerSize - 1)
{
possibilities.Add("straight_left_right");
possibilities.Add("t_up");
}
else if(x == 0)
else if (x == 0)
{
possibilities.Add("straight_up_down");
possibilities.Add("t_right");
}
else if(x == layerSize - 1)
else if (x == layerSize - 1)
{
possibilities.Add("straight_up_down");
possibilities.Add("t_left");
}
string result = tile.Collapse(possibilities[rand.Next(0, possibilities.Count)]);
if (result == "ERR")
return false;
@@ -165,6 +165,24 @@ public partial class Layer : Node3D
return true;
}
private void GenerateNecessaryTiles()
{
int posX, posY;
while (true)
{
posX = rand.Next(layerSize);
posY = rand.Next(layerSize);
if (tiles[posX, posY].collapsedMesh != null) continue;
if (tiles[posX, posY].tileMeshes.ContainsKey("gate"))
{
tiles[posX, posY].Collapse("gate");
NewPropagate(new Vector2I(posX, posY));
break;
}
}
}
public bool GenerateLayer()
{
bool result = true;
@@ -174,10 +192,11 @@ public partial class Layer : Node3D
return false;
}
GenerateNecessaryTiles();
Vector2I position = GetSmallestPossibilities();
while (true)
{
string keyword = tiles[position.X, position.Y].Collapse("");
string keyword = tiles[position.X, position.Y].Collapse("");
if (keyword == "ERR") return false;
if (keyword != "")
{