Keep CMake module names and trim switches, but stop flattening editing/editor and runtime bridges as top-level src/modules directories. Parent scans skip nested facets so runtime-3d can drop authoring by directory leaf. Co-authored-by: Cursor <cursoragent@cursor.com>
47 lines
1.9 KiB
C++
47 lines
1.9 KiB
C++
#include "zeroerr/assert.h"
|
|
#include "zeroerr/unittest.h"
|
|
|
|
#include "map/level/editing/LevelDocument.h"
|
|
#include "map/level/editing/LevelFormat.h"
|
|
|
|
using namespace eve::level_editing;
|
|
|
|
TEST_CASE("editor.level.document_and_formats") {
|
|
LevelDocument level(4, 3, 16.f, 24.f);
|
|
level.setOrientation("hexagonal");
|
|
const int ground = level.addTileLayer("Ground");
|
|
level.getTileLayer(ground)->get().setGid(2, 1, 17);
|
|
const int actors = level.addObjectLayer("Actors");
|
|
const int hero = level.addObject(actors, "spawn", 32.f, 24.f);
|
|
REQUIRE(hero >= 0);
|
|
auto heroRef = level.object(actors, hero);
|
|
REQUIRE(heroRef.has_value());
|
|
heroRef->get().name = "Player";
|
|
heroRef->get().properties["team"] = "blue";
|
|
level.setProperty("music", "dungeon");
|
|
|
|
LevelFormatRegistry formats;
|
|
CHECK_EQ(formats.getFormatCount(), 2);
|
|
auto nativeResult = formats.encode("eve.level", level);
|
|
REQUIRE(nativeResult.ok());
|
|
std::string native = std::move(nativeResult).takeValue();
|
|
CHECK_EQ(formats.detect("room.level.json", native), std::string("eve.level"));
|
|
|
|
auto roundtripResult = formats.decode("eve.level", native);
|
|
REQUIRE(roundtripResult.ok());
|
|
auto roundtrip = std::move(roundtripResult).takeValue();
|
|
CHECK_EQ(roundtrip->getOrientation(), std::string("hexagonal"));
|
|
CHECK_EQ(roundtrip->getTileLayer(0)->get().getGid(2, 1), 17);
|
|
CHECK_EQ(roundtrip->object(1, 0)->get().properties.at("team"), std::string("blue"));
|
|
|
|
auto tiledResult = formats.encode("tiled.json", level);
|
|
REQUIRE(tiledResult.ok());
|
|
std::string tiled = std::move(tiledResult).takeValue();
|
|
CHECK_EQ(formats.detect("room.tmj", tiled), std::string("tiled.json"));
|
|
auto importedResult = formats.decode("tiled.json", tiled);
|
|
REQUIRE(importedResult.ok());
|
|
auto imported = std::move(importedResult).takeValue();
|
|
CHECK_EQ(imported->getLayerCount(), 2);
|
|
CHECK_EQ(imported->getTileLayer(0)->get().getGid(2, 1), 17);
|
|
}
|