diff options
| -rw-r--r-- | src/crepe/ComponentManager.hpp | 14 | ||||
| -rw-r--r-- | src/crepe/api/BehaviorScript.h | 5 | 
2 files changed, 10 insertions, 9 deletions
| diff --git a/src/crepe/ComponentManager.hpp b/src/crepe/ComponentManager.hpp index e74f2e9..89ed111 100644 --- a/src/crepe/ComponentManager.hpp +++ b/src/crepe/ComponentManager.hpp @@ -30,12 +30,16 @@ T & ComponentManager::add_component(uint32_t id, Args &&... args) {  	// Create a new component of type T (arguments directly forwarded). The  	// constructor must be called by ComponentManager. -	T * instance_pointer = new T(id, forward<Args>(args)...); -	unique_ptr<T> instance = unique_ptr<T>(instance_pointer); +	T * instance_ptr = new T(id, forward<Args>(args)...); +	if (instance_ptr == nullptr) +		throw std::bad_alloc(); + +	T & instance_ref = *instance_ptr; +	unique_ptr<T> instance = unique_ptr<T>(instance_ptr);  	// Check if the vector size is not greater than get_instances_max -	if (instance->get_instances_max() != -1 -		&& components[type][id].size() >= instance->get_instances_max()) { +	int max_instances = instance->get_instances_max(); +	if (max_instances != -1 && components[type][id].size() >= max_instances) {  		// TODO: Exception  		throw std::runtime_error(  			"Exceeded maximum number of instances for this component type"); @@ -44,7 +48,7 @@ T & ComponentManager::add_component(uint32_t id, Args &&... args) {  	// store its unique_ptr in the vector<>  	components[type][id].push_back(std::move(instance)); -	return *instance; +	return instance_ref;  }  template <typename T> diff --git a/src/crepe/api/BehaviorScript.h b/src/crepe/api/BehaviorScript.h index 21638f4..6b1fec7 100644 --- a/src/crepe/api/BehaviorScript.h +++ b/src/crepe/api/BehaviorScript.h @@ -5,12 +5,9 @@  #include "../Component.h"  namespace crepe { +  class ScriptSystem;  class ComponentManager; -} // namespace crepe - -namespace crepe { -  class Script;  class BehaviorScript : public Component { |