Files
EVEngine/test/procgen_build_layer_stack.cpp
T

70 lines
2.9 KiB
C++

#include "procgen/BuildLayerStack.h"
#include "procgen/Semantic.h"
#include "zeroerr/assert.h"
#include "zeroerr/unittest.h"
using namespace eve::procgen;
TEST_CASE("procgen.buildLayers.executesOrderedTileAndObjectDefinitions") {
Grid2D grid;
grid.resize(2, 1);
grid.setCell(0, 0, int(Semantic::Floor));
grid.setCell(1, 0, int(Semantic::Floor));
PointSet points;
points.add(2.f, 0.f, 3.f);
ObjectBuildLayer objects;
REQUIRE(objects.addAsset("props/crate", 1.f).ok());
objects.setSeed(15);
BuildLayerStack stack;
REQUIRE(stack.addTileLayer("floor", true, 2.f, 0.5f, "floor").ok());
REQUIRE(stack.addObjectLayer("props", true, objects).ok());
REQUIRE(stack.addTileLayer("disabled", false, 1.f, 1.f, "disabled").ok());
CHECK_EQ(stack.getLayerCount(), 3);
CHECK_EQ(stack.getLayerId(1), "props");
CHECK_EQ(stack.getLayerType(0), "tiles");
CHECK(!stack.isLayerEnabled(2));
auto result = stack.execute(grid, points);
REQUIRE(result.ok());
CHECK_EQ(result.value().getCount(), 2);
CHECK_EQ(result.value().getId(0), "floor");
CHECK_EQ(result.value().getType(0), "mesh");
CHECK_EQ(result.value().getType(1), "points");
auto mesh = result.value().getMesh(0);
REQUIRE(mesh.ok());
CHECK_EQ(mesh.value().getIndexCount(), 48);
auto built = result.value().getPoints(1);
REQUIRE(built.ok());
CHECK_EQ(built.value().getStringAttribute(0, "asset", ""), "props/crate");
CHECK(!result.value().getPoints(0).ok());
CHECK(!result.value().getMesh(1).ok());
}
TEST_CASE("procgen.buildLayers.roundTripsAndRejectsDamageAtomically") {
ObjectBuildLayer objects;
REQUIRE(objects.addAsset("props/a", 2.f).ok());
REQUIRE(objects.addAsset("props/b", 1.f).ok());
REQUIRE(objects.setPositionRadius(0.4f).ok());
REQUIRE(objects.addChild("props/child", 2, 1.f, 0.5f, 1.5f, -20.f, 20.f).ok());
const auto objectDefinition = objects.serializeDefinition();
ObjectBuildLayer restoredObject;
REQUIRE(restoredObject.deserializeDefinition(objectDefinition).ok());
CHECK_EQ(restoredObject.serializeDefinition(), objectDefinition);
CHECK(!restoredObject.deserializeDefinition("EVPCG_OBJECT_LAYER 1\nUNKNOWN 1\nEND\n").ok());
CHECK_EQ(restoredObject.serializeDefinition(), objectDefinition);
BuildLayerStack stack;
REQUIRE(stack.addObjectLayer("objects", true, objects).ok());
REQUIRE(stack.addTileLayer("tiles", false, 1.25f, 0.3f, "terrain main").ok());
const auto definition = stack.serializeDefinition();
BuildLayerStack restored;
REQUIRE(restored.deserializeDefinition(definition).ok());
CHECK_EQ(restored.serializeDefinition(), definition);
CHECK(!restored.deserializeDefinition("EVPCG_BUILD_LAYERS 1\nOBJECT \"bad\" 1 xyz\nEND\n").ok());
CHECK_EQ(restored.serializeDefinition(), definition);
CHECK(!restored.addTileLayer("objects", true, 1.f, 0.f, "duplicate").ok());
CHECK(!restored.setEnabled("missing", true).ok());
}