diff --git a/Crawler/Crawler.cpp b/Crawler/Crawler.cpp index 5f3719f2..fa32619b 100644 --- a/Crawler/Crawler.cpp +++ b/Crawler/Crawler.cpp @@ -922,39 +922,67 @@ void Crawler::LoadLevel(MapName map){ #pragma region TileGroupShenanigans auto SetupTileGroups=[&](std::function<bool(TilesheetData,int)>IsForeground,TileRenderData tile,std::set<vi2d>&foregroundTilesIncluded,std::vector<TileGroup>&groups){ int layerID=layer.tag.GetInteger("id"); - if(IsForeground(tileSheet,tileSheetIndex)){ - if(foregroundTilesIncluded.find({x,y})==foregroundTilesIncluded.end()){ - std::queue<vi2d>tileGroupChecks; - TileGroup group; - foregroundTilesIncluded.insert({x,y}); - group.originatingLayer=layerID; - group.InsertTile(tile); - if(x>0)tileGroupChecks.push({x-1,y}); - if(x<WORLD_SIZE.x-1)tileGroupChecks.push({x+1,y}); - if(y>0)tileGroupChecks.push({x,y-1}); - if(y<WORLD_SIZE.y-1)tileGroupChecks.push({x,y+1}); - while(!tileGroupChecks.empty()){ - vi2d&pos=tileGroupChecks.front(); - tileGroupChecks.pop(); - int tileID=layer.tiles[pos.y][pos.x]-1; - TilesheetData tileSheet=GetTileSheet(currentLevel,tileID); - int tileSheetWidth=tileSheet.tileset.tileset->Sprite()->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.x<WORLD_SIZE.x-1)tileGroupChecks.push(pos+vi2d{1,0}); - if(pos.y>0)tileGroupChecks.push(pos+vi2d{0,-1}); - if(pos.y<WORLD_SIZE.y-1)tileGroupChecks.push(pos+vi2d{0,1}); + if(IsForeground(tileSheet,tileSheetIndex)&&foregroundTilesIncluded.find({x,y})==foregroundTilesIncluded.end()){ + std::queue<vi2d>tileGroupChecks; + TileGroup group; + foregroundTilesIncluded.insert({x,y}); + group.originatingLayer=layerID; + group.InsertTile(tile); + if(x>0)tileGroupChecks.push({x-1,y}); + if(x<WORLD_SIZE.x-1)tileGroupChecks.push({x+1,y}); + if(y>0)tileGroupChecks.push({x,y-1}); + if(y<WORLD_SIZE.y-1)tileGroupChecks.push({x,y+1}); + for(LayerTag&layer2:MAP_DATA[currentLevel].LayerData){ + if(&layer==&layer2)continue; + int tileID=layer2.tiles[y][x]-1; + TilesheetData tileSheet=GetTileSheet(currentLevel,tileID); + int tileSheetWidth=tileSheet.tileset.tileset->Sprite()->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(),vi2d{x,y}*24,vi2d{tileSheetX,tileSheetY}*24}; + if(IsForeground(tileSheet,tileSheetIndex)){ + foregroundTilesIncluded.insert({x,y}); + group.InsertTile(tile); + } + } + while(!tileGroupChecks.empty()){ + vi2d&pos=tileGroupChecks.front(); + tileGroupChecks.pop(); + int tileID=layer.tiles[pos.y][pos.x]-1; + TilesheetData tileSheet=GetTileSheet(currentLevel,tileID); + int tileSheetWidth=tileSheet.tileset.tileset->Sprite()->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.x<WORLD_SIZE.x-1)tileGroupChecks.push(pos+vi2d{1,0}); + if(pos.y>0)tileGroupChecks.push(pos+vi2d{0,-1}); + if(pos.y<WORLD_SIZE.y-1)tileGroupChecks.push(pos+vi2d{0,1}); + for(LayerTag&layer2:MAP_DATA[currentLevel].LayerData){ + if(&layer==&layer2)continue; + int tileID=layer2.tiles[pos.y][pos.x]-1; + TilesheetData tileSheet=GetTileSheet(currentLevel,tileID); + int tileSheetWidth=tileSheet.tileset.tileset->Sprite()->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.insert(pos); + group.InsertTile(tile); + } } } - groups.push_back(group); } + groups.push_back(group); } }; TileRenderData tile={tileSheet.tileset.tileset->Decal(),vi2d{x,y}*24,vi2d{tileSheetX,tileSheetY}*24}; diff --git a/Crawler/Version.h b/Crawler/Version.h index 1f0be048..f61c7600 100644 --- a/Crawler/Version.h +++ b/Crawler/Version.h @@ -2,7 +2,7 @@ #define VERSION_MAJOR 0 #define VERSION_MINOR 2 #define VERSION_PATCH 0 -#define VERSION_BUILD 1079 +#define VERSION_BUILD 1093 #define stringify(a) stringify_(a) #define stringify_(a) #a diff --git a/x64/Release/Crawler.exe b/x64/Release/Crawler.exe index 3ca5fffc..6698a85b 100644 Binary files a/x64/Release/Crawler.exe and b/x64/Release/Crawler.exe differ diff --git a/x64/Release/Crawler.exe.lastcodeanalysissucceeded b/x64/Release/Crawler.exe.lastcodeanalysissucceeded deleted file mode 100644 index e69de29b..00000000