diff --git a/Crawler/ClassDiagram2.cd b/Crawler/ClassDiagram2.cd new file mode 100644 index 00000000..30adf5c5 --- /dev/null +++ b/Crawler/ClassDiagram2.cd @@ -0,0 +1,665 @@ + + + + + + OihgwhJkUjgrCYAAVgEdFoQkBECSBhEDncMJIEmEYAg= + Crawler.h + + + + + + BAAAAAQAQAgEAAAEAIBAAAAAAAAEAAAAAAgAgAAACAA= + C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um\gdipluseffects.h + + + + + + AAAAAAAAAAAAAAEAAIAAABAAABAAAAAAAAAAAAAAEAI= + Emitter.h + + + + + + AAQAAAAAAAAQAAAAAAAAAAAAABAAAAAAUAEAAAAAAgA= + olcPixelGameEngine.h + + + + + + AAEBAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAA= + olcPixelGameEngine.h + + + + + + AAAAAIAAAAAAAAAAAACAAAAAAAAAAIAAgAAAAAAAAAA= + olcPixelGameEngine.h + + + + + + AAAAAIAAAAAAAAAAAAAAAAIAAAAAAAAAgAAAAAAACAA= + olcPixelGameEngine.h + + + + + + AAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAA= + olcPixelGameEngine.h + + + + + + AAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABA= + olcPixelGameEngine.h + + + + + + gAAAAAAAABAIAACAAAAgAAAAAAAAAAAAAAAAAAAAgAA= + olcPixelGameEngine.h + + + + + + S5fpQ8sYZfjd1v02mw8U0Ed9QaLH2ByFmPRdWNHpuzs= + olcPixelGameEngine.h + + + + + + AAAIgAAAEAAAABAAAAAAAACAIAAAAAAAAQAEiAAACAA= + olcPixelGameEngine.h + + + + + + AAAIgAAAEQACAQAAAAAAhACAIAQAAAAAAYAEiAAAAAA= + olcPixelGameEngine.h + + + + + + gAgIgAAAEAQAAAAAAAAAAACAJAAAQAAAAQAEiAAAAAA= + olcPixelGameEngine.h + + + + + + AAAIgAAAEAAAAAAAAAAAAACAIAAAAAAAAQAEiAAAAAA= + olcPixelGameEngine.h + + + + + + AAAIgSAAEAAAgAAAAAAAAACAICgAAAAAAUAEiAAAAAA= + olcPixelGameEngine.h + + + + + + AAAIgEAAEAAAABAAAAAAAAOAIAAAAAAAAUAEiAAAAQA= + olcPixelGameEngine.h + + + + + + AAQAgAAAAAQAAAAAAAAAAAgAAAAAAEAQEAAAAAAAAAA= + olcPixelGameEngine.h + + + + + + SAAgAAAAAIBASAAACAAAAgAAAAAEAIBAAIBAAAEACgA= + olcPixelGameEngine.h + + + + + + SAAAAAAAAIBASAAACAAAAgAAAAAEAIBAAIBAAAEAAgA= + olcPixelGameEngine.h + + + + + + SAAAASAAQIBASCAACAAAAgAAAAAGAIBAAMJUAAEAAgA= + olcPixelGameEngine.h + + + + + + SCghAyFBQIBWSCIAGAAAIgABQAAGBJhBAsJMEEEACgg= + olcPixelGameEngine.h + + + + + + AAAAgAAAAAEAAAIAAIBAIAgAAAAAAAAAAAACgIAIAAA= + olcPixelGameEngine.h + + + + + + AAABABBAEAAQgAQBQAAAAABAAAAAIAAQAAEAAgAAEAI= + olcPixelGameEngine.h + + + + + + AAAAAAAAAAAABAAAAAAAEAAAAAEAAAAAAAIAAAAEAIA= + olcPGEX_TransformedView.h + + + + + + ABXBQAQAAFAGAzQACAMCyEQSUAAECDAQAsDE4AAIAog= + olcPGEX_TransformedView.h + + + + + + JDQCAAACoCBAAhIBBAAAAAiAAAgAECAAAAIAAXAAARY= + olcUTIL_Camera2D.h + + + + + + EgACAAIAMCAAAAIIAEAABAAgAQEAACAAAAACCAGAAIA= + olcUTIL_DataFile.h + + + + + + AAAAIAAAAAAAAAAAAAAEAAAAAAEAAAAAAAAQAAAAAAA= + olcUTIL_DataFile.h + + + + + + AAAAAAAAAAAAAAAAAAAEAAAAAAECAAAAAAAQAAAAAAA= + olcUTIL_DataFile.h + + + + + + AAAAAAAAAAAAAAAAAAAEAAAAAAUAAAAAAAAQAAAAAAA= + olcUTIL_DataFile.h + + + + + + AAAgAAAAAAAAAAAAAAAEAAAAAAEAAAAAAAAQAAAAAAA= + olcUTIL_DataFile.h + + + + + + AAAAEAAAAAEABAAAgIAAAAAAAAAAAAAAAAAABAAACAA= + olcUTIL_Animate2D.h + + + + + + AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAEAAAEAAAAAIE= + olcUTIL_Animate2D.h + + + + + + AAAAEAAAACAAAAEAAAAABAAAEAAAAAAAAEAAgBAAAAA= + olcUTIL_Animate2D.h + + + + + + AAAAEAAAABAAEAAAAAAAAAAAAAEAAAAAAAAAAAAAAAA= + safemap.h + + + + + + ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA= + Animation.h + + + + + + AAAAAAAAEAABYQAAAAAEAAAAACABIAAAKAAAAAAAAAA= + TMXParser.h + + + + + + AAIAAAAEEAAAAAAAAAAAAAAAAAAAAAAAIgAACAAQAAA= + TSXParser.h + + + + + + AAAABAAAAAAAAwACABAAAAAAACAEAAACAAAAAAAAAAA= + Ability.h + + + + + + AAAAAAAAAAAAAAAAAEAAAAAAAAAEAAAAAAAAAAAAAAA= + Animation.h + + + + + + CAQAQAAAAAABAAAAAIgAAAAAAAAAAAAAAAgAAAAAAAA= + BulletTypes.h + + + + + + AAAAAAIAAAAAAAAAAAAAAAAAAAABCAAAAAAAAAAAAAA= + Buff.h + + + + + + CgREEAAACAAAggAAIKgABYACAAAAABAMAEAAgQBQAgA= + Bullet.h + + + + + + AAAAAAAAAAAAAAAAAAAAAAABAAAEAAAAAIAACAAAAAA= + Player.h + + + + + + CAQAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAABAAAAAAAE= + BulletTypes.h + + + + + + AAgAAAAAIAAAwAAAAAAAAIACAAAAAAAAAAAAAAAAAAA= + DamageNumber.h + + + + + + AAQAAAgAAAAAAAAAAAAAABAABAAAAACIAAgAAAAAAAA= + Emitter.h + + + + + + CAQAAAAACAAAAAAAAAgAAAAAAAAEAAAAAAAAAAAAAAA= + BulletTypes.h + + + + + + CAQAAAAAAAAAAAAAAAgAAAAAAAAEAAAAAAAAAAAQAAA= + BulletTypes.h + + + + + + AAAAACAAAAAAAAAAAAAAAAAAAgAAACAAAAAAAAAAAAA= + TMXParser.h + + + + + + CAQAAAAAAAAAAAAAAAgAAAAAAAAkAAAAAAAAAAAAAAA= + BulletTypes.h + + + + + + AAQAAAQAAAAQAAACAAAAAAAAAAAAAAAACACAAEAAAAA= + TMXParser.h + + + + + + AAAAAAAIAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAA= + TMXParser.h + + + + + + AAQAAAAAAAAAQgAAAAEAAAAAAAAAAAAAAAAAAACAAAA= + Effect.h + + + + + + + + + + + Monster.h + + + + + FSSAFFAEAKB4CxYAIKAOBIgBIYYC8gAEikFMCRCwkgE= + Monster.h + + + + + + EAAACGAAsABAAQEQAIAAgAAQAAAEECAQgABAAiAQIkA= + Monster.h + + + + + + AAAAAAAIQAAAAAAAAIgIAIgAAAAAAAAAAAgBAgAAgAA= + Monster.h + + + + + + AgAAAACAAAAAAACAAAAAAIAAAAAQBAAAAAgAAAAAAgA= + olcPixelGameEngine.h + + + + + + AAAgAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAgA= + olcPixelGameEngine.h + + + + + + AkAIAAAAAAAAABAABQAACAAAAAABQAAAAAAAAAAAAAA= + olcPixelGameEngine.h + + + + + + AAAAIAAAAAAAAAAAAAABAQAAAAAAAAAAAAAgAAAAAAA= + olcPixelGameEngine.h + + + + + + AAAAAAIAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAA= + olcPixelGameEngine.h + + + + + + AAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA= + olcUTIL_Animate2D.h + + + + + + AAAAAAAAAAAAAQAEAAgAAAAAAAAAAAAAQAAAAAAAIAA= + Pathfinding.h + + + + + + EO9g1XQE4IJq4TbQBqAlYY0RO0YCNkh05FFEjTtkojQ= + Player.h + + + + + + AAAAAAAIAAAAAAAEAIAAAAABAAAAAAAAAAAgAAAAAAA= + Ability.h + + + + + + AAQBAAAAAAAAAgAAAAAAAEAAAAAAAAAAAAAAEAAAAAE= + Effect.h + + + + + + AAkAwQEAQAAIqQBQAAAEIAQACAAEMgAABAAEAAkgAgA= + Player.h + + + + + + AAAAAAAAQAAIAAAAAIAAAAAAAAAAACAAAAAAAAAAAAA= + TMXParser.h + + + + + + AAkAwQEAYAAIoQBQAAAEIAQACAAEMgAABAAEAAkgAgA= + Player.h + + + + + + AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Map.h + + + + + + CDAAAAAISAgAAAAAAAAAAAAAAgAAACAAAAkAADAAQAA= + Map.h + + + + + + AAAAAAAEAAAAAAAAAAAAAIAAQAAAAAAAIAAAAAAAAAA= + Map.h + + + + + + AAAAAIAAAgAAAAAAgAAAAIAAAQAAAAAAAAAABAAAAAA= + TSXParser.h + + + + + + AAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAIAAEAQIAAAA= + Map.h + + + + + + AAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAA= + Crawler.h + + + + + + AAkAwQEAQAAIoQBQAAAEIAQECAAEMgAABAAEAAkgAgA= + Player.h + + + + + + ACkAgQEAQAAIoQBQAAAEAAQACAAEIgAAAAAEAAkAAgA= + Player.h + + + + + + AAkAwQEAQAAIoQBQAAAEKAQACAAEMgAABAAEAAkgAgA= + Player.h + + + + + + AAkAwQEAQAAIoQBQAAAEIAQACAAEMgAABAIEAAkgAgA= + Player.h + + + + + + AACAACAgACAAAIAAAAAAAAAAAAAAACAAAAAQAAAAQAA= + TMXParser.h + + + + + + AQQBgAAAAAoAAIAAAAAAAAIAJAAAAACAAAAAAAAAAAI= + MonsterAttribute.h + + + + + + AAgAIAAAAAAAAAAAAAAAAAAAAEAgAAAAAAAAAAAAAAA= + Buff.h + + + + + + AACAAAAAAAAAAAAAAAgAAAAEAAggAAAAAAAAAAAACAA= + Class.h + + + + + + AAAAABAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Map.h + + + + + + AAAEAAAAAAAAgAAACAAAAAAAQAAAAAAAAAAAAAAAAAA= + Monster.h + + + + + + AAgAAAAAACCAAAAAABAAAIAAAAAAAAAAAAAgAAAABAA= + olcPixelGameEngine.h + + + + + + AAAAAAACAAAAAAAAAAAAAIAAAAEQAAAAAAAAAAAAAAA= + olcPixelGameEngine.h + + + + + + IgBKPCYRIAQCigCAAQAAwU8kkgMKYJhzAAAAvv//YQE= + olcPixelGameEngine.h + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAgCA= + olcPixelGameEngine.h + + + + + + AAAAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAICAAAAAAA= + olcUTIL_Animate2D.h + + + + + + AAAAAABAQCAAgCAACABABEBKAgACAAAABAgAAAAAAAA= + State.h + + + + \ No newline at end of file diff --git a/Crawler/ClassDiagram2.png b/Crawler/ClassDiagram2.png new file mode 100644 index 00000000..c886bad1 Binary files /dev/null and b/Crawler/ClassDiagram2.png differ diff --git a/Crawler/Crawler.cpp b/Crawler/Crawler.cpp index af9ad941..a19937da 100644 --- a/Crawler/Crawler.cpp +++ b/Crawler/Crawler.cpp @@ -213,8 +213,8 @@ void Crawler::HandleUserInput(float fElapsedTime){ int truncatedPlayerY=int(player->GetY())/24; int tileID=layer.tiles[truncatedPlayerY][truncatedPlayerX]; TilesheetData dat=GetTileSheet(GetCurrentLevel(),tileID); - if (dat.tileset.staircaseTiles.find(tileID)!=dat.tileset.staircaseTiles.end()){ - return dat.tileset.staircaseTiles[tileID].data["value"]; + if (dat.tileset->staircaseTiles.find(tileID)!=dat.tileset->staircaseTiles.end()){ + return dat.tileset->staircaseTiles[tileID].data["value"]; } } return std::string("NONE"); @@ -522,6 +522,32 @@ void Crawler::PopulateRenderLists(std::vector&monstersBeforeLower,std: std::sort(monstersAfterLower.begin(),monstersAfterLower.end(),[](Monster*m1,Monster*m2){return m1->GetPos().yGetPos().y;}); } +void Crawler::RenderTile(vi2d pos,TilesheetData tileSheet,int tileSheetIndex,vi2d tileSheetPos){ + if(tileSheet.tileset->animationData.count(tileSheetIndex)){ + int animationDuration_ms=tileSheet.tileset->animationData[tileSheetIndex].size()*"animation_tile_precision"_I; + int animatedIndex=tileSheet.tileset->animationData[tileSheetIndex][int(fmod(levelTime*1000,animationDuration_ms)/"animation_tile_precision"_I)]; + int tileSheetWidth=tileSheet.tileset->tileset->Sprite()->width/24; + int tileSheetX=animatedIndex%tileSheetWidth; + int tileSheetY=animatedIndex/tileSheetWidth; + view.DrawPartialDecal(pos*24,{24,24},tileSheet.tileset->tileset->Decal(),vi2d{tileSheetX,tileSheetY}*24,{24,24}); + }else{ + view.DrawPartialDecal(pos*24,{24,24},tileSheet.tileset->tileset->Decal(),tileSheetPos*24,{24,24}); + } +} + +void Crawler::RenderTile(TileRenderData&tileSheet,Pixel col){ + if(tileSheet.tileSheet.tileset->animationData.count(tileSheet.tileID)){ + int animationDuration_ms=tileSheet.tileSheet.tileset->animationData[tileSheet.tileID].size()*"animation_tile_precision"_I; + int animatedIndex=tileSheet.tileSheet.tileset->animationData[tileSheet.tileID][int(fmod(levelTime*1000,animationDuration_ms)/"animation_tile_precision"_I)]; + int tileSheetWidth=tileSheet.tileSheet.tileset->tileset->Sprite()->width/24; + int tileSheetX=animatedIndex%tileSheetWidth; + int tileSheetY=animatedIndex/tileSheetWidth; + view.DrawPartialDecal(tileSheet.pos,{24,24},tileSheet.tileSheet.tileset->tileset->Decal(),vi2d{tileSheetX,tileSheetY},{24,24},col); + }else{ + view.DrawPartialDecal(tileSheet.pos,{24,24},tileSheet.tileSheet.tileset->tileset->Decal(),tileSheet.tileSheetPos,{24,24},col); + } +} + void Crawler::RenderWorld(float fElapsedTime){ Clear({100,180,100}); LayerTag*bridgeLayer=nullptr; @@ -548,17 +574,17 @@ void Crawler::RenderWorld(float fElapsedTime){ int tileID=layer.tiles[y][x]-1; if(tileID!=-1){ TilesheetData tileSheet=GetTileSheet(currentLevel,tileID); - int tileSheetWidth=tileSheet.tileset.tileset->Sprite()->width/24; - int tileSheetHeight=tileSheet.tileset.tileset->Sprite()->height/24; + 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; if(!IsForegroundTile(tileSheet,tileSheetIndex)&&!IsUpperForegroundTile(tileSheetIndex)){ - view.DrawPartialDecal(vi2d{x,y}*24,{24,24},tileSheet.tileset.tileset->Decal(),vi2d{tileSheetX,tileSheetY}*24,{24,24}); + RenderTile({x,y},tileSheet,tileSheetIndex,{tileSheetX,tileSheetY}); } if("debug_collision_boxes"_I){ - if(tileSheet.tileset.collision.find(tileSheetIndex)!=tileSheet.tileset.collision.end()){ - geom2d::rectcollision=tileSheet.tileset.collision[tileSheetIndex].collision; + if(tileSheet.tileset->collision.find(tileSheetIndex)!=tileSheet.tileset->collision.end()){ + geom2d::rectcollision=tileSheet.tileset->collision[tileSheetIndex].collision; view.FillRectDecal(vi2d{x,y}*24+collision.pos,collision.size,{0,0,0,128}); view.DrawRectDecal(vi2d{x,y}*24+collision.pos,collision.size,GREY); } @@ -655,7 +681,7 @@ void Crawler::RenderWorld(float fElapsedTime){ group.fadeFactor=std::max(group.fadeFactor-fElapsedTime,0.f); } for(TileRenderData&tile:group.GetTiles()){ - view.DrawPartialDecal(tile.pos,{24,24},tile.tileset,tile.tileSheetPos,{24,24},{255,255,255,uint8_t(255-group.fadeFactor/TileGroup::FADE_TIME*TileGroup::FADE_AMT)}); + RenderTile(tile,{255,255,255,uint8_t(255-group.fadeFactor/TileGroup::FADE_TIME*TileGroup::FADE_AMT)}); } } } @@ -668,12 +694,12 @@ void Crawler::RenderWorld(float fElapsedTime){ int tileID=bridgeLayer->tiles[y][x]-1; if(tileID!=-1){ TilesheetData tileSheet=GetTileSheet(currentLevel,tileID); - int tileSheetWidth=tileSheet.tileset.tileset->Sprite()->width/24; - int tileSheetHeight=tileSheet.tileset.tileset->Sprite()->height/24; + 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; - view.DrawPartialDecal(vi2d{x,y}*24,{24,24},tileSheet.tileset.tileset->Decal(),vi2d{tileSheetX,tileSheetY}*24,{24,24},{255,255,255,uint8_t(255-bridgeFadeFactor/TileGroup::FADE_TIME*TileGroup::FADE_AMT)}); + view.DrawPartialDecal(vi2d{x,y}*24,{24,24},tileSheet.tileset->tileset->Decal(),vi2d{tileSheetX,tileSheetY}*24,{24,24},{255,255,255,uint8_t(255-bridgeFadeFactor/TileGroup::FADE_TIME*TileGroup::FADE_AMT)}); #ifdef DEBUG_COLLISIONS if(tileSheet.tileset.collision.find(tileSheetIndex)!=tileSheet.tileset.collision.end()){ geom2d::rectcollision=tileSheet.tileset.collision[tileSheetIndex].collision; @@ -718,7 +744,7 @@ void Crawler::RenderWorld(float fElapsedTime){ group.fadeFactor=std::max(group.fadeFactor-fElapsedTime,0.f); } for(TileRenderData&tile:group.GetTiles()){ - view.DrawPartialDecal(tile.pos,{24,24},tile.tileset,tile.tileSheetPos,{24,24},{255,255,255,uint8_t(255-group.fadeFactor/TileGroup::FADE_TIME*TileGroup::FADE_AMT)}); + RenderTile(tile,{255,255,255,uint8_t(255-group.fadeFactor/TileGroup::FADE_TIME*TileGroup::FADE_AMT)}); } } #pragma endregion @@ -937,8 +963,8 @@ void Crawler::LoadLevel(MapName map){ int tileID=layer.tiles[y][x]-1; if(tileID!=-1){ TilesheetData tileSheet=GetTileSheet(currentLevel,tileID); - int tileSheetWidth=tileSheet.tileset.tileset->Sprite()->width/24; - int tileSheetHeight=tileSheet.tileset.tileset->Sprite()->height/24; + int tileSheetWidth=tileSheet.tileset->tileset->Sprite()->width/24; + int tileSheetHeight=tileSheet.tileset->tileset->Sprite()->height/24; int tileSheetIndex=tileID-(tileSheet.firstgid-1); int realTileSheetIndex=(tileID%1000000)-(tileSheet.firstgid-1); int tileSheetX=realTileSheetIndex%tileSheetWidth; @@ -961,13 +987,13 @@ void Crawler::LoadLevel(MapName map){ if(!loopAll&&&layer==&layer2){layer2ID++;continue;}; int tileID=layer2.tiles[pos.y][pos.x]-1; TilesheetData tileSheet=GetTileSheet(currentLevel,tileID%1000000); - int tileSheetWidth=tileSheet.tileset.tileset->Sprite()->width/24; - int tileSheetHeight=tileSheet.tileset.tileset->Sprite()->height/24; + int tileSheetWidth=tileSheet.tileset->tileset->Sprite()->width/24; + int tileSheetHeight=tileSheet.tileset->tileset->Sprite()->height/24; int tileSheetIndex=tileID-(tileSheet.firstgid-1); int realTileSheetIndex=(tileID%1000000)-(tileSheet.firstgid-1); int tileSheetX=realTileSheetIndex%tileSheetWidth; int tileSheetY=realTileSheetIndex/tileSheetWidth; - TileRenderData tile={tileSheet.tileset.tileset->Decal(),vi2d{pos.x,pos.y}*24,vi2d{tileSheetX,tileSheetY}*24,layer2ID}; + TileRenderData tile={tileSheet,vi2d{pos.x,pos.y}*24,vi2d{tileSheetX,tileSheetY}*24,realTileSheetIndex,layer2ID}; if(IsForeground(tileSheet,tileSheetIndex)){ foregroundTilesIncluded.insert({pos.x,pos.y}); group.InsertTile(tile); @@ -996,7 +1022,7 @@ void Crawler::LoadLevel(MapName map){ groups.push_back(group); } }; - TileRenderData tile={tileSheet.tileset.tileset->Decal(),vi2d{x,y}*24,vi2d{tileSheetX,tileSheetY}*24,layerID}; + TileRenderData tile={tileSheet,vi2d{x,y}*24,vi2d{tileSheetX,tileSheetY}*24,realTileSheetIndex,layerID}; SetupTileGroups([&](TilesheetData sheet,int tileID){return IsForegroundTile(sheet,tileID);},tile,foregroundTilesAdded,foregroundTileGroups); SetupTileGroups([&](TilesheetData sheet,int tileID){return IsUpperForegroundTile(tileID);},tile,upperForegroundTilesAdded,upperForegroundTileGroups); #pragma endregion @@ -1047,7 +1073,7 @@ bool Crawler::IsUpperForegroundTile(int tileID){ } bool Crawler::IsForegroundTile(TilesheetData sheet,int tileID){ - return sheet.tileset.foregroundTiles.find(tileID)!=sheet.tileset.foregroundTiles.end(); + return sheet.tileset->foregroundTiles.find(tileID)!=sheet.tileset->foregroundTiles.end(); } TilesheetData Crawler::GetTileSheet(MapName map,int tileID){ @@ -1055,18 +1081,18 @@ TilesheetData Crawler::GetTileSheet(MapName map,int tileID){ if(tileData.size()==1){ size_t slashMarkerSourceDir = tileData[0].data["source"].find_last_of('/'); std::string baseSourceDir=tileData[0].data["source"].substr(slashMarkerSourceDir+1); - return {MAP_TILESETS["assets/maps/"+baseSourceDir],1}; + return {&MAP_TILESETS["assets/maps/"+baseSourceDir],1}; } else { for (int i=1;iCrawler::GetTileCollision(MapName map,vf2d pos,bool upperLevel) if(upperLevel&&bridgeLayerIndex!=-1){ int tileID=MAP_DATA[map].LayerData[bridgeLayerIndex].tiles[int(pos.y)/24][int(pos.x)/24]-1; if(tileID!=-1){ - if (GetTileSheet(map,tileID%1000000).tileset.collision.find(tileID%1000000-GetTileSheet(map,tileID%1000000).firstgid+1)!=GetTileSheet(map,tileID%1000000).tileset.collision.end()){ - return GetTileSheet(map,tileID%1000000).tileset.collision[tileID%1000000-GetTileSheet(map,tileID%1000000).firstgid+1].collision; + if (GetTileSheet(map,tileID%1000000).tileset->collision.find(tileID%1000000-GetTileSheet(map,tileID%1000000).firstgid+1)!=GetTileSheet(map,tileID%1000000).tileset->collision.end()){ + return GetTileSheet(map,tileID%1000000).tileset->collision[tileID%1000000-GetTileSheet(map,tileID%1000000).firstgid+1].collision; } return NO_COLLISION; } @@ -1108,8 +1134,8 @@ geom2d::rectCrawler::GetTileCollision(MapName map,vf2d pos,bool upperLevel) auto HasNoClass=[&](){return layer.tag.data.find("class")==layer.tag.data.end();}; if(HasNoClass()&&counter!=bridgeLayerIndex){ int tileID=layer.tiles[int(pos.y)/24][int(pos.x)/24]-1; - if(tileID!=-1&&GetTileSheet(map,tileID%1000000).tileset.collision.find(tileID%1000000-GetTileSheet(map,tileID%1000000).firstgid+1)!=GetTileSheet(map,tileID%1000000).tileset.collision.end()){ - geom2d::rectcollisionRect=GetTileSheet(map,tileID%1000000).tileset.collision[tileID%1000000-GetTileSheet(map,tileID%1000000).firstgid+1].collision; + if(tileID!=-1&&GetTileSheet(map,tileID%1000000).tileset->collision.find(tileID%1000000-GetTileSheet(map,tileID%1000000).firstgid+1)!=GetTileSheet(map,tileID%1000000).tileset->collision.end()){ + geom2d::rectcollisionRect=GetTileSheet(map,tileID%1000000).tileset->collision[tileID%1000000-GetTileSheet(map,tileID%1000000).firstgid+1].collision; if(foundRect.pos==NO_COLLISION.pos&&foundRect.size==NO_COLLISION.size){ foundRect=collisionRect; }else{ diff --git a/Crawler/Crawler.h b/Crawler/Crawler.h index 97560918..34ae62f7 100644 --- a/Crawler/Crawler.h +++ b/Crawler/Crawler.h @@ -12,11 +12,6 @@ #include "TMXParser.h" #include "olcUTIL_DataFile.h" -struct TilesheetData{ - TilesetData&tileset; - int firstgid; -}; - class Crawler : public olc::PixelGameEngine { friend class sig::Animation; @@ -112,6 +107,8 @@ public: datafiledoubledata GetDoubleList(std::string key); static void OutputDebugInfo(const char*key,std::size_t len); void InitializeLevels(); + void RenderTile(vi2d pos,TilesheetData tileSheet,int tileSheetIndex,vi2d tileSheetPos); + void RenderTile(TileRenderData&tileSheet,Pixel col); struct TileGroupData{ vi2d tilePos; diff --git a/Crawler/Crawler.vcxproj b/Crawler/Crawler.vcxproj index d4108078..09191c04 100644 --- a/Crawler/Crawler.vcxproj +++ b/Crawler/Crawler.vcxproj @@ -327,6 +327,7 @@ + diff --git a/Crawler/Crawler.vcxproj.filters b/Crawler/Crawler.vcxproj.filters index b356cacf..a5459957 100644 --- a/Crawler/Crawler.vcxproj.filters +++ b/Crawler/Crawler.vcxproj.filters @@ -242,6 +242,7 @@ + diff --git a/Crawler/Map.h b/Crawler/Map.h index 2a7706d1..6ae56e7b 100644 --- a/Crawler/Map.h +++ b/Crawler/Map.h @@ -20,13 +20,19 @@ struct TilesetData{ std::mapupperForegroundTiles; std::mapcollision; std::mapstaircaseTiles; - std::map>> animationData; + std::map>animationData; +}; + +struct TilesheetData{ + TilesetData*tileset; + int firstgid; }; struct TileRenderData{ - Decal*tileset; + TilesheetData tileSheet; vi2d pos; vi2d tileSheetPos; + int tileID; int layerID; }; diff --git a/Crawler/TMXParser.h b/Crawler/TMXParser.h index 4bcad5e8..3b8d08a7 100644 --- a/Crawler/TMXParser.h +++ b/Crawler/TMXParser.h @@ -331,6 +331,9 @@ typedef std::map>> ZoneData; continueSpawnerLoop: continue; } + + std::sort(parsedMapInfo.TilesetData.begin(),parsedMapInfo.TilesetData.end(),[](XMLTag&t1,XMLTag&t2){return t1.GetInteger("firstgid") UpperForegroundTileData; std::map CollisionData; std::map StaircaseData; - std::map>> AnimationData; + std::map> AnimationData; friend std::ostream& operator << (std::ostream& os, Tileset& rhs); }; @@ -104,7 +105,10 @@ class TSXParser{ previousTagID=newTag.GetInteger("id"); } else if (newTag.tag=="frame"){ - parsedTilesetInfo.AnimationData[previousTagID].push_back({newTag.GetInteger("tileid"),newTag.GetInteger("duration")}); + //The way animation data is stored is every "animation_tile_precision" ms indicating which frame we should be on. + for(int i=0;i