From d6e9ade54ee392c4bd256493facecb7e879d68fb Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Thu, 22 Jun 2023 02:46:38 -0700 Subject: [PATCH] Made map data xml tag more specific (output width and height as values). Add load level functionality, changes world size. --- Crawler/Crawler.cpp | 13 ++++++++++++- Crawler/Crawler.h | 5 ++++- Crawler/Monster.cpp | 16 ++++++++-------- Crawler/Player.cpp | 4 ++-- Crawler/TMXParser.h | 14 ++++++++++++-- Crawler/Version.h | 2 +- 6 files changed, 39 insertions(+), 15 deletions(-) diff --git a/Crawler/Crawler.cpp b/Crawler/Crawler.cpp index e83e13df..edf359a4 100644 --- a/Crawler/Crawler.cpp +++ b/Crawler/Crawler.cpp @@ -133,6 +133,8 @@ bool Crawler::OnUserCreate(){ ,{MonsterName::SLIME_BLUE,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}} }})); + LoadLevel(CAMPAIGN_1_1); + return true; } @@ -655,6 +657,7 @@ void Crawler::RenderWorld(float fElapsedTime){ } } } + //DrawDecal({0,0},MAP_TILESETS["assets/maps/"+MAP_DATA[LEVEL1].TilesetData[1].data["source"]]->Decal()); std::vectormonstersBefore,monstersAfter; Player&pl=player; std::copy_if(MONSTER_LIST.begin(),MONSTER_LIST.end(),std::back_inserter(monstersBefore),[&pl](Monster&m){return m.GetPos().yDecal()); } void Crawler::AddEffect(Effect foreground,Effect background){ @@ -811,6 +813,15 @@ void Crawler::InitializeLevel(std::string mapFile,MapName map){ } } +void Crawler::LoadLevel(MapName map){ + currentLevel=map; + WORLD_SIZE={MAP_DATA[map].MapData.width,MAP_DATA[map].MapData.height}; +} + +vi2d Crawler::GetWorldSize(){ + return WORLD_SIZE; +} + int main() { Crawler demo; diff --git a/Crawler/Crawler.h b/Crawler/Crawler.h index de3cb2da..745d2bce 100644 --- a/Crawler/Crawler.h +++ b/Crawler/Crawler.h @@ -27,17 +27,19 @@ class Crawler : public olc::PixelGameEngine float lastWorldShakeAdjust=0; vf2d worldShakeVel={}; const float WORLD_SHAKE_ADJUST_MAX_TIME=0.4; + MapName currentLevel=MapName::CAMPAIGN_1_1; + vi2d WORLD_SIZE={120,8}; public: Crawler(); public: - const vi2d WORLD_SIZE={120,8}; TileTransformedView view; bool OnUserCreate() override; bool OnUserUpdate(float fElapsedTime) override; void InitializeAnimations(); void InitializeLevel(std::string mapFile,MapName map); + void LoadLevel(MapName map); void HandleUserInput(float fElapsedTime); void UpdateCamera(float fElapsedTime); void UpdateEffects(float fElapsedTime); @@ -59,4 +61,5 @@ public: bool DownReleased(); Player&GetPlayer(); void SetupWorldShake(float duration); + vi2d GetWorldSize(); }; \ No newline at end of file diff --git a/Crawler/Monster.cpp b/Crawler/Monster.cpp index 31862038..3c26069d 100644 --- a/Crawler/Monster.cpp +++ b/Crawler/Monster.cpp @@ -106,17 +106,17 @@ void Monster::PerformShootAnimation(){ } } void Monster::SetX(float x){ - if(x-12*size>0&&x+12*sizeWORLD_SIZE.x*24){ + if(x-12*size>0&&x+12*sizeGetWorldSize().x*24){ pos.x=x; } else { - pos.x=std::min(game->WORLD_SIZE.x*24-12*size,std::max(12*size,pos.x)); + pos.x=std::min(game->GetWorldSize().x*24-12*size,std::max(12*size,pos.x)); } } void Monster::SetY(float y){ - if(y-12*size>0&&y+12*sizeWORLD_SIZE.y*24){ + if(y-12*size>0&&y+12*sizeGetWorldSize().y*24){ pos.y=y; } else { - pos.y=std::min(game->WORLD_SIZE.y*24-12*size,std::max(12*size,pos.y)); + pos.y=std::min(game->GetWorldSize().y*24-12*size,std::max(12*size,pos.y)); } } bool Monster::Update(float fElapsedTime){ @@ -187,11 +187,11 @@ bool Monster::Update(float fElapsedTime){ targetAcquireTimer=1; if(line.length()<24*6){ target=line.upoint(-1.2); - if(pos.x-12*size>1&&pos.x+12*sizeWORLD_SIZE.x*24-1&& - pos.y-12*size>1&&pos.y+12*sizeWORLD_SIZE.y*24-1){ + if(pos.x-12*size>1&&pos.x+12*sizeGetWorldSize().x*24-1&& + pos.y-12*size>1&&pos.y+12*sizeGetWorldSize().y*24-1){ state=MOVE_AWAY; } else - if(pos.x-12*size<=1||pos.x+12*size>=game->WORLD_SIZE.x*24-1){ + if(pos.x-12*size<=1||pos.x+12*size>=game->GetWorldSize().x*24-1){ geom2d::line moveTowardsLine=geom2d::line(pos,target); if(abs(moveTowardsLine.vector().norm().y)>=0.5){ state=MOVE_AWAY; @@ -199,7 +199,7 @@ bool Monster::Update(float fElapsedTime){ state=NORMAL; } } else - if(pos.y-12*size<=1||pos.y+12*size>=game->WORLD_SIZE.y*24-1){ + if(pos.y-12*size<=1||pos.y+12*size>=game->GetWorldSize().y*24-1){ geom2d::line moveTowardsLine=geom2d::line(pos,target); if(abs(moveTowardsLine.vector().norm().x)>=0.5){ state=MOVE_AWAY; diff --git a/Crawler/Player.cpp b/Crawler/Player.cpp index 31af2822..7bbfc2e7 100644 --- a/Crawler/Player.cpp +++ b/Crawler/Player.cpp @@ -221,11 +221,11 @@ void Player::Update(float fElapsedTime){ vel.y=std::min(0.f,vel.y+friction*fElapsedTime); } float newX=pos.x+vel.x*fElapsedTime; - if(newX-12*size>0&&newX+12*sizeWORLD_SIZE.x*24){ + if(newX-12*size>0&&newX+12*sizeGetWorldSize().x*24){ pos.x=newX; } float newY=pos.y+vel.y*fElapsedTime; - if(newY-12*size>0&&newY+12*sizeWORLD_SIZE.y*24){ + if(newY-12*size>0&&newY+12*sizeGetWorldSize().y*24){ pos.y=newY; } if(attack_cooldown_timer==0&&game->GetMouse(0).bHeld){ diff --git a/Crawler/TMXParser.h b/Crawler/TMXParser.h index 9895c2d4..26002e28 100644 --- a/Crawler/TMXParser.h +++ b/Crawler/TMXParser.h @@ -15,6 +15,11 @@ struct XMLTag{ bool GetBool(std::string dataTag); }; +struct MapTag{ + int width,height; + friend std::ostream& operator << (std::ostream& os, MapTag& rhs); +}; + struct LayerTag{ XMLTag tag; std::vector> tiles; @@ -29,7 +34,7 @@ struct SpawnerTag{ }; struct Map{ - XMLTag MapData; + MapTag MapData; std::vector TilesetData; std::vector LayerData; std::vector SpawnerData; @@ -66,6 +71,11 @@ class TMXParser{ rhs.FormatTagData(rhs.data) <<"\n"; return os; } + std::ostream& operator << (std::ostream& os, MapTag& rhs){ + os << + "(width:"<