diff --git a/Crawler/Crawler.cpp b/Crawler/Crawler.cpp index 42ef2be9..c54c3b1e 100644 --- a/Crawler/Crawler.cpp +++ b/Crawler/Crawler.cpp @@ -1062,7 +1062,7 @@ void Crawler::LoadLevel(MapName map){ monster_list.push_back({MonsterName(monsterTypeID),{monster.GetInteger("x")-spawnData.ObjectData.GetFloat("x"),monster.GetInteger("y")-spawnData.ObjectData.GetFloat("y")}}); } } - SPAWNER_LIST.push_back(MonsterSpawner{{spawnData.ObjectData.GetFloat("x"),spawnData.ObjectData.GetFloat("y")},spawnerRadius*2,monster_list}); + SPAWNER_LIST.push_back(MonsterSpawner{{spawnData.ObjectData.GetFloat("x"),spawnData.ObjectData.GetFloat("y")},spawnerRadius*2,monster_list,spawnData.upperLevel}); } std::setforegroundTilesAdded,upperForegroundTilesAdded; for(int x=0;x>monsters): - pos(pos),range(range),monsters(monsters){ +MonsterSpawner::MonsterSpawner(vf2d pos,vf2d range,std::vector>monsters,bool upperLevel): + pos(pos),range(range),monsters(monsters),upperLevel(upperLevel){ } bool MonsterSpawner::SpawnTriggered(){ return triggered; @@ -365,11 +365,15 @@ void MonsterSpawner::SetTriggered(bool trigger,bool spawnMonsters){ triggered=trigger; if(spawnMonsters){ for(std::pair&monsterInfo:monsters){ - MONSTER_LIST.push_back(Monster(pos+monsterInfo.second,MONSTER_DATA[monsterInfo.first])); + MONSTER_LIST.push_back(Monster(pos+monsterInfo.second,MONSTER_DATA[monsterInfo.first],DoesUpperLevelSpawning())); } } } +bool MonsterSpawner::DoesUpperLevelSpawning(){ + return upperLevel; +} + bool Monster::OnUpperLevel(){ return upperLevel; } diff --git a/Crawler/Monster.h b/Crawler/Monster.h index cc1c6841..698859b5 100644 --- a/Crawler/Monster.h +++ b/Crawler/Monster.h @@ -86,7 +86,7 @@ struct Monster{ protected: public: Monster()=delete; - Monster(vf2d pos,MonsterData data); + Monster(vf2d pos,MonsterData data,bool upperLevel=false); vf2d&GetPos(); int GetHealth(); int GetAttack(); @@ -127,13 +127,15 @@ struct MonsterSpawner{ vf2d range; std::vector>monsters; bool triggered=false; + bool upperLevel=false; public: MonsterSpawner(); //For the monster list, the second pair item is the position relative to the spawner to spawn the monster. - MonsterSpawner(vf2d pos,vf2d range,std::vector>MONSTER_LIST); + MonsterSpawner(vf2d pos,vf2d range,std::vector>MONSTER_LIST,bool upperLevel=false); bool SpawnTriggered(); vf2d GetRange(); vf2d GetPos(); + bool DoesUpperLevelSpawning(); void SetTriggered(bool trigger,bool spawnMonsters=true); friend std::ostream&operator<<(std::ostream&os,MonsterSpawner&rhs); }; \ No newline at end of file diff --git a/Crawler/Player.cpp b/Crawler/Player.cpp index bd2cce2e..9cd8c85a 100644 --- a/Crawler/Player.cpp +++ b/Crawler/Player.cpp @@ -392,7 +392,7 @@ Key Player::GetFacingDirection(){ void Player::Moved(){ for(MonsterSpawner&spawner:SPAWNER_LIST){ - if(!spawner.SpawnTriggered()&&geom2d::contains(geom2d::rect{spawner.GetPos(),spawner.GetRange()},pos)){ + if(!spawner.SpawnTriggered()&&spawner.DoesUpperLevelSpawning()==OnUpperLevel()&&geom2d::contains(geom2d::rect{spawner.GetPos(),spawner.GetRange()},pos)){ spawner.SetTriggered(true); } } diff --git a/Crawler/TMXParser.h b/Crawler/TMXParser.h index 036399ff..6e3da7d0 100644 --- a/Crawler/TMXParser.h +++ b/Crawler/TMXParser.h @@ -32,6 +32,7 @@ struct LayerTag{ struct SpawnerTag{ XMLTag ObjectData; std::vectormonsters; + bool upperLevel=false; std::string str(); friend std::ostream& operator << (std::ostream& os, SpawnerTag& rhs); }; @@ -217,6 +218,10 @@ typedef std::map>> ZoneData; LayerTag l = {newTag}; parsedMapInfo.LayerData.push_back(l); }else + if (newTag.tag=="object"&&newTag.data["type"]=="UpperSpawnGroup") { + parsedMapInfo.SpawnerData[newTag.GetInteger("id")]={newTag}; + parsedMapInfo.SpawnerData[newTag.GetInteger("id")].upperLevel=true; + } else if (newTag.tag=="object"&&newTag.data["type"]=="SpawnGroup") { parsedMapInfo.SpawnerData[newTag.GetInteger("id")]={newTag}; } else diff --git a/Crawler/Version.h b/Crawler/Version.h index 8969e349..f785eb15 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 586 +#define VERSION_BUILD 593 #define stringify(a) stringify_(a) #define stringify_(a) #a diff --git a/Crawler/assets/Campaigns/1_1.tmx b/Crawler/assets/Campaigns/1_1.tmx index 822f46ef..c1607b28 100644 --- a/Crawler/assets/Campaigns/1_1.tmx +++ b/Crawler/assets/Campaigns/1_1.tmx @@ -830,7 +830,7 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -1081,11 +1081,11 @@ - - + + - + @@ -1733,7 +1733,7 @@ - +