From 3561f6c9b0d982ee9c90e9cd65a2dbcdacf5c846 Mon Sep 17 00:00:00 2001 From: Claudio Hoffmann <hoffmanncl72341@th-nuernberg.de> Date: Tue, 19 Jan 2021 23:33:25 +0100 Subject: [PATCH] Level: Directly add a spawner trooper, rather than returning a std::unique_ptr Avoids the nullptr. --- Level.cpp | 16 +++++++--------- Level.hpp | 3 ++- main.cpp | 2 +- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/Level.cpp b/Level.cpp index 74232bb..49e0a47 100644 --- a/Level.cpp +++ b/Level.cpp @@ -132,21 +132,19 @@ void Level::addPlayerProjectile(PlayerProjectile const& projectile) // weberma73121> ---------------------------------------------------------------------- // <kruegerzo72182 ---------------------------------------------------------------------- -// pops the last trooper from the trooperSpawner and reduces the vector capacity -std::unique_ptr<Enemy> Level::getTrooperSpawn() +void Level::addTrooperFromSpawner() { - if(trooperSpawner.back() != 0){ - std::unique_ptr<Enemy> enemy_ptr = std::move(trooperSpawner.back()); - trooperSpawner.pop_back(); - trooperSpawner.shrink_to_fit(); - return enemy_ptr; + if(trooperSpawner.size() > 0){ + // Where is the std::vector pop_back() method that returns an rvalue + // reference, dear C++ committee?! Where is it?!? --hoffmanncl72341 + this->enemyVector_PushBack(std::move(trooperSpawner.back())); + trooperSpawner.pop_back(); } - else return nullptr; } unsigned int Level::getEnemySpawnCount() { - return static_cast<unsigned int>(trooperSpawner.capacity()); + return static_cast<unsigned int>(trooperSpawner.size()); } void Level::enemyVector_PushBack(std::unique_ptr<Enemy> enemy_) diff --git a/Level.hpp b/Level.hpp index bd2666f..8d5d898 100644 --- a/Level.hpp +++ b/Level.hpp @@ -127,7 +127,8 @@ public: void addScenery(Position const &topleft, SceneryType type); void addEnemy(std::unique_ptr<Enemy> enemy_); void fillTrooperSpawner(float posX, float posY, unsigned int nmbrEnemies); - std::unique_ptr<Enemy> getTrooperSpawn(); + // Adds a new trooper from the trooper spawner, if any. + void addTrooperFromSpawner(); unsigned int getEnemySpawnCount(); bool checkCollision(float posX, float posY, int bufferWidth, int bufferHeigth); // Did an enemy entity hit the player? diff --git a/main.cpp b/main.cpp index 3c2ecf2..c65f8d3 100644 --- a/main.cpp +++ b/main.cpp @@ -92,7 +92,7 @@ public: trooperTimer = trooperTimer + frame_time.count(); if(level.getEnemySpawnCount() != 0){ if(trooperTimer > trooperSpawnTime){ - level.enemyVector_PushBack(level.getTrooperSpawn()); + level.addTrooperFromSpawner(); trooperTimer = 0.0f; } } -- GitLab