diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/crepe/Collider.h | 3 | ||||
| -rw-r--r-- | src/crepe/api/Components.h | 16 | ||||
| -rw-r--r-- | src/crepe/api/Config.h | 3 | ||||
| -rw-r--r-- | src/crepe/api/Vector2.h | 46 | ||||
| -rw-r--r-- | src/crepe/api/Vector2.hpp | 15 | ||||
| -rw-r--r-- | src/test/Vector2Test.cpp | 10 | 
6 files changed, 74 insertions, 19 deletions
| diff --git a/src/crepe/Collider.h b/src/crepe/Collider.h index 42ccfd4..4344f15 100644 --- a/src/crepe/Collider.h +++ b/src/crepe/Collider.h @@ -5,6 +5,9 @@  namespace crepe { +/** + * \brief Base collider class + */  class Collider : public Component {  public:  	Collider(game_object_id_t id, const vec2 & offset); diff --git a/src/crepe/api/Components.h b/src/crepe/api/Components.h new file mode 100644 index 0000000..fa0663d --- /dev/null +++ b/src/crepe/api/Components.h @@ -0,0 +1,16 @@ +#pragma once + +#include "AI.h" +#include "Animator.h" +#include "AudioSource.h" +#include "BehaviorScript.h" +#include "BoxCollider.h" +#include "Button.h" +#include "Camera.h" +#include "CircleCollider.h" +#include "Metadata.h" +#include "ParticleEmitter.h" +#include "Rigidbody.h" +#include "Sprite.h" +#include "Text.h" +#include "Transform.h" diff --git a/src/crepe/api/Config.h b/src/crepe/api/Config.h index 9c226a3..7475528 100644 --- a/src/crepe/api/Config.h +++ b/src/crepe/api/Config.h @@ -60,7 +60,8 @@ struct Config final {  	struct {  		//! default screen size in pixels  		ivec2 default_size = {1280, 720}; -		std::string window_title = "Jetpack joyride clone"; +		//! default window title +		std::string window_title = "crepe window";  	} window_settings;  	//! Asset loading options diff --git a/src/crepe/api/Vector2.h b/src/crepe/api/Vector2.h index 52e1bb6..6613641 100644 --- a/src/crepe/api/Vector2.h +++ b/src/crepe/api/Vector2.h @@ -1,5 +1,7 @@  #pragma once +#include <format> +  namespace crepe {  //! 2D vector @@ -11,55 +13,55 @@ struct Vector2 {  	T y = 0;  	//! Subtracts another vector from this vector and returns the result. -	Vector2 operator-(const Vector2<T> & other) const; +	Vector2<T> operator-(const Vector2<T> & other) const;  	//! Subtracts a scalar value from both components of this vector and returns the result. -	Vector2 operator-(T scalar) const; +	Vector2<T> operator-(T scalar) const;  	//! Adds another vector to this vector and returns the result. -	Vector2 operator+(const Vector2<T> & other) const; +	Vector2<T> operator+(const Vector2<T> & other) const;  	//! Adds a scalar value to both components of this vector and returns the result. -	Vector2 operator+(T scalar) const; +	Vector2<T> operator+(T scalar) const;  	//! Multiplies this vector by another vector element-wise and returns the result. -	Vector2 operator*(const Vector2<T> & other) const; +	Vector2<T> operator*(const Vector2<T> & other) const;  	//! Multiplies this vector by a scalar and returns the result. -	Vector2 operator*(T scalar) const; +	Vector2<T> operator*(T scalar) const;  	//! Divides this vector by another vector element-wise and returns the result. -	Vector2 operator/(const Vector2<T> & other) const; +	Vector2<T> operator/(const Vector2<T> & other) const;  	//! Divides this vector by a scalar and returns the result. -	Vector2 operator/(T scalar) const; +	Vector2<T> operator/(T scalar) const;  	//! Adds another vector to this vector and updates this vector. -	Vector2 & operator+=(const Vector2<T> & other); +	Vector2<T> & operator+=(const Vector2<T> & other);  	//! Adds a scalar value to both components of this vector and updates this vector. -	Vector2 & operator+=(T other); +	Vector2<T> & operator+=(T other);  	//! Subtracts another vector from this vector and updates this vector. -	Vector2 & operator-=(const Vector2<T> & other); +	Vector2<T> & operator-=(const Vector2<T> & other);  	//! Subtracts a scalar value from both components of this vector and updates this vector. -	Vector2 & operator-=(T other); +	Vector2<T> & operator-=(T other);  	//! Multiplies this vector by another vector element-wise and updates this vector. -	Vector2 & operator*=(const Vector2<T> & other); +	Vector2<T> & operator*=(const Vector2<T> & other);  	//! Multiplies this vector by a scalar and updates this vector. -	Vector2 & operator*=(T other); +	Vector2<T> & operator*=(T other);  	//! Divides this vector by another vector element-wise and updates this vector. -	Vector2 & operator/=(const Vector2<T> & other); +	Vector2<T> & operator/=(const Vector2<T> & other);  	//! Divides this vector by a scalar and updates this vector. -	Vector2 & operator/=(T other); +	Vector2<T> & operator/=(T other);  	//! Returns the negation of this vector. -	Vector2 operator-() const; +	Vector2<T> operator-() const;  	//! Checks if this vector is equal to another vector.  	bool operator==(const Vector2<T> & other) const; @@ -89,12 +91,20 @@ struct Vector2 {  	T distance_squared(const Vector2<T> & other) const;  	//! Returns the perpendicular vector to this vector. -	Vector2 perpendicular() const; +	Vector2<T> perpendicular() const;  	//! Checks if both components of the vector are NaN.  	bool is_nan() const; + +	//! Rotate this vector clockwise by \c deg degrees +	Vector2<T> rotate(float deg) const;  };  } // namespace crepe +template <typename T> +struct std::formatter<crepe::Vector2<T>> : std::formatter<std::string> { +	format_context::iterator format(crepe::Vector2<T> vec, format_context & ctx) const; +}; +  #include "Vector2.hpp" diff --git a/src/crepe/api/Vector2.hpp b/src/crepe/api/Vector2.hpp index e195760..e2f96ed 100644 --- a/src/crepe/api/Vector2.hpp +++ b/src/crepe/api/Vector2.hpp @@ -168,4 +168,19 @@ bool Vector2<T>::is_nan() const {  	return std::isnan(x) && std::isnan(y);  } +template <class T> +Vector2<T> Vector2<T>::rotate(float deg) const { +	float rad = -deg / 180 * M_PI; +	return { +		x * std::cos(rad) - y * std::sin(rad), +		x * std::sin(rad) + y * std::cos(rad), +	}; +} +  } // namespace crepe + +template <typename T> +std::format_context::iterator std::formatter<crepe::Vector2<T>>::format(crepe::Vector2<T> vec, format_context & ctx) const { +	return formatter<string>::format(std::format("{{{}, {}}}", vec.x, vec.y), ctx); +} + diff --git a/src/test/Vector2Test.cpp b/src/test/Vector2Test.cpp index 1e21af9..b17f95a 100644 --- a/src/test/Vector2Test.cpp +++ b/src/test/Vector2Test.cpp @@ -1,6 +1,7 @@  #include <gtest/gtest.h>  #include <crepe/api/Vector2.h> +#include <crepe/types.h>  using namespace crepe; @@ -530,3 +531,12 @@ TEST_F(Vector2Test, Perpendicular) {  	EXPECT_FLOAT_EQ(result4.x, -4.0f);  	EXPECT_FLOAT_EQ(result4.y, 3.0f);  } + +TEST_F(Vector2Test, Rotate) { +	vec2 foo {0, 1}; + +	foo = foo.rotate(90); +	const float GOOD_ENOUGH = 0.001; +	EXPECT_NEAR(foo.x, 1, GOOD_ENOUGH); +	EXPECT_NEAR(foo.y, 0, GOOD_ENOUGH); +} |