diff options
| author | jaroWMR <jarorutjes07@gmail.com> | 2024-10-20 16:58:13 +0200 | 
|---|---|---|
| committer | jaroWMR <jarorutjes07@gmail.com> | 2024-10-20 16:58:13 +0200 | 
| commit | cead795b7ff7135e13caf9ad3b76628070391458 (patch) | |
| tree | f91f5e9f6927727367324961e585d049d2947364 | |
| parent | d8483cfab70b5aca3baae6e0588924da8b54e090 (diff) | |
added collision system and  circlecollider
| -rw-r--r-- | src/crepe/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | src/crepe/CircleCollider.h | 12 | ||||
| -rw-r--r-- | src/crepe/Collider.cpp | 2 | ||||
| -rw-r--r-- | src/crepe/Collider.h | 2 | ||||
| -rw-r--r-- | src/crepe/CollisionSystem.cpp | 13 | ||||
| -rw-r--r-- | src/crepe/CollisionSystem.h | 15 | ||||
| -rw-r--r-- | src/crepe/Component.h | 1 | ||||
| -rw-r--r-- | src/crepe/Force.cpp | 14 | ||||
| -rw-r--r-- | src/crepe/Force.h | 17 | ||||
| -rw-r--r-- | src/crepe/GameObject.cpp | 7 | ||||
| -rw-r--r-- | src/crepe/PhysicsSystem.cpp | 37 | ||||
| -rw-r--r-- | src/crepe/Rigidbody.h | 3 | ||||
| -rw-r--r-- | src/crepe/Transform.cpp | 4 | ||||
| -rw-r--r-- | src/crepe/Transform.h | 16 | ||||
| -rw-r--r-- | src/example/Physics.cpp | 8 | 
15 files changed, 143 insertions, 14 deletions
| diff --git a/src/crepe/CMakeLists.txt b/src/crepe/CMakeLists.txt index ae9d51d..cce25c4 100644 --- a/src/crepe/CMakeLists.txt +++ b/src/crepe/CMakeLists.txt @@ -16,6 +16,9 @@ target_sources(crepe PUBLIC  	ScriptSystem.cpp  	Script.cpp  	PhysicsSystem.cpp +	Transform.cpp +	Force.cpp +	CollisionSystem.cpp  )  target_sources(crepe PUBLIC FILE_SET HEADERS FILES @@ -37,6 +40,9 @@ target_sources(crepe PUBLIC FILE_SET HEADERS FILES  	System.h  	ScriptSystem.h  	PhysicsSystem.h +	Transform.h +	Force.h +	CollisionSystem.h  )  add_subdirectory(api) diff --git a/src/crepe/CircleCollider.h b/src/crepe/CircleCollider.h new file mode 100644 index 0000000..922477b --- /dev/null +++ b/src/crepe/CircleCollider.h @@ -0,0 +1,12 @@ +#pragma once +#include "Collider.h" + +namespace crepe { + +class CircleCollider : public Collider { +public: +	CircleCollider(uint32_t gameObjectId,int radius) : Collider(gameObjectId), radius(radius) {} +	int radius; +}; + +} // namespace crepe diff --git a/src/crepe/Collider.cpp b/src/crepe/Collider.cpp index 3d3f7cb..311ffb3 100644 --- a/src/crepe/Collider.cpp +++ b/src/crepe/Collider.cpp @@ -2,4 +2,4 @@  using namespace crepe; -Collider::Collider(uint32_t gameObjectId , int size) : Component(gameObjectId), size(size){} +Collider::Collider(uint32_t gameObjectId) : Component(gameObjectId){} diff --git a/src/crepe/Collider.h b/src/crepe/Collider.h index 69bb0c3..cfc044c 100644 --- a/src/crepe/Collider.h +++ b/src/crepe/Collider.h @@ -6,7 +6,7 @@ namespace crepe {  class Collider : public Component {  public: -	Collider(uint32_t gameObjectId,int size); +	Collider(uint32_t gameObjectId);  	int size;  }; diff --git a/src/crepe/CollisionSystem.cpp b/src/crepe/CollisionSystem.cpp new file mode 100644 index 0000000..a0c6dca --- /dev/null +++ b/src/crepe/CollisionSystem.cpp @@ -0,0 +1,13 @@ +#include "CollisionSystem.h" +#include "ComponentManager.h" +#include <iostream> + +using namespace crepe; + +CollisionSystem::CollisionSystem() { + +} + +void CollisionSystem::update() { +	 +} diff --git a/src/crepe/CollisionSystem.h b/src/crepe/CollisionSystem.h new file mode 100644 index 0000000..70d7237 --- /dev/null +++ b/src/crepe/CollisionSystem.h @@ -0,0 +1,15 @@ +#pragma once + +namespace crepe { + +class CollisionSystem +{ +	private: +		/* data */ +	public: +		CollisionSystem(/* args */); +		void update(); +}; + +} + diff --git a/src/crepe/Component.h b/src/crepe/Component.h index c8fb6bc..a23de61 100644 --- a/src/crepe/Component.h +++ b/src/crepe/Component.h @@ -6,6 +6,7 @@ namespace crepe {  class Component {  public:  	Component(uint32_t id); +	virtual ~Component() {}  	// TODO: shouldn't this constructor be deleted because this class will never  	// directly be instantiated?  	//changed so it sets the id (jaro) diff --git a/src/crepe/Force.cpp b/src/crepe/Force.cpp new file mode 100644 index 0000000..b314f49 --- /dev/null +++ b/src/crepe/Force.cpp @@ -0,0 +1,14 @@ +#include "Force.h" +#include <cmath> + +namespace crepe { + +Force::Force(uint32_t gameObjectId, uint32_t forceMagnitude, uint32_t direction): Component(gameObjectId) +{  +	// Convert direction from degrees to radians +    float radian_direction = static_cast<float>(direction) * (M_PI / 180.0f); +    force_x = static_cast<int32_t>(std::round(forceMagnitude * std::cos(radian_direction))); +    force_y = static_cast<int32_t>(std::round(forceMagnitude * std::sin(radian_direction))); +} + +} // namespace crepe diff --git a/src/crepe/Force.h b/src/crepe/Force.h new file mode 100644 index 0000000..a121ec2 --- /dev/null +++ b/src/crepe/Force.h @@ -0,0 +1,17 @@ +#pragma once + +#include "Component.h" +#include <cstdint> +#include <utility> + +namespace crepe { + +class Force : public Component { +public: +    Force(uint32_t gameObjectId, uint32_t forceMagnitude, uint32_t direction); + +    int32_t force_x; +    int32_t force_y; +}; + +} // namespace crepe diff --git a/src/crepe/GameObject.cpp b/src/crepe/GameObject.cpp index de3beb6..36eb886 100644 --- a/src/crepe/GameObject.cpp +++ b/src/crepe/GameObject.cpp @@ -1,7 +1,12 @@  #include "GameObject.h" +#include "Transform.h"  using namespace crepe;  GameObject::GameObject(uint32_t id, std::string name, std::string tag,  					   int layer) -	: id(id), name(name), tag(tag), active(true), layer(layer) {} +	: id(id), name(name), tag(tag), active(true), layer(layer)  +{ +	Position pos = {0,0}; +	this->add_component<Transform>(pos, 0, 0); +} diff --git a/src/crepe/PhysicsSystem.cpp b/src/crepe/PhysicsSystem.cpp index c24afa2..7d16044 100644 --- a/src/crepe/PhysicsSystem.cpp +++ b/src/crepe/PhysicsSystem.cpp @@ -2,6 +2,7 @@  #include "ComponentManager.h"  #include "Rigidbody.h"  #include "Transform.h" +#include "Force.h"  #include <iostream>  using namespace crepe; @@ -14,7 +15,41 @@ void PhysicsSystem::update() {  	ComponentManager& mgr = ComponentManager::get_instance();  	std::vector<std::reference_wrapper<Rigidbody>> rigidbodies = mgr.get_components_by_type<Rigidbody>();  	std::vector<std::reference_wrapper<Transform>> transforms = mgr.get_components_by_type<Transform>(); +	  	for (Rigidbody& rigidbody : rigidbodies) { -		std::cout << rigidbody.gameObjectId << std::endl; + +		switch (rigidbody.body_type) +		{ +		case BodyType::Dynamic : +			for (Transform& transform : transforms) { +				if(transform.gameObjectId == rigidbody.gameObjectId) +				{ +					rigidbody.velocity_x = 0; +					rigidbody.velocity_y = 0; +					std::vector<std::reference_wrapper<Force>> Forces = mgr.get_components_by_id<Force>(rigidbody.gameObjectId); +					rigidbody.velocity_y += rigidbody.gravity_scale * 1 * rigidbody.mass; + +					for (Force& force : Forces) +					{ +						rigidbody.velocity_x += force.force_x; +						rigidbody.velocity_y += force.force_y;	 +					} +					 +					std::cout << "before transform.postion.x " << transform.postion.x << std::endl; +					std::cout << "before transform.postion.y " << transform.postion.y << std::endl; +					transform.postion.x += rigidbody.velocity_x; +					transform.postion.y += rigidbody.velocity_y; +					std::cout << "after transform.postion.x " << transform.postion.x << std::endl; +					std::cout << "after transform.postion.y " << transform.postion.y << std::endl; +				} +			}	 +			break; +		case BodyType::Kinematic : +			break; //(scripts) +		case BodyType::Static : +			break; //(unmoveable objects) +		default: +			break; +		}  	}  } diff --git a/src/crepe/Rigidbody.h b/src/crepe/Rigidbody.h index 7018e83..a03346f 100644 --- a/src/crepe/Rigidbody.h +++ b/src/crepe/Rigidbody.h @@ -14,7 +14,8 @@ enum class BodyType {  class Rigidbody : public Component {  public:  	Rigidbody(uint32_t gameObjectId,int mass, int gravityScale, BodyType bodyType); - +	int32_t velocity_x; +    int32_t velocity_y;  	int mass;  	int gravity_scale;  	BodyType body_type; diff --git a/src/crepe/Transform.cpp b/src/crepe/Transform.cpp index 2fde448..2c39523 100644 --- a/src/crepe/Transform.cpp +++ b/src/crepe/Transform.cpp @@ -2,5 +2,5 @@  using namespace crepe; -Transform::Transform(uint32_t gameObjectId,int mass, int gravityScale, int bodyType) -	: Component(gameObjectId), mass(mass), gravity_scale(gravityScale), body_type(bodyType) {} +Transform::Transform(uint32_t gameObjectId,Position position, int rotation, int scale) +	: Component(gameObjectId), postion(postion), rotation(rotation), scale(scale) {} diff --git a/src/crepe/Transform.h b/src/crepe/Transform.h index 96da1a4..3e8d142 100644 --- a/src/crepe/Transform.h +++ b/src/crepe/Transform.h @@ -4,13 +4,19 @@  namespace crepe { +struct Position +{ +	int x; +	int y; +}; + +  class Transform : public Component {  public: -	Transform(uint32_t gameObjectId,int mass, int gravityScale, int bodyType); - -	int mass; -	int gravity_scale; -	int body_type; +	Transform(uint32_t gameObjectId,Position position, int rotation, int scale); +	Position postion; +	int rotation; +	int scale;  };  } // namespace crepe diff --git a/src/example/Physics.cpp b/src/example/Physics.cpp index 61a3bf2..9ad6da0 100644 --- a/src/example/Physics.cpp +++ b/src/example/Physics.cpp @@ -1,7 +1,9 @@  #include <iostream>  #include <thread>  #include <chrono> +#include "Transform.h"  #include "Rigidbody.h" +#include "Force.h"  #include "PhysicsSystem.h"  #include <crepe/Component.h>  #include <crepe/ComponentManager.h> @@ -13,9 +15,11 @@ using namespace std;  int main(int argc, char* argv[]) {  	PhysicsSystem physicsSystem; -	GameObject * game_object[1]; +	GameObject * game_object[2]; +	game_object[1] = new GameObject(2, "Name", "Tag", 0); // not found not used  	game_object[0] = new GameObject(5, "Name", "Tag", 0); -	game_object[0]->add_component<Rigidbody>(10, 11 , BodyType::Dynamic); +	game_object[0]->add_component<Rigidbody>(1, 1 , BodyType::Dynamic); +	game_object[0]->add_component<Force>(1 , 0);  	physicsSystem.update();       return 0;  } |