From b4b83f098df03903f4685c61d89f54ae34822caf Mon Sep 17 00:00:00 2001 From: Alan Youngblood Date: Tue, 25 Jul 2023 16:48:12 -0400 Subject: [PATCH] TileSet Parsing and Setup Refactored --- src/ecs/TileMapComponent.h | 126 +++++++++++++++++++++++++++---------- 1 file changed, 92 insertions(+), 34 deletions(-) diff --git a/src/ecs/TileMapComponent.h b/src/ecs/TileMapComponent.h index 1c8fccc..972a814 100644 --- a/src/ecs/TileMapComponent.h +++ b/src/ecs/TileMapComponent.h @@ -1,4 +1,5 @@ /* + * * TileMapComponent.h * * Created on: Mar 21, 2020 @@ -24,7 +25,7 @@ public: SDL_Texture* texture; SDL_Rect srcRect, destRect; //tmxparser::TmxMap map; - //tileson::Tileson map; + tson::Tileson t; int globalScale; std::vector tileSet; std::vector destRects; @@ -47,7 +48,7 @@ public: // *********************************************************************************** // TILESON ~~~~~~~~~~~ - tson::Tileson t; + //tson::Tileson t; const std::filesystem::path jsonPath = std::filesystem::u8path(mapPath); std::unique_ptr map = t.parse(jsonPath); @@ -56,51 +57,109 @@ public: { printf("Tileson successfully parsed the tilemap\n"); std::cout << map->getStatusMessage() << std::endl; - //Gets the layer called "Object Layer" from the "ultimate_demo.json map - //tson::Layer *tileLayer = map->getLayer("Tile Layer 1"); //This is an Object Layer - //Example from a Tile Layer - //I know for a fact that this is a Tile Layer, but you can check it this way to be sure. - //if(tileLayer->getType() == tson::LayerType::TileLayer) - //{ - //pos = position in tile units - // printf("Tileson found layer of tiles"); - // for(auto &[pos, tileObject] : tileLayer->getTileObjects()) //Loops through absolutely all existing tileObjects - // { - // tson::Tileset *tileset = tileObject.getTile()->getTileset(); - // tson::Rect drawingRect = tileObject.getDrawingRect(); - // tson::Vector2f position = tileObject.getPosition(); - // //printf("X: %f, Y: %f\n",position.x,position.y); - // } - //} - -// ******************************************************************************************* //map = loadedMap; tson::Tileset *tileset = map->getTileset("br-tiles"); std::cout << "Image Path: " << tileset->getImage() << std::endl; + std::string fullPath = tileset->getImage(); + size_t charPos = fullPath.find("assets"); + fullPath.erase(0,charPos); + + //std::cout << "Updated path: " << fullPath << std::endl; //tson::Tile *tile = tileset->getTile(1); - //std::string myTexPath = tile->getImage(); - //tson::Layer *tileLayer = map->getLayer("Tile Layer 1"); //This is an Object Layer + //std::string myTexPath = fullPath; + tson::Layer *tileLayer = map->getLayer("Tile Layer 1"); //This is a Layer //std::cout << "\nTexturePath: \n" << myTexPath << "\n" << std::endl; - //std::string texturePath = "assets/textures/tiles/" + loadedMap.tilesetCollection[0].name + ".png"; - //Game::assets->AddTexture(map.tilesetCollection[0].name, texturePath.c_str()); - //setTex(map.tilesetCollection[0].name); + std::string texturePath = fullPath; + Game::assets->AddTexture("terrain", texturePath.c_str()); + setTex("terrain"); globalScale = gScale; //colliders.resize(map.height, std::vector(map.width, 0)); tilesWide = map->getSize().x; - //printf("tilesWide: %d\n",tilesWide); + printf("tilesWide: %d\n",tilesWide); tilesHigh = map->getSize().y; - //printf("tilesHigh: %d\n",tilesHigh); + printf("tilesHigh: %d\n",tilesHigh); tileWidth = map->getTileSize().x; - //printf("tileSizeWidth: %d\n",tileWidth); + printf("tileSizeWidth: %d\n",tileWidth); // =========== Setup Tile Set =========== - //tileSetTotal = map.tilesetCollection[0].colCount*map.tilesetCollection[0].rowCount; - //tileSet.resize(tileSetTotal); + + tileSetTotal = tileset->getTileCount(); + int tileSetCols = tileset->getColumns(); + std::cout << "tileSet Cols: " << tileSetCols << std::endl; + int tileSetRows = tileSetTotal/tileSetCols; + std::cout << "tileSet Rows: " << tileSetRows << std::endl; + tileSet.resize(tileSetTotal); + std::cout << tileSetTotal << std::endl; + + for (int r=0;rgetType() == tson::LayerType::TileLayer) + { + destRects.resize(tilesWide*tilesHigh); + initialPositions.resize(tilesWide*tilesHigh); +// ================================================= +// for (int r = 0;r ogPos = std::make_tuple(thisRect.x,thisRect.y); +// initialPositions[elem] = ogPos; +// thisRect.x = thisRect.x-offsetX*globalScale; +// thisRect.y = thisRect.y-offsetY*globalScale; +// destRects[elem] = thisRect; +// colliders[r][c] = map.layerCollection[1].tiles[elem].gid; +// // std::cout << "colliders[" << std::to_string(r) << "][" << std::to_string(c) << "]= " << std::to_string(colliders[r][c]) << std::endl; +// } +// } +//================================================= + + int col = 0; + int row = 0; + + for(auto &[pos, tileObject] : tileLayer->getTileObjects()) //Loops through absolutely all existing tileObjects + { + //int elem = 0; + tson::Tileset *tileset = tileObject.getTile()->getTileset(); + tson::Rect drawingRect = tileObject.getDrawingRect(); + tson::Vector2f position = tileObject.getPosition(); + //int thiscount = tileObject.getTileCount(); + //std::cout << "Tile id: " << tileObject.getTile()->getId() << std::endl; + + //std::cout << "Tile column: " << col << std::endl; + //std::cout << "Tile row: " << row << std::endl; + //std::cout << "X: " << drawingRect.x << std::endl; + //std::cout << "Y: " << drawingRect.y << std::endl; + //std::cout << "Width: " << drawingRect.width << std::endl; + //std::cout << "height: " << drawingRect.height << std::endl; + //std::cout << "col % tilesWide: " << col%tilesWide << std::endl; + if ( col%tilesWide == 0) { + col=0; + //printf("New Row\n"); + row++; + } + col++; + + + } + } + + /* for (int r=0;rgetStatusMessage(); - //printf(map->getStatus()); } }