diff options
| -rw-r--r-- | game/prefab/ZapperObject.cpp | 35 | ||||
| -rw-r--r-- | game/prefab/ZapperObject.h | 5 | ||||
| -rw-r--r-- | src/crepe/api/Vector2.h | 39 | ||||
| -rw-r--r-- | src/crepe/api/Vector2.hpp | 10 | ||||
| -rw-r--r-- | src/test/Vector2Test.cpp | 10 | 
5 files changed, 70 insertions, 29 deletions
| diff --git a/game/prefab/ZapperObject.cpp b/game/prefab/ZapperObject.cpp index e63a5f2..fcc6467 100644 --- a/game/prefab/ZapperObject.cpp +++ b/game/prefab/ZapperObject.cpp @@ -1,3 +1,5 @@ +#include <crepe/api/Transform.h> +  #include "ZapperObject.h"  #include "Config.h" @@ -11,8 +13,7 @@ ZapperObject::ZapperObject(crepe::GameObject && base)  			  Sprite::Data {  				  .sorting_in_layer = SORT_IN_LAY_OBSTACLES,  				  .order_in_layer = 1, -				  .size = vec2 {0, 1} * SCALE, -				  .position_offset = {0, 100}, +				  .size = vec2(0, 42) * SCALE,  			  }  		  ),  		  .orb_end = add_component<Sprite>( @@ -21,8 +22,7 @@ ZapperObject::ZapperObject(crepe::GameObject && base)  				  .flip = {true, true},  				  .sorting_in_layer = SORT_IN_LAY_OBSTACLES,  				  .order_in_layer = 1, -				  .size = vec2 {0, 1} * SCALE, -				  .position_offset = {0, -100}, +				  .size = vec2(0, 42) * SCALE,  			  }  		  ),  		  .glow_start = add_component<Sprite>( @@ -30,8 +30,7 @@ ZapperObject::ZapperObject(crepe::GameObject && base)  			  Sprite::Data {  				  .sorting_in_layer = SORT_IN_LAY_OBSTACLES,  				  .order_in_layer = -1, -				  .size = vec2 {2, 2} * SCALE, -				  .position_offset = {0, 100}, +				  .size = vec2(128, 128) * SCALE,  			  }  		  ),  		  .glow_end = add_component<Sprite>( @@ -40,8 +39,7 @@ ZapperObject::ZapperObject(crepe::GameObject && base)  				  .flip = {true, true},  				  .sorting_in_layer = SORT_IN_LAY_OBSTACLES,  				  .order_in_layer = -1, -				  .size = vec2 {2, 2} * SCALE, -				  .position_offset = {0, -100}, +				  .size = vec2(128, 128) * SCALE,  			  }  		  ),  		  .beam = add_component<Sprite>( @@ -49,7 +47,7 @@ ZapperObject::ZapperObject(crepe::GameObject && base)  			  Sprite::Data {  				  .sorting_in_layer = SORT_IN_LAY_OBSTACLES,  				  .order_in_layer = 0, -				  .size = vec2 {200, 50}, +				  .size = vec2(0, 40 * SCALE),  				  .angle_offset = 90,  			  }  		  ), @@ -75,4 +73,21 @@ ZapperObject::ZapperObject(crepe::GameObject && base)  		  .glow_end = add_component<Animator>(  			  sprite.glow_end, ivec2(128, 128), uvec2(16, 1), animator.glow_start.data  		  ), -	  } {} +		} { +			this->place(this->transform.position, 0, 300); +		} + +void ZapperObject::place(const crepe::vec2 & position, float rotation, float length) { +	this->transform.position = position; +	this->transform.rotation = rotation; + +	vec2 offset = vec2(0, 1) * length / 2; + +	this->sprite.orb_start.data.position_offset = offset; +	this->sprite.glow_start.data.position_offset = offset; +	this->sprite.orb_end.data.position_offset = -offset; +	this->sprite.glow_end.data.position_offset = -offset; + +	this->sprite.beam.data.size.x = length; +} + diff --git a/game/prefab/ZapperObject.h b/game/prefab/ZapperObject.h index cc2d37c..b4bb942 100644 --- a/game/prefab/ZapperObject.h +++ b/game/prefab/ZapperObject.h @@ -30,5 +30,8 @@ public:  	// crepe::BoxCollider & collider;  private: -	static constexpr int SCALE = 60; +	static constexpr float SCALE = 0.8; + +public: +	void place(const crepe::vec2 & position, float rotation, float length);  }; diff --git a/src/crepe/api/Vector2.h b/src/crepe/api/Vector2.h index 52e1bb6..0f46964 100644 --- a/src/crepe/api/Vector2.h +++ b/src/crepe/api/Vector2.h @@ -11,55 +11,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,10 +89,13 @@ 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 diff --git a/src/crepe/api/Vector2.hpp b/src/crepe/api/Vector2.hpp index e195760..a4ce641 100644 --- a/src/crepe/api/Vector2.hpp +++ b/src/crepe/api/Vector2.hpp @@ -168,4 +168,14 @@ 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 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); +} |