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