Changed WFC acceptance to 100% connectivity and added test case to test the layer generation.
This commit is contained in:
@@ -37,6 +37,7 @@ public partial class TestRunner : Node
|
||||
Run("For node stops after configured amount", TestForNodeStopsAfterConfiguredAmount);
|
||||
Run("Paused world does not drain survival", TestPausedWorldDoesNotDrainSurvival);
|
||||
Run("Open gate hides gate content", TestOpenGateHidesGateContent);
|
||||
Run("Layer generation succeeds above threshold", TestLayerGenerationSuccessRate);
|
||||
Run("Item data readable names are stable", TestItemDataReadableNames);
|
||||
Run("Resource files load core game data", TestResourceFilesLoadCoreData);
|
||||
|
||||
@@ -502,6 +503,40 @@ public partial class TestRunner : Node
|
||||
AssertFalse(layer.tiles[0, 0].ContentNode.Visible, "gate content should be hidden");
|
||||
}
|
||||
|
||||
private void TestLayerGenerationSuccessRate()
|
||||
{
|
||||
const int layerCount = 1000;
|
||||
const float minimumSuccessRate = 0.90f;
|
||||
|
||||
GameData.layerSize = 20;
|
||||
WFC.FillAdjacencies();
|
||||
Dictionary<string, MeshInstance3D> tileMeshes = ResourceLoader.LoadTiles();
|
||||
|
||||
int successfulLayers = 0;
|
||||
|
||||
for (int i = 0; i < layerCount; i++)
|
||||
{
|
||||
Layer layer = new Layer();
|
||||
layer._Ready();
|
||||
layer.SetupLayer(GameData.layerSize, 0, tileMeshes, new Vector2I());
|
||||
|
||||
if (IsGeneratedLayerValid(layer))
|
||||
{
|
||||
successfulLayers++;
|
||||
}
|
||||
|
||||
layer.Free();
|
||||
}
|
||||
|
||||
float successRate = successfulLayers / (float)layerCount;
|
||||
GD.Print($"Layer generation success rate: {successfulLayers}/{layerCount} ({successRate:P2})");
|
||||
|
||||
AssertTrue(
|
||||
successRate >= minimumSuccessRate,
|
||||
$"layer generation success rate should be at least {minimumSuccessRate:P0}, got {successRate:P2}"
|
||||
);
|
||||
}
|
||||
|
||||
private void TestItemDataReadableNames()
|
||||
{
|
||||
AssertEqual("Iron gear", ItemData.GetReadableName("iron_gear"), "readable name");
|
||||
@@ -539,6 +574,31 @@ public partial class TestRunner : Node
|
||||
return layer;
|
||||
}
|
||||
|
||||
private bool IsGeneratedLayerValid(Layer layer)
|
||||
{
|
||||
bool hasGate = false;
|
||||
|
||||
foreach (Tile tile in layer.tiles)
|
||||
{
|
||||
if (tile.collapsedMesh == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (tile.collapsedMesh == "gate")
|
||||
{
|
||||
hasGate = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasGate)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return WFC.IsMapConnected(layer.tiles, 1f);
|
||||
}
|
||||
|
||||
private void AssertTrue(bool value, string message)
|
||||
{
|
||||
if (!value)
|
||||
|
||||
Reference in New Issue
Block a user