diff --git a/Crawler/Crawler.cpp b/Crawler/Crawler.cpp index a319c387..5f3719f2 100644 --- a/Crawler/Crawler.cpp +++ b/Crawler/Crawler.cpp @@ -921,41 +921,45 @@ void Crawler::LoadLevel(MapName map){ int tileSheetY=tileSheetIndex/tileSheetWidth; #pragma region TileGroupShenanigans auto SetupTileGroups=[&](std::functionIsForeground,TileRenderData tile,std::set&foregroundTilesIncluded,std::vector&groups){ - if(IsForeground(tileSheet,tileSheetIndex)&&foregroundTilesIncluded.find({x,y})==foregroundTilesIncluded.end()){ - std::queuetileGroupChecks; - TileGroup group; - foregroundTilesIncluded.insert({x,y}); - group.InsertTile(tile); - if(x>0)tileGroupChecks.push({x-1,y}); - if(x0)tileGroupChecks.push({x,y-1}); - if(ySprite()->width/24; - int tileSheetHeight=tileSheet.tileset.tileset->Sprite()->height/24; - int tileSheetIndex=tileID-(tileSheet.firstgid-1); - int tileSheetX=tileSheetIndex%tileSheetWidth; - int tileSheetY=tileSheetIndex/tileSheetWidth; - TileRenderData tile={tileSheet.tileset.tileset->Decal(),pos*24,vi2d{tileSheetX,tileSheetY}*24}; - if(IsForegroundTile(tileSheet,tileSheetIndex)&&foregroundTilesIncluded.find(pos)==foregroundTilesIncluded.end()){ - foregroundTilesIncluded.insert(pos); - group.InsertTile(tile); - if(pos.x>0)tileGroupChecks.push(pos+vi2d{-1,0}); - if(pos.x0)tileGroupChecks.push(pos+vi2d{0,-1}); - if(pos.ytileGroupChecks; + TileGroup group; + foregroundTilesIncluded.insert({x,y}); + group.originatingLayer=layerID; + group.InsertTile(tile); + if(x>0)tileGroupChecks.push({x-1,y}); + if(x0)tileGroupChecks.push({x,y-1}); + if(ySprite()->width/24; + int tileSheetHeight=tileSheet.tileset.tileset->Sprite()->height/24; + int tileSheetIndex=tileID-(tileSheet.firstgid-1); + int tileSheetX=tileSheetIndex%tileSheetWidth; + int tileSheetY=tileSheetIndex/tileSheetWidth; + TileRenderData tile={tileSheet.tileset.tileset->Decal(),pos*24,vi2d{tileSheetX,tileSheetY}*24}; + if(IsForeground(tileSheet,tileSheetIndex)&&foregroundTilesIncluded.find(pos)==foregroundTilesIncluded.end()){ + foregroundTilesIncluded.insert(pos); + group.InsertTile(tile); + if(pos.x>0)tileGroupChecks.push(pos+vi2d{-1,0}); + if(pos.x0)tileGroupChecks.push(pos+vi2d{0,-1}); + if(pos.yDecal(),vi2d{x,y}*24,vi2d{tileSheetX,tileSheetY}*24}; SetupTileGroups([&](TilesheetData sheet,int tileID){return IsForegroundTile(sheet,tileID);},tile,foregroundTilesAdded,foregroundTileGroups); - SetupTileGroups([&](TilesheetData sheet,int tileID){return IsUpperForegroundTile(sheet,tileID);},tile,foregroundTilesAdded,foregroundTileGroups); + SetupTileGroups([&](TilesheetData sheet,int tileID){return IsUpperForegroundTile(sheet,tileID);},tile,upperForegroundTilesAdded,upperForegroundTileGroups); #pragma endregion } } diff --git a/Crawler/Crawler.h b/Crawler/Crawler.h index 63a6745c..dd992cc1 100644 --- a/Crawler/Crawler.h +++ b/Crawler/Crawler.h @@ -109,4 +109,12 @@ public: datafiledoubledata GetDoubleList(std::string key); static void OutputDebugInfo(const char*key,std::size_t len); void InitializeLevels(); -}; + + struct TileGroupData{ + vi2d tilePos; + int layer; + bool operator<(const TileGroupData&rhs)const{ + return layer