diff options
Diffstat (limited to 'src/crepe')
| -rw-r--r-- | src/crepe/api/GameObject.h | 6 | ||||
| -rw-r--r-- | src/crepe/api/ParticleEmitter.cpp | 17 | ||||
| -rw-r--r-- | src/crepe/api/Rigidbody.cpp | 6 | ||||
| -rw-r--r-- | src/crepe/api/Rigidbody.h | 13 | ||||
| -rw-r--r-- | src/crepe/api/Transform.h | 3 | ||||
| -rw-r--r-- | src/crepe/api/Vector2.cpp | 104 | ||||
| -rw-r--r-- | src/crepe/api/Vector2.h | 61 | ||||
| -rw-r--r-- | src/crepe/system/PhysicsSystem.cpp | 96 | 
8 files changed, 155 insertions, 151 deletions
diff --git a/src/crepe/api/GameObject.h b/src/crepe/api/GameObject.h index 8dc102c..d703730 100644 --- a/src/crepe/api/GameObject.h +++ b/src/crepe/api/GameObject.h @@ -1,6 +1,5 @@  #pragma once -#include <cstdint>  #include <string>  #include "types.h" @@ -29,8 +28,9 @@ public:  	 * \param rotation The rotation of the GameObject  	 * \param scale The scale of the GameObject  	 */ -	GameObject(game_object_id_t id, const std::string & name, const std::string & tag, -			   const Vector2 & position, double rotation, double scale); +	GameObject(game_object_id_t id, const std::string & name, +			   const std::string & tag, const Vector2 & position, +			   double rotation, double scale);  	/**  	 * \brief Set the parent of this GameObject  	 *  diff --git a/src/crepe/api/ParticleEmitter.cpp b/src/crepe/api/ParticleEmitter.cpp index 6094732..3b2e2f2 100644 --- a/src/crepe/api/ParticleEmitter.cpp +++ b/src/crepe/api/ParticleEmitter.cpp @@ -6,15 +6,14 @@  using namespace crepe; -ParticleEmitter::ParticleEmitter(game_object_id_t id, -								 uint32_t max_particles, uint32_t emission_rate, -								 uint32_t speed, uint32_t speed_offset, -								 uint32_t angle, uint32_t angleOffset, -								 float begin_lifespan, float end_lifespan) -	: Component(id), max_particles(max_particles), -	  emission_rate(emission_rate), speed(speed), speed_offset(speed_offset), -	  position{0, 0}, begin_lifespan(begin_lifespan), -	  end_lifespan(end_lifespan) { +ParticleEmitter::ParticleEmitter(game_object_id_t id, uint32_t max_particles, +								 uint32_t emission_rate, uint32_t speed, +								 uint32_t speed_offset, uint32_t angle, +								 uint32_t angleOffset, float begin_lifespan, +								 float end_lifespan) +	: Component(id), max_particles(max_particles), emission_rate(emission_rate), +	  speed(speed), speed_offset(speed_offset), position{0, 0}, +	  begin_lifespan(begin_lifespan), end_lifespan(end_lifespan) {  	std::srand(  		static_cast<uint32_t>(std::time(nullptr))); // initialize random seed  	std::cout << "Create emitter" << std::endl; diff --git a/src/crepe/api/Rigidbody.cpp b/src/crepe/api/Rigidbody.cpp index cf07b0e..0de9846 100644 --- a/src/crepe/api/Rigidbody.cpp +++ b/src/crepe/api/Rigidbody.cpp @@ -2,9 +2,8 @@  using namespace crepe; -crepe::Rigidbody::Rigidbody(uint32_t game_object_id, -							const RigidbodyData & data) : -	Component(game_object_id), data(data){} +crepe::Rigidbody::Rigidbody(uint32_t game_object_id, const RigidbodyData & data) +	: Component(game_object_id), data(data) {}  void crepe::Rigidbody::add_force_linear(const Vector2 & force) {  	this->data.linear_velocity += force; @@ -13,4 +12,3 @@ void crepe::Rigidbody::add_force_linear(const Vector2 & force) {  void crepe::Rigidbody::add_force_angular(double force) {  	this->data.angular_velocity += force;  } - diff --git a/src/crepe/api/Rigidbody.h b/src/crepe/api/Rigidbody.h index 0c069d8..e1abd46 100644 --- a/src/crepe/api/Rigidbody.h +++ b/src/crepe/api/Rigidbody.h @@ -37,17 +37,18 @@ public:  	 */  	struct PhysicsConstraints {  		//! X constraint -		bool x = 0;  +		bool x = 0;  		//! Y constraint -		bool y = 0;  +		bool y = 0;  		//! rotation constraint -		bool rotation = 0;  +		bool rotation = 0;  	}; +  public:  	/**   	 * This struct holds the data for the Rigidbody.  	 */ -	struct RigidbodyData{ +	struct RigidbodyData {  		//! objects mass  		double mass = 0.0;  		//! gravtiy scale @@ -73,14 +74,16 @@ public:  		//! if object bounces  		bool bounce = false;  	}; +  public:  	/**   	 * \param game_object_id id of the gameobject the rigibody is added to.  	 * \param data struct to configure the rigidbody.  	 */ -	Rigidbody(uint32_t game_object_id,const RigidbodyData& data); +	Rigidbody(uint32_t game_object_id, const RigidbodyData & data);  	//! struct to hold data of rigidbody  	RigidbodyData data; +  public:  	/**   	 * \brief add a linear force to the Rigidbody. diff --git a/src/crepe/api/Transform.h b/src/crepe/api/Transform.h index 33e70f9..805553e 100644 --- a/src/crepe/api/Transform.h +++ b/src/crepe/api/Transform.h @@ -20,7 +20,8 @@ public:  	 * \param rot The rotation of the GameObject  	 * \param scale The scale of the GameObject  	 */ -	Transform(game_object_id_t id, const Vector2 & point, double rot, double scale); +	Transform(game_object_id_t id, const Vector2 & point, double rot, +			  double scale);  	/**  	 * \brief Get the maximum number of instances for this component  	 * diff --git a/src/crepe/api/Vector2.cpp b/src/crepe/api/Vector2.cpp index 8cbd9ad..09bb59b 100644 --- a/src/crepe/api/Vector2.cpp +++ b/src/crepe/api/Vector2.cpp @@ -2,58 +2,56 @@  namespace crepe { -    // Constructor with initial values -    Vector2::Vector2(float x, float y) : x(x), y(y) {} - -    // Subtracts another vector from this vector and returns the result. -    Vector2 Vector2::operator-(const Vector2& other) const { -        return {x - other.x, y - other.y}; -    } - -    // Adds another vector to this vector and returns the result. -    Vector2 Vector2::operator+(const Vector2& other) const { -        return {x + other.x, y + other.y}; -    } - -    // Multiplies this vector by a scalar and returns the result. -    Vector2 Vector2::operator*(float scalar) const { -        return {x * scalar, y * scalar}; -    } - -    // Multiplies this vector by another vector element-wise and updates this vector. -    Vector2& Vector2::operator*=(const Vector2& other) { -        x *= other.x; -        y *= other.y; -        return *this; -    } - -    // Adds another vector to this vector and updates this vector. -    Vector2& Vector2::operator+=(const Vector2& other) { -        x += other.x; -        y += other.y; -        return *this; -    } - -    // Adds a scalar value to both components of this vector and updates this vector. -    Vector2& Vector2::operator+=(float other) { -        x += other; -        y += other; -        return *this; -    } - -    // Returns the negation of this vector. -    Vector2 Vector2::operator-() const { -        return {-x, -y}; -    } - -    // Checks if this vector is equal to another vector. -    bool Vector2::operator==(const Vector2& other) const { -        return x == other.x && y == other.y; -    } - -    // Checks if this vector is not equal to another vector. -    bool Vector2::operator!=(const Vector2& other) const { -        return !(*this == other); -    } +// Constructor with initial values +Vector2::Vector2(float x, float y) : x(x), y(y) {} + +// Subtracts another vector from this vector and returns the result. +Vector2 Vector2::operator-(const Vector2 & other) const { +	return {x - other.x, y - other.y}; +} + +// Adds another vector to this vector and returns the result. +Vector2 Vector2::operator+(const Vector2 & other) const { +	return {x + other.x, y + other.y}; +} + +// Multiplies this vector by a scalar and returns the result. +Vector2 Vector2::operator*(float scalar) const { +	return {x * scalar, y * scalar}; +} + +// Multiplies this vector by another vector element-wise and updates this vector. +Vector2 & Vector2::operator*=(const Vector2 & other) { +	x *= other.x; +	y *= other.y; +	return *this; +} + +// Adds another vector to this vector and updates this vector. +Vector2 & Vector2::operator+=(const Vector2 & other) { +	x += other.x; +	y += other.y; +	return *this; +} + +// Adds a scalar value to both components of this vector and updates this vector. +Vector2 & Vector2::operator+=(float other) { +	x += other; +	y += other; +	return *this; +} + +// Returns the negation of this vector. +Vector2 Vector2::operator-() const { return {-x, -y}; } + +// Checks if this vector is equal to another vector. +bool Vector2::operator==(const Vector2 & other) const { +	return x == other.x && y == other.y; +} + +// Checks if this vector is not equal to another vector. +bool Vector2::operator!=(const Vector2 & other) const { +	return !(*this == other); +}  } // namespace crepe diff --git a/src/crepe/api/Vector2.h b/src/crepe/api/Vector2.h index d571209..741951b 100644 --- a/src/crepe/api/Vector2.h +++ b/src/crepe/api/Vector2.h @@ -2,47 +2,46 @@  namespace crepe { -    //! Vector2 class -    class Vector2 { -    public: -        //! X component of the vector -        float x; -        //! Y component of the vector -				float y; +//! Vector2 class +class Vector2 { +public: +	//! X component of the vector +	float x; +	//! Y component of the vector +	float y; -        //! Default constructor -        Vector2() = default; +	//! Default constructor +	Vector2() = default; -        //! Constructor with initial values -        Vector2(float x, float y); +	//! Constructor with initial values +	Vector2(float x, float y); -        //! Subtracts another vector from this vector and returns the result. -        Vector2 operator-(const Vector2& other) const; +	//! Subtracts another vector from this vector and returns the result. +	Vector2 operator-(const Vector2 & other) const; -        //! Adds another vector to this vector and returns the result. -        Vector2 operator+(const Vector2& other) const; +	//! Adds another vector to this vector and returns the result. +	Vector2 operator+(const Vector2 & other) const; -        //! Multiplies this vector by a scalar and returns the result. -        Vector2 operator*(float scalar) const; +	//! Multiplies this vector by a scalar and returns the result. +	Vector2 operator*(float scalar) const; -        //! Multiplies this vector by another vector element-wise and updates this vector. -        Vector2& operator*=(const Vector2& other); +	//! Multiplies this vector by another vector element-wise and updates this vector. +	Vector2 & operator*=(const Vector2 & other); -        //! Adds another vector to this vector and updates this vector. -        Vector2& operator+=(const Vector2& other); +	//! Adds another vector to this vector and updates this vector. +	Vector2 & operator+=(const Vector2 & other); -        //! Adds a scalar value to both components of this vector and updates this vector. -        Vector2& operator+=(float other); +	//! Adds a scalar value to both components of this vector and updates this vector. +	Vector2 & operator+=(float other); -        //! Returns the negation of this vector. -        Vector2 operator-() const; +	//! Returns the negation of this vector. +	Vector2 operator-() const; -        //! Checks if this vector is equal to another vector. -        bool operator==(const Vector2& other) const; +	//! Checks if this vector is equal to another vector. +	bool operator==(const Vector2 & other) const; -        //! Checks if this vector is not equal to another vector. -        bool operator!=(const Vector2& other) const; - -    }; +	//! Checks if this vector is not equal to another vector. +	bool operator!=(const Vector2 & other) const; +};  } // namespace crepe diff --git a/src/crepe/system/PhysicsSystem.cpp b/src/crepe/system/PhysicsSystem.cpp index 1a323ee..1bd2171 100644 --- a/src/crepe/system/PhysicsSystem.cpp +++ b/src/crepe/system/PhysicsSystem.cpp @@ -1,10 +1,10 @@  #include <cmath>  #include "../ComponentManager.h" +#include "../api/Config.h"  #include "../api/Rigidbody.h"  #include "../api/Transform.h"  #include "../api/Vector2.h" -#include "../api/Config.h"  #include "PhysicsSystem.h" @@ -19,71 +19,77 @@ void PhysicsSystem::update() {  	double gravity = Config::get_instance().physics.gravity;  	for (Rigidbody & rigidbody : rigidbodies) { -		if(!rigidbody.active){continue;} +		if (!rigidbody.active) continue; +		  		switch (rigidbody.data.body_type) {  			case Rigidbody::BodyType::DYNAMIC:  				for (Transform & transform : transforms) {  					if (transform.game_object_id == rigidbody.game_object_id) { -						 -						// Add gravity  -						if(rigidbody.data.use_gravity) -						{ -							rigidbody.data.linear_velocity.y += (rigidbody.data.mass * rigidbody.data.gravity_scale * gravity); + +						// Add gravity +						if (rigidbody.data.use_gravity) { +							rigidbody.data.linear_velocity.y +								+= (rigidbody.data.mass +									* rigidbody.data.gravity_scale * gravity);  						}  						// Add damping -						if(rigidbody.data.angular_damping != 0) -						{ -							rigidbody.data.angular_velocity *= rigidbody.data.angular_damping; +						if (rigidbody.data.angular_damping != 0) { +							rigidbody.data.angular_velocity +								*= rigidbody.data.angular_damping;  						} -						if(rigidbody.data.linear_damping != Vector2{0,0}) -						{ -							rigidbody.data.linear_velocity *= rigidbody.data.linear_damping; +						if (rigidbody.data.linear_damping != Vector2{0, 0}) { +							rigidbody.data.linear_velocity +								*= rigidbody.data.linear_damping;  						}  						// Max velocity check -						if(rigidbody.data.angular_velocity > rigidbody.data.max_angular_velocity) -						{ -							rigidbody.data.angular_velocity = rigidbody.data.max_angular_velocity; -						} -						else if (rigidbody.data.angular_velocity < -rigidbody.data.max_angular_velocity) -						{ -							rigidbody.data.angular_velocity = -rigidbody.data.max_angular_velocity; +						if (rigidbody.data.angular_velocity +							> rigidbody.data.max_angular_velocity) { +							rigidbody.data.angular_velocity +								= rigidbody.data.max_angular_velocity; +						} else if (rigidbody.data.angular_velocity +								   < -rigidbody.data.max_angular_velocity) { +							rigidbody.data.angular_velocity +								= -rigidbody.data.max_angular_velocity;  						} -						if(rigidbody.data.linear_velocity.x > rigidbody.data.max_linear_velocity.x) -						{ -							rigidbody.data.linear_velocity.x = rigidbody.data.max_linear_velocity.x; -						} -						else if(rigidbody.data.linear_velocity.x < -rigidbody.data.max_linear_velocity.x) -						{ -							rigidbody.data.linear_velocity.x = -rigidbody.data.max_linear_velocity.x; +						if (rigidbody.data.linear_velocity.x +							> rigidbody.data.max_linear_velocity.x) { +							rigidbody.data.linear_velocity.x +								= rigidbody.data.max_linear_velocity.x; +						} else if (rigidbody.data.linear_velocity.x +								   < -rigidbody.data.max_linear_velocity.x) { +							rigidbody.data.linear_velocity.x +								= -rigidbody.data.max_linear_velocity.x;  						} -						if(rigidbody.data.linear_velocity.y > rigidbody.data.max_linear_velocity.y) -						{ -							rigidbody.data.linear_velocity.y = rigidbody.data.max_linear_velocity.y; -						} -						else if(rigidbody.data.linear_velocity.y < -rigidbody.data.max_linear_velocity.y) -						{ -							rigidbody.data.linear_velocity.y = -rigidbody.data.max_linear_velocity.y; +						if (rigidbody.data.linear_velocity.y +							> rigidbody.data.max_linear_velocity.y) { +							rigidbody.data.linear_velocity.y +								= rigidbody.data.max_linear_velocity.y; +						} else if (rigidbody.data.linear_velocity.y +								   < -rigidbody.data.max_linear_velocity.y) { +							rigidbody.data.linear_velocity.y +								= -rigidbody.data.max_linear_velocity.y;  						} -						// Move object  -						if(!rigidbody.data.constraints.rotation) -						{ -							transform.rotation += rigidbody.data.angular_velocity; -							transform.rotation = std::fmod(transform.rotation, 360.0); +						// Move object +						if (!rigidbody.data.constraints.rotation) { +							transform.rotation +								+= rigidbody.data.angular_velocity; +							transform.rotation +								= std::fmod(transform.rotation, 360.0);  							if (transform.rotation < 0) {  								transform.rotation += 360.0;  							}  						} -						if(!rigidbody.data.constraints.x) -						{ -							transform.position.x += rigidbody.data.linear_velocity.x; +						if (!rigidbody.data.constraints.x) { +							transform.position.x +								+= rigidbody.data.linear_velocity.x;  						} -						if(!rigidbody.data.constraints.y) -						{ -							transform.position.y += rigidbody.data.linear_velocity.y; +						if (!rigidbody.data.constraints.y) { +							transform.position.y +								+= rigidbody.data.linear_velocity.y;  						}  					}  				}  |