diff options
| -rw-r--r-- | readme.md | 7 | ||||
| -rw-r--r-- | src/crepe/ComponentManager.h | 5 | ||||
| -rw-r--r-- | src/crepe/ComponentManager.hpp | 9 | ||||
| -rw-r--r-- | src/crepe/api/Asset.cpp | 5 | ||||
| -rw-r--r-- | src/crepe/api/Asset.h | 16 | ||||
| -rw-r--r-- | src/crepe/system/System.h | 2 | ||||
| -rw-r--r-- | src/crepe/util/OptionalRef.h | 11 | ||||
| -rw-r--r-- | src/crepe/util/OptionalRef.hpp | 24 | 
8 files changed, 34 insertions, 45 deletions
@@ -32,6 +32,7 @@ This project uses the following libraries  |`SoLoud`|(latest git `master` version)|  |Google Test (`GTest`)|1.15.2|  |Berkeley DB (`libdb`)|5.3.21| +|Where Am I?|(latest git `master` version)  > [!NOTE]  > Most of these libraries are likely available from your package manager if you @@ -49,6 +50,11 @@ $ git submodule update --init --recursive --depth 1  Then, follow these steps for each library you want to install: +> [!IMPORTANT] +> A dollar sign prompt (`$`) indicates commands to be run as a regular user, +> while a hashtag (`#`) is used to denote commands that must be run with +> privileges (e.g. as root or using `sudo`). +  1. Change into the library folder (run **one** of these):     ```     $ cd lib/googletest @@ -56,6 +62,7 @@ Then, follow these steps for each library you want to install:     $ cd lib/soloud/contrib     $ cd lib/sdl_image     $ cd lib/sdl_ttf +   $ cd lib/whereami     ```  2. Use CMake to configure the build, run the build and install (run **all** of     these): diff --git a/src/crepe/ComponentManager.h b/src/crepe/ComponentManager.h index 2107453..0956d1e 100644 --- a/src/crepe/ComponentManager.h +++ b/src/crepe/ComponentManager.h @@ -8,6 +8,7 @@  #include "api/Vector2.h"  #include "Component.h" +#include "types.h"  namespace crepe { @@ -112,7 +113,7 @@ public:  	 * \return A vector of all components of the specific type and id  	 */  	template <typename T> -	std::vector<std::reference_wrapper<T>> get_components_by_id(game_object_id_t id) const; +	RefVector<T> get_components_by_id(game_object_id_t id) const;  	/**  	 * \brief Get all components of a specific type  	 *  @@ -122,7 +123,7 @@ public:  	 * \return A vector of all components of the specific type  	 */  	template <typename T> -	std::vector<std::reference_wrapper<T>> get_components_by_type() const; +	RefVector<T> get_components_by_type() const;  private:  	/** diff --git a/src/crepe/ComponentManager.hpp b/src/crepe/ComponentManager.hpp index be99cac..4d5eaf4 100644 --- a/src/crepe/ComponentManager.hpp +++ b/src/crepe/ComponentManager.hpp @@ -81,15 +81,14 @@ void ComponentManager::delete_components() {  }  template <typename T> -std::vector<std::reference_wrapper<T>> -ComponentManager::get_components_by_id(game_object_id_t id) const { +RefVector<T> ComponentManager::get_components_by_id(game_object_id_t id) const {  	using namespace std;  	// Determine the type of T (this is used as the key of the unordered_map<>)  	type_index type = typeid(T);  	// Create an empty vector<> -	vector<reference_wrapper<T>> component_vector; +	RefVector<T> component_vector;  	if (this->components.find(type) == this->components.end()) return component_vector; @@ -114,14 +113,14 @@ ComponentManager::get_components_by_id(game_object_id_t id) const {  }  template <typename T> -std::vector<std::reference_wrapper<T>> ComponentManager::get_components_by_type() const { +RefVector<T> ComponentManager::get_components_by_type() const {  	using namespace std;  	// Determine the type of T (this is used as the key of the unordered_map<>)  	type_index type = typeid(T);  	// Create an empty vector<> -	vector<reference_wrapper<T>> component_vector; +	RefVector<T> component_vector;  	// Find the type (in the unordered_map<>)  	if (this->components.find(type) == this->components.end()) return component_vector; diff --git a/src/crepe/api/Asset.cpp b/src/crepe/api/Asset.cpp index 3fe3ceb..e148367 100644 --- a/src/crepe/api/Asset.cpp +++ b/src/crepe/api/Asset.cpp @@ -2,9 +2,10 @@  #include <stdexcept>  #include <whereami.h> -#include "Asset.h"  #include "api/Config.h" +#include "Asset.h" +  using namespace crepe;  using namespace std; @@ -15,7 +16,7 @@ const string & Asset::get_path() const noexcept { return this->src; }  string Asset::find_asset(const string & src) const {  	auto & cfg = Config::get_instance(); -	auto & root_pattern = cfg.asset.root_pattern; +	string & root_pattern = cfg.asset.root_pattern;  	// if root_pattern is empty, find_asset must return all paths as-is  	if (root_pattern.empty()) return src; diff --git a/src/crepe/api/Asset.h b/src/crepe/api/Asset.h index 77596ac..bfd0ac7 100644 --- a/src/crepe/api/Asset.h +++ b/src/crepe/api/Asset.h @@ -40,6 +40,22 @@ private:  	const std::string src;  private: +	/** +	 * \brief Locate asset path, or throw exception if it cannot be found +	 * +	 * This function resolves asset locations relative to crepe::Config::root_pattern if it is +	 * set and \p src is a relative path. If \p src is an absolute path, it is canonicalized. +	 * This function only returns if the file can be found. +	 * +	 * \param src Arbitrary path to resource file +	 * +	 * \returns \p src if crepe::Config::root_pattern is empty +	 * \returns Canonical path to \p src +	 * +	 * \throws std::runtime_error if root_pattern cannot be found +	 * \throws std::filesystem::filesystem_error if the resolved path does not exist +	 * \throws std::filesystem::filesystem_error if the path cannot be canonicalized +	 */  	std::string find_asset(const std::string & src) const;  	/**  	 * \returns The path to the current executable diff --git a/src/crepe/system/System.h b/src/crepe/system/System.h index 36f7edc..28ea20e 100644 --- a/src/crepe/system/System.h +++ b/src/crepe/system/System.h @@ -1,7 +1,5 @@  #pragma once -#include "../ComponentManager.h" -  namespace crepe {  class ComponentManager; diff --git a/src/crepe/util/OptionalRef.h b/src/crepe/util/OptionalRef.h index 0a94ae5..57f9635 100644 --- a/src/crepe/util/OptionalRef.h +++ b/src/crepe/util/OptionalRef.h @@ -36,7 +36,7 @@ public:  	 *  	 * \param ref Reference to assign  	 */ -	void set(T &) noexcept; +	void set(T & ref) noexcept;  	/**  	 * \brief Retrieve this reference  	 * @@ -50,15 +50,6 @@ public:  	 */  	void clear() noexcept; -	//! Copy constructor -	OptionalRef(const OptionalRef<T> &); -	//! Move constructor -	OptionalRef(OptionalRef<T> &&); -	//! Copy assignment -	OptionalRef<T> & operator=(const OptionalRef<T> &); -	//! Move assignment -	OptionalRef<T> & operator=(OptionalRef<T> &&); -  private:  	/**  	 * \brief Reference to the value of type \c T diff --git a/src/crepe/util/OptionalRef.hpp b/src/crepe/util/OptionalRef.hpp index ee41f61..71e2a39 100644 --- a/src/crepe/util/OptionalRef.hpp +++ b/src/crepe/util/OptionalRef.hpp @@ -12,30 +12,6 @@ OptionalRef<T>::OptionalRef(T & ref) {  }  template <typename T> -OptionalRef<T>::OptionalRef(const OptionalRef<T> & other) { -	this->ref = other.ref; -} - -template <typename T> -OptionalRef<T>::OptionalRef(OptionalRef<T> && other) { -	this->ref = other.ref; -	other.clear(); -} - -template <typename T> -OptionalRef<T> & OptionalRef<T>::operator=(const OptionalRef<T> & other) { -	this->ref = other.ref; -	return *this; -} - -template <typename T> -OptionalRef<T> & OptionalRef<T>::operator=(OptionalRef<T> && other) { -	this->ref = other.ref; -	other.clear(); -	return *this; -} - -template <typename T>  T & OptionalRef<T>::get() const {  	if (this->ref == nullptr)  		throw std::runtime_error("OptionalRef: attempt to dereference nullptr");  |