Updated the way gates are generated (Not with weight but as a one time necessary tile)
This commit is contained in:
@@ -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 != "")
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user