Files
EVEngine/test/map.cpp
T
sunxfancyandCursor c19b8fda41 feat: enhance physics and map modules with Box2D integration and documentation updates
- 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>
2026-08-06 23:53:39 +08:00

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);
}