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>
This commit is contained in:
1 parent
6ae6a778db
commit
c19b8fda41
38 files changed
+3063
-40
No files matched your search
+106
@@ -0,0 +1,106 @@
|
||||
#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);
|
||||
}
|
||||
Reference in new issue
Block a user