diff options
Diffstat (limited to 'src/crepe/api')
| -rw-r--r-- | src/crepe/api/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/crepe/api/Config.h | 13 | ||||
| -rw-r--r-- | src/crepe/api/LoopManager.cpp | 2 | ||||
| -rw-r--r-- | src/crepe/api/LoopTimer.cpp | 2 | ||||
| -rw-r--r-- | src/crepe/api/LoopTimer.h | 4 | ||||
| -rw-r--r-- | src/crepe/api/Scene.cpp | 5 | ||||
| -rw-r--r-- | src/crepe/api/Scene.h | 23 | ||||
| -rw-r--r-- | src/crepe/api/SceneManager.h | 4 | ||||
| -rw-r--r-- | src/crepe/api/SceneManager.hpp | 12 | ||||
| -rw-r--r-- | src/crepe/api/Texture.cpp | 13 | ||||
| -rw-r--r-- | src/crepe/api/Texture.h | 12 | 
11 files changed, 44 insertions, 47 deletions
| diff --git a/src/crepe/api/CMakeLists.txt b/src/crepe/api/CMakeLists.txt index c3e0b37..50c51ed 100644 --- a/src/crepe/api/CMakeLists.txt +++ b/src/crepe/api/CMakeLists.txt @@ -12,7 +12,6 @@ target_sources(crepe PUBLIC  	SaveManager.cpp  	Config.cpp  	Metadata.cpp -	Scene.cpp  	SceneManager.cpp  	Camera.cpp  	Animator.cpp diff --git a/src/crepe/api/Config.h b/src/crepe/api/Config.h index 13eabd1..0c9d116 100644 --- a/src/crepe/api/Config.h +++ b/src/crepe/api/Config.h @@ -11,19 +11,18 @@ namespace crepe {   * modified *before* execution is handed over from the game programmer to the engine (i.e. the   * main loop is started).   */ -class Config { +class Config final {  public:  	//! Retrieve handle to global Config instance  	static Config & get_instance();  private:  	Config() = default; - -	// singleton -	Config(const Config &) = delete; -	Config(Config &&) = delete; -	Config & operator=(const Config &) = delete; -	Config & operator=(Config &&) = delete; +	~Config() = default; +	Config(const Config &) = default; +	Config(Config &&) = default; +	Config & operator=(const Config &) = default; +	Config & operator=(Config &&) = default;  public:  	//! Logging-related settings diff --git a/src/crepe/api/LoopManager.cpp b/src/crepe/api/LoopManager.cpp index a64366f..7edf4d1 100644 --- a/src/crepe/api/LoopManager.cpp +++ b/src/crepe/api/LoopManager.cpp @@ -57,7 +57,7 @@ void LoopManager::loop() {  void LoopManager::setup() {  	this->game_running = true;  	LoopTimer::get_instance().start(); -	LoopTimer::get_instance().set_fps(60); +	LoopTimer::get_instance().set_fps(200);  }  void LoopManager::render() { diff --git a/src/crepe/api/LoopTimer.cpp b/src/crepe/api/LoopTimer.cpp index a9800b7..15a0e3a 100644 --- a/src/crepe/api/LoopTimer.cpp +++ b/src/crepe/api/LoopTimer.cpp @@ -47,7 +47,7 @@ double LoopTimer::get_fixed_delta_time() const { return this->fixed_delta_time.c  void LoopTimer::set_fps(int fps) {  	this->fps = fps;  	// target time per frame in seconds -	this->frame_target_time = std::chrono::seconds(1) / fps; +	this->frame_target_time = std::chrono::duration<double>(1.0) / fps;  }  int LoopTimer::get_fps() const { return this->fps; } diff --git a/src/crepe/api/LoopTimer.h b/src/crepe/api/LoopTimer.h index f277d7b..9393439 100644 --- a/src/crepe/api/LoopTimer.h +++ b/src/crepe/api/LoopTimer.h @@ -130,9 +130,9 @@ private:  	//! Delta time for the current frame in seconds  	std::chrono::duration<double> delta_time{0.0};  	//! Target time per frame in seconds -	std::chrono::duration<double> frame_target_time = std::chrono::seconds(1) / fps; +	std::chrono::duration<double> frame_target_time = std::chrono::duration<double>(1.0) / fps;  	//! Fixed delta time for fixed updates in seconds -	std::chrono::duration<double> fixed_delta_time = std::chrono::seconds(1) / 50; +	std::chrono::duration<double> fixed_delta_time = std::chrono::duration<double>(1.0) / 50.0;  	//! Total elapsed game time in seconds  	std::chrono::duration<double> elapsed_time{0.0};  	//! Total elapsed time for fixed updates in seconds diff --git a/src/crepe/api/Scene.cpp b/src/crepe/api/Scene.cpp deleted file mode 100644 index 849945e..0000000 --- a/src/crepe/api/Scene.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include "Scene.h" - -using namespace crepe; - -Scene::Scene(ComponentManager & mgr) : component_manager(mgr) {} diff --git a/src/crepe/api/Scene.h b/src/crepe/api/Scene.h index 869bf6f..f6fdb2a 100644 --- a/src/crepe/api/Scene.h +++ b/src/crepe/api/Scene.h @@ -2,6 +2,8 @@  #include <string> +#include "../util/OptionalRef.h" +  namespace crepe {  class SceneManager; @@ -15,11 +17,8 @@ class ComponentManager;   */  class Scene {  protected: -	//TODO: Use Loek's custom reference class to set ComponentManger via SceneManager instead of via constructor -	/** -	 * \param mgr  Reference to the ComponentManager -	 */ -	Scene(ComponentManager & mgr); +	// NOTE: This must be the only constructor on Scene, see "Late references" below +	Scene() = default;  	//! SceneManager instances Scene  	friend class SceneManager; @@ -36,8 +35,20 @@ public:  	virtual std::string get_name() const = 0;  protected: +	/** +	 * \name Late references +	 *  +	 * These references are set by SceneManager immediately after calling the constructor of Scene. +	 * +	 * \note Scene must have a constructor without arguments so the game programmer doesn't need to +	 * manually add `using Scene::Scene` to their concrete scene class, if they want to add a +	 * constructor with arguments (e.g. for passing references to their own concrete Scene classes). +	 * +	 * \{ +	 */  	//! Reference to the ComponentManager -	ComponentManager & component_manager; +	OptionalRef<ComponentManager> component_manager; +	//! \}  };  } // namespace crepe diff --git a/src/crepe/api/SceneManager.h b/src/crepe/api/SceneManager.h index 45ba668..f6f62cd 100644 --- a/src/crepe/api/SceneManager.h +++ b/src/crepe/api/SceneManager.h @@ -26,8 +26,8 @@ public:  	 *  	 * \tparam T  Type of concrete scene  	 */ -	template <typename T> -	void add_scene(); +	template <typename T, typename... Args> +	void add_scene(Args &&... args);  	/**  	 * \brief Set the next scene  	 * diff --git a/src/crepe/api/SceneManager.hpp b/src/crepe/api/SceneManager.hpp index 94e5946..5c8e417 100644 --- a/src/crepe/api/SceneManager.hpp +++ b/src/crepe/api/SceneManager.hpp @@ -4,13 +4,17 @@  namespace crepe { -template <typename T> -void SceneManager::add_scene() { +template <typename T, typename... Args> +void SceneManager::add_scene(Args &&... args) {  	using namespace std;  	static_assert(is_base_of<Scene, T>::value, "T must be derived from Scene"); -	Scene * scene = new T(this->component_manager); -	this->scenes.emplace_back(unique_ptr<Scene>(scene)); +	Scene * scene = new T(std::forward<Args>(args)...); +	unique_ptr<Scene> unique_scene(scene); + +	unique_scene->component_manager = this->component_manager; + +	this->scenes.emplace_back(std::move(unique_scene));  	// The first scene added, is the one that will be loaded at the beginning  	if (next_scene.empty()) { diff --git a/src/crepe/api/Texture.cpp b/src/crepe/api/Texture.cpp index 9be9421..264d7b1 100644 --- a/src/crepe/api/Texture.cpp +++ b/src/crepe/api/Texture.cpp @@ -9,14 +9,9 @@  using namespace crepe;  using namespace std; -Texture::Texture(unique_ptr<Asset> res) { +Texture::Texture(const Asset & src) {  	dbg_trace(); -	this->load(std::move(res)); -} - -Texture::Texture(const char * src) { -	dbg_trace(); -	this->load(make_unique<Asset>(src)); +	this->load(src);  }  Texture::~Texture() { @@ -24,9 +19,9 @@ Texture::~Texture() {  	this->texture.reset();  } -void Texture::load(unique_ptr<Asset> res) { +void Texture::load(const Asset & res) {  	SDLContext & ctx = SDLContext::get_instance(); -	this->texture = std::move(ctx.texture_from_path(res->get_path())); +	this->texture = ctx.texture_from_path(res.get_path());  }  int Texture::get_width() const { diff --git a/src/crepe/api/Texture.h b/src/crepe/api/Texture.h index 6965223..b4f7d07 100644 --- a/src/crepe/api/Texture.h +++ b/src/crepe/api/Texture.h @@ -25,16 +25,10 @@ class Texture {  public:  	/** -	 * \brief Constructs a Texture from a file path. -	 * \param src Path to the image file to be loaded as a texture. -	 */ -	Texture(const char * src); - -	/**  	 * \brief Constructs a Texture from an Asset resource. -	 * \param res Unique pointer to an Asset resource containing texture data. +	 * \param src Asset with texture data to load.  	 */ -	Texture(std::unique_ptr<Asset> res); +	Texture(const Asset & src);  	/**  	 * \brief Destroys the Texture instance, freeing associated resources. @@ -59,7 +53,7 @@ private:  	 * \brief Loads the texture from an Asset resource.  	 * \param res Unique pointer to an Asset resource to load the texture from.  	 */ -	void load(std::unique_ptr<Asset> res); +	void load(const Asset & res);  private:  	//! The texture of the class from the library |