- Updated the physics module to include Box2D support, enabling management of physics bodies and collision events. - Enhanced the map module to support tile layers and improved hot-reload functionality for tilemaps. - Updated documentation to reflect the new features in the physics and map systems, including usage examples and API references. - Modified CMakeLists.txt to include new modules for physics and font management, ensuring proper build configurations. Co-authored-by: Cursor <cursoragent@cursor.com>
107 lines
3.1 KiB
C++
107 lines
3.1 KiB
C++
#include "zeroerr/assert.h"
|
|
#include "zeroerr/unittest.h"
|
|
|
|
#include "map/Map.h"
|
|
#include "map/TileLayer.h"
|
|
#include "map/TileSystem.h"
|
|
#include "map/TileConfig.h"
|
|
|
|
#include <string>
|
|
|
|
using namespace eve::map;
|
|
|
|
TEST_CASE("map.newLayer.ecsView") {
|
|
auto *mod = Map::create();
|
|
int before = mod->getLayerCount();
|
|
TileLayer *layer = mod->newLayer(4, 3, 16.f, 16.f);
|
|
REQUIRE(layer != nullptr);
|
|
CHECK_EQ(layer->getMapWidth(), 4);
|
|
CHECK_EQ(layer->getMapHeight(), 3);
|
|
CHECK_EQ(layer->getTileWidth(), 16.f);
|
|
CHECK_EQ(layer->getTileHeight(), 16.f);
|
|
CHECK_EQ(mod->getLayerCount(), before + 1);
|
|
CHECK(layer->config()->entity == layer);
|
|
}
|
|
|
|
TEST_CASE("map.layer.setGetTile") {
|
|
auto *mod = Map::create();
|
|
TileLayer *layer = mod->newLayer(3, 2, 32.f, 32.f);
|
|
CHECK_EQ(layer->getTile(0, 0), 0);
|
|
layer->setTile(1, 1, 5);
|
|
CHECK_EQ(layer->getTile(1, 1), 5);
|
|
layer->setTile(-1, 0, 9); // out of range no-op
|
|
CHECK_EQ(layer->getTile(0, 0), 0);
|
|
layer->fill(7);
|
|
CHECK_EQ(layer->getTile(0, 0), 7);
|
|
CHECK_EQ(layer->getTile(2, 1), 7);
|
|
layer->clear();
|
|
CHECK_EQ(layer->getTile(1, 0), 0);
|
|
}
|
|
|
|
TEST_CASE("map.layer.resizeClears") {
|
|
auto *mod = Map::create();
|
|
TileLayer *layer = mod->newLayer(2, 2, 8.f, 8.f);
|
|
layer->setTile(0, 0, 3);
|
|
layer->resize(4, 1);
|
|
CHECK_EQ(layer->getMapWidth(), 4);
|
|
CHECK_EQ(layer->getMapHeight(), 1);
|
|
CHECK_EQ(layer->getTile(0, 0), 0);
|
|
}
|
|
|
|
TEST_CASE("map.layer.applyConfigFlat") {
|
|
auto *mod = Map::create();
|
|
TileLayer *layer = mod->newLayer(2, 2, 16.f, 16.f);
|
|
const char *json = R"({
|
|
"width": 2,
|
|
"height": 2,
|
|
"tilewidth": 16,
|
|
"tileheight": 16,
|
|
"data": [1, 2, 3, 4],
|
|
"origin": [10, 20],
|
|
"layer": 2,
|
|
"visible": true,
|
|
"tint": [1, 0.5, 0.25, 1]
|
|
})";
|
|
CHECK(layer->applyConfig(json));
|
|
CHECK_EQ(layer->getTile(0, 0), 1);
|
|
CHECK_EQ(layer->getTile(1, 0), 2);
|
|
CHECK_EQ(layer->getTile(0, 1), 3);
|
|
CHECK_EQ(layer->getTile(1, 1), 4);
|
|
CHECK_EQ(layer->getX(), 10.f);
|
|
CHECK_EQ(layer->getY(), 20.f);
|
|
CHECK_EQ(layer->getLayer(), 2);
|
|
CHECK(layer->isVisible());
|
|
}
|
|
|
|
TEST_CASE("map.layer.applyConfigMultiLayerPicksFirst") {
|
|
auto *mod = Map::create();
|
|
TileLayer *layer = mod->newLayer(2, 1, 8.f, 8.f);
|
|
const char *json = R"({
|
|
"width": 2,
|
|
"height": 1,
|
|
"tilewidth": 8,
|
|
"tileheight": 8,
|
|
"layers": [
|
|
{ "type": "tilelayer", "width": 2, "height": 1, "data": [9, 8] },
|
|
{ "type": "objectgroup", "objects": [] },
|
|
{ "type": "tilelayer", "width": 2, "height": 1, "data": [1, 1] }
|
|
]
|
|
})";
|
|
CHECK(layer->applyConfig(json));
|
|
CHECK_EQ(layer->getTile(0, 0), 9);
|
|
CHECK_EQ(layer->getTile(1, 0), 8);
|
|
}
|
|
|
|
TEST_CASE("map.tileGid.masksFlipFlags") {
|
|
CHECK_EQ(tileGid(0), 0u);
|
|
CHECK_EQ(tileGid(5), 5u);
|
|
CHECK_EQ(tileGid(0x80000005u), 5u);
|
|
}
|
|
|
|
TEST_CASE("map.render.nullSafe") {
|
|
auto *mod = Map::create();
|
|
TileLayer *layer = mod->newLayer(2, 2, 8.f, 8.f);
|
|
layer->fill(1);
|
|
TileRenderSystem::render(nullptr);
|
|
}
|