From 56f9aaca1d0546df97f81a85ae7c8715d9276b7f Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Thu, 7 Sep 2023 03:28:37 -0500 Subject: [PATCH] Scuffed lambda function passing for tile group handling. Need to prep multi-layer rendering for tile groups. --- Crawler/Crawler.cpp | 122 ++++++++++-------------- Crawler/Crawler.h | 1 + Crawler/Version.h | 2 +- Crawler/assets/config/configuration.txt | 3 + Crawler/olcPGEX_TransformedView.h | 8 +- Crawler/safemap.h | 1 + 6 files changed, 61 insertions(+), 76 deletions(-) diff --git a/Crawler/Crawler.cpp b/Crawler/Crawler.cpp index df941962..a319c387 100644 --- a/Crawler/Crawler.cpp +++ b/Crawler/Crawler.cpp @@ -26,6 +26,7 @@ std::vectorMONSTER_LIST; std::vectorSPAWNER_LIST; std::vector>DAMAGENUMBER_LIST; std::vector>BULLET_LIST; +safemapLEVEL_NAMES; utils::datafile DATA; Crawler*game; @@ -68,14 +69,7 @@ Crawler::Crawler() bool Crawler::OnUserCreate(){ - #define INITLEVEL(map) InitializeLevel("map_path"_S + "Levels."#map ## _S,map); - - INITLEVEL(WORLD_MAP); - - INITLEVEL(CAMPAIGN_1_1); - INITLEVEL(BOSS_1); - - INITLEVEL(CAMPAIGN_1_2); + InitializeLevels(); player=std::make_unique(); @@ -129,7 +123,7 @@ bool Crawler::OnUserCreate(){ sig::Animation::SetupPlayerAnimations(); view=TileTransformedView{GetScreenSize(),{1,1}}; - LoadLevel(BOSS_1); + LoadLevel(LEVEL_NAMES["starting_map"_S]); InitializeClasses(); ChangePlayerClass(WARRIOR); Warrior::ability4=Ranger::ability1; //Class ability swapping demonstration. @@ -926,69 +920,42 @@ void Crawler::LoadLevel(MapName map){ int tileSheetX=tileSheetIndex%tileSheetWidth; 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.yDecal(),vi2d{x,y}*24,vi2d{tileSheetX,tileSheetY}*24}; - if(IsForegroundTile(tileSheet,tileSheetIndex)&&foregroundTilesAdded.find({x,y})==foregroundTilesAdded.end()){ - std::queuetileGroupChecks; - TileGroup group; - foregroundTilesAdded.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)&&foregroundTilesAdded.find(pos)==foregroundTilesAdded.end()){ - foregroundTilesAdded.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; - upperForegroundTilesAdded.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(IsUpperForegroundTile(tileSheet,tileSheetIndex)&&upperForegroundTilesAdded.find(pos)==upperForegroundTilesAdded.end()){ - upperForegroundTilesAdded.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.yDrawDecal(WorldToScreen(pos), decal, scale * m_vWorldScale * m_vRecipPixel, tint); + pge->DrawDecal(WorldToScreen(pos), decal, vd2d(scale) * vd2d(m_vWorldScale) * vd2d(m_vRecipPixel), tint); } void TransformedView::DrawPartialDecal(const olc::vf2d & pos, olc::Decal * decal, const olc::vf2d & source_pos, const olc::vf2d & source_size, const olc::vf2d & scale, const olc::Pixel & tint) { - pge->DrawPartialDecal(WorldToScreen(pos), decal, source_pos, source_size, scale * m_vWorldScale * m_vRecipPixel, tint); + pge->DrawPartialDecal(WorldToScreen(pos), decal, source_pos, source_size, vd2d(scale)* vd2d(m_vWorldScale) * vd2d(m_vRecipPixel), tint); } void TransformedView::DrawPartialDecal(const olc::vf2d & pos, const olc::vf2d & size, olc::Decal * decal, const olc::vf2d & source_pos, const olc::vf2d & source_size, const olc::Pixel & tint) { - pge->DrawPartialDecal(WorldToScreen(pos), size * m_vWorldScale * m_vRecipPixel, decal, source_pos, source_size, tint); + pge->DrawPartialDecal(WorldToScreen(pos), vd2d(size)* vd2d(m_vWorldScale) * vd2d(m_vRecipPixel), decal, source_pos, source_size, tint); } void TransformedView::DrawExplicitDecal(olc::Decal* decal, const olc::vf2d* pos, const olc::vf2d* uv, const olc::Pixel* col, uint32_t elements) diff --git a/Crawler/safemap.h b/Crawler/safemap.h index 4aae118b..0714ba84 100644 --- a/Crawler/safemap.h +++ b/Crawler/safemap.h @@ -10,6 +10,7 @@ public: O&operator[](T key){ if(initialized&&map.count(key)==0){ std::cout<<"WARNING! Trying to get non-existent key "<