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