diff options
| author | jaroWMR <jarorutjes07@gmail.com> | 2024-10-20 14:33:19 +0200 | 
|---|---|---|
| committer | jaroWMR <jarorutjes07@gmail.com> | 2024-10-20 14:33:19 +0200 | 
| commit | d8483cfab70b5aca3baae6e0588924da8b54e090 (patch) | |
| tree | 5326d27e365ddea1923ee64586e0c5fc3befe6a9 | |
| parent | 4ff1159fe5f6ee6dd8becc662bc95a93acda545a (diff) | |
updated components to have an ID
| -rw-r--r-- | src/crepe/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/crepe/Collider.cpp | 2 | ||||
| -rw-r--r-- | src/crepe/Collider.h | 2 | ||||
| -rw-r--r-- | src/crepe/Component.cpp | 2 | ||||
| -rw-r--r-- | src/crepe/Component.h | 6 | ||||
| -rw-r--r-- | src/crepe/ComponentManager.hpp | 2 | ||||
| -rw-r--r-- | src/crepe/ParticleEmitter.cpp | 4 | ||||
| -rw-r--r-- | src/crepe/ParticleEmitter.h | 2 | ||||
| -rw-r--r-- | src/crepe/PhysicsSystem.cpp | 20 | ||||
| -rw-r--r-- | src/crepe/PhysicsSystem.h | 17 | ||||
| -rw-r--r-- | src/crepe/Rigidbody.cpp | 5 | ||||
| -rw-r--r-- | src/crepe/Rigidbody.h | 11 | ||||
| -rw-r--r-- | src/crepe/Sprite.cpp | 2 | ||||
| -rw-r--r-- | src/crepe/Sprite.h | 2 | ||||
| -rw-r--r-- | src/crepe/Transform.cpp | 4 | ||||
| -rw-r--r-- | src/crepe/Transform.h | 2 | ||||
| -rw-r--r-- | src/crepe/api/BehaviorScript.cpp | 2 | ||||
| -rw-r--r-- | src/example/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/example/Physics.cpp | 21 | 
19 files changed, 91 insertions, 19 deletions
| diff --git a/src/crepe/CMakeLists.txt b/src/crepe/CMakeLists.txt index 399200b..ae9d51d 100644 --- a/src/crepe/CMakeLists.txt +++ b/src/crepe/CMakeLists.txt @@ -15,6 +15,7 @@ target_sources(crepe PUBLIC  	Sprite.cpp  	ScriptSystem.cpp  	Script.cpp +	PhysicsSystem.cpp  )  target_sources(crepe PUBLIC FILE_SET HEADERS FILES @@ -35,6 +36,7 @@ target_sources(crepe PUBLIC FILE_SET HEADERS FILES  	Sprite.h  	System.h  	ScriptSystem.h +	PhysicsSystem.h  )  add_subdirectory(api) diff --git a/src/crepe/Collider.cpp b/src/crepe/Collider.cpp index 3f12afd..3d3f7cb 100644 --- a/src/crepe/Collider.cpp +++ b/src/crepe/Collider.cpp @@ -2,4 +2,4 @@  using namespace crepe; -Collider::Collider(int size) : size(size) {} +Collider::Collider(uint32_t gameObjectId , int size) : Component(gameObjectId), size(size){} diff --git a/src/crepe/Collider.h b/src/crepe/Collider.h index 120da05..69bb0c3 100644 --- a/src/crepe/Collider.h +++ b/src/crepe/Collider.h @@ -6,7 +6,7 @@ namespace crepe {  class Collider : public Component {  public: -	Collider(int size); +	Collider(uint32_t gameObjectId,int size);  	int size;  }; diff --git a/src/crepe/Component.cpp b/src/crepe/Component.cpp index d14159c..e2cd7e0 100644 --- a/src/crepe/Component.cpp +++ b/src/crepe/Component.cpp @@ -2,4 +2,4 @@  using namespace crepe; -Component::Component() : active(true) {} +Component::Component(uint32_t id) : gameObjectId(id), active(true) {} diff --git a/src/crepe/Component.h b/src/crepe/Component.h index 16a4ce5..c8fb6bc 100644 --- a/src/crepe/Component.h +++ b/src/crepe/Component.h @@ -1,13 +1,15 @@  #pragma once +#include <cstdint>  namespace crepe {  class Component {  public: -	Component(); +	Component(uint32_t id);  	// TODO: shouldn't this constructor be deleted because this class will never  	// directly be instantiated? - +	//changed so it sets the id (jaro) +	uint32_t gameObjectId;  	bool active;  }; diff --git a/src/crepe/ComponentManager.hpp b/src/crepe/ComponentManager.hpp index 2ea0c70..f19fdcb 100644 --- a/src/crepe/ComponentManager.hpp +++ b/src/crepe/ComponentManager.hpp @@ -30,7 +30,7 @@ void ComponentManager::add_component(uint32_t id, Args &&... args) {  	// Create a new component of type T (arguments directly forwarded). The  	// constructor must be called by ComponentManager. -	T * instance = new T(forward<Args>(args)...); +	T * instance = new T(id,forward<Args>(args)...);  	// store its unique_ptr in the vector<>  	components[type][id].push_back(unique_ptr<T>(instance));  } diff --git a/src/crepe/ParticleEmitter.cpp b/src/crepe/ParticleEmitter.cpp index 30cba7c..318c6db 100644 --- a/src/crepe/ParticleEmitter.cpp +++ b/src/crepe/ParticleEmitter.cpp @@ -5,8 +5,8 @@  using namespace crepe; -ParticleEmitter::ParticleEmitter(uint32_t maxParticles, uint32_t emissionRate, uint32_t speed, uint32_t speedOffset, uint32_t angle, uint32_t angleOffset, float m_beginLifespan, float m_endLifespan) -    : m_maxParticles(maxParticles), m_emissionRate(emissionRate), m_speed(speed), m_speedOffset(speedOffset), m_position{0, 0}, m_beginLifespan(m_beginLifespan),m_endLifespan(m_endLifespan) { +ParticleEmitter::ParticleEmitter(uint32_t gameObjectId ,uint32_t maxParticles, uint32_t emissionRate, uint32_t speed, uint32_t speedOffset, uint32_t angle, uint32_t angleOffset, float m_beginLifespan, float m_endLifespan) +    : Component(gameObjectId), m_maxParticles(maxParticles), m_emissionRate(emissionRate), m_speed(speed), m_speedOffset(speedOffset), m_position{0, 0}, m_beginLifespan(m_beginLifespan),m_endLifespan(m_endLifespan) {      std::srand(static_cast<uint32_t>(std::time(nullptr))); // initialize random seed      std::cout << "Create emitter" << std::endl;      m_minAngle = (360 + angle - (angleOffset % 360)) % 360; // calculate minAngle diff --git a/src/crepe/ParticleEmitter.h b/src/crepe/ParticleEmitter.h index 477f492..8cd78a9 100644 --- a/src/crepe/ParticleEmitter.h +++ b/src/crepe/ParticleEmitter.h @@ -10,7 +10,7 @@ namespace crepe {  class ParticleEmitter : public Component {  public: -    ParticleEmitter(uint32_t maxParticles, uint32_t emissionRate, uint32_t speed, uint32_t speedOffset, uint32_t angle, uint32_t angleOffset,float m_beginLifespan,float m_endLifespan); +    ParticleEmitter(uint32_t gameObjectId, uint32_t maxParticles, uint32_t emissionRate, uint32_t speed, uint32_t speedOffset, uint32_t angle, uint32_t angleOffset,float m_beginLifespan,float m_endLifespan);      ~ParticleEmitter();      Position m_position; //position of the emitter diff --git a/src/crepe/PhysicsSystem.cpp b/src/crepe/PhysicsSystem.cpp new file mode 100644 index 0000000..c24afa2 --- /dev/null +++ b/src/crepe/PhysicsSystem.cpp @@ -0,0 +1,20 @@ +#include "PhysicsSystem.h" +#include "ComponentManager.h" +#include "Rigidbody.h" +#include "Transform.h" +#include <iostream> + +using namespace crepe; + +PhysicsSystem::PhysicsSystem() { + +} + +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; +	} +} diff --git a/src/crepe/PhysicsSystem.h b/src/crepe/PhysicsSystem.h new file mode 100644 index 0000000..1899089 --- /dev/null +++ b/src/crepe/PhysicsSystem.h @@ -0,0 +1,17 @@ +#pragma once + +namespace crepe { + +class PhysicsSystem +{ +	private: +		/* data */ +	public: +		PhysicsSystem(/* args */); +		void update(); +}; + +} + + + diff --git a/src/crepe/Rigidbody.cpp b/src/crepe/Rigidbody.cpp index 495d908..a610e55 100644 --- a/src/crepe/Rigidbody.cpp +++ b/src/crepe/Rigidbody.cpp @@ -2,5 +2,6 @@  using namespace crepe; -Rigidbody::Rigidbody(int mass, int gravityScale, int bodyType) -	: mass(mass), gravity_scale(gravityScale), body_type(bodyType) {} +Rigidbody::Rigidbody(uint32_t gameObjectId,int mass, int gravityScale, BodyType bodyType) +	: Component(gameObjectId), mass(mass), gravity_scale(gravityScale), body_type(bodyType) {} + diff --git a/src/crepe/Rigidbody.h b/src/crepe/Rigidbody.h index 63a8877..7018e83 100644 --- a/src/crepe/Rigidbody.h +++ b/src/crepe/Rigidbody.h @@ -1,16 +1,23 @@  #pragma once  #include "Component.h" +#include <cstdint>  namespace crepe { +enum class BodyType { +    Static,     // Does not move (e.g. walls, ground ...) +    Dynamic,    // Moves and responds to forces (e.g. player, physics objects ...) +    Kinematic   // Moves but does not respond to forces (e.g. moving platforms ...) +}; +  class Rigidbody : public Component {  public: -	Rigidbody(int mass, int gravityScale, int bodyType); +	Rigidbody(uint32_t gameObjectId,int mass, int gravityScale, BodyType bodyType);  	int mass;  	int gravity_scale; -	int body_type; +	BodyType body_type;  };  } // namespace crepe diff --git a/src/crepe/Sprite.cpp b/src/crepe/Sprite.cpp index a5a5e68..7f5bca7 100644 --- a/src/crepe/Sprite.cpp +++ b/src/crepe/Sprite.cpp @@ -5,4 +5,4 @@  using namespace crepe;  using namespace std; -Sprite::Sprite(string path) : path(path) {} +Sprite::Sprite(uint32_t gameObjectId, string path) : Component(gameObjectId), path(path) {} diff --git a/src/crepe/Sprite.h b/src/crepe/Sprite.h index 143e702..8c517ed 100644 --- a/src/crepe/Sprite.h +++ b/src/crepe/Sprite.h @@ -8,7 +8,7 @@ namespace crepe {  class Sprite : public Component {  public: -	Sprite(std::string path); +	Sprite(uint32_t gameObjectId,std::string path);  	std::string path;  }; diff --git a/src/crepe/Transform.cpp b/src/crepe/Transform.cpp index 0e4b0cf..2fde448 100644 --- a/src/crepe/Transform.cpp +++ b/src/crepe/Transform.cpp @@ -2,5 +2,5 @@  using namespace crepe; -Transform::Transform(int mass, int gravityScale, int bodyType) -	: mass(mass), gravity_scale(gravityScale), body_type(bodyType) {} +Transform::Transform(uint32_t gameObjectId,int mass, int gravityScale, int bodyType) +	: Component(gameObjectId), mass(mass), gravity_scale(gravityScale), body_type(bodyType) {} diff --git a/src/crepe/Transform.h b/src/crepe/Transform.h index c72ebc4..96da1a4 100644 --- a/src/crepe/Transform.h +++ b/src/crepe/Transform.h @@ -6,7 +6,7 @@ namespace crepe {  class Transform : public Component {  public: -	Transform(int mass, int gravityScale, int bodyType); +	Transform(uint32_t gameObjectId,int mass, int gravityScale, int bodyType);  	int mass;  	int gravity_scale; diff --git a/src/crepe/api/BehaviorScript.cpp b/src/crepe/api/BehaviorScript.cpp index 84bfd4c..74788ec 100644 --- a/src/crepe/api/BehaviorScript.cpp +++ b/src/crepe/api/BehaviorScript.cpp @@ -4,4 +4,4 @@  using namespace crepe::api; -BehaviorScript::BehaviorScript() { dbg_trace(); } +BehaviorScript::BehaviorScript() : Component(gameObjectId) { dbg_trace(); } diff --git a/src/example/CMakeLists.txt b/src/example/CMakeLists.txt index cbf8e31..256d87e 100644 --- a/src/example/CMakeLists.txt +++ b/src/example/CMakeLists.txt @@ -16,4 +16,6 @@ add_example(audio_internal)  add_example(components_internal)  add_example(script)  add_example(particle) +add_example(Physics)  target_link_libraries(particle PUBLIC SDL2) +target_link_libraries(Physics PUBLIC SDL2) diff --git a/src/example/Physics.cpp b/src/example/Physics.cpp new file mode 100644 index 0000000..61a3bf2 --- /dev/null +++ b/src/example/Physics.cpp @@ -0,0 +1,21 @@ +#include <iostream> +#include <thread> +#include <chrono> +#include "Rigidbody.h" +#include "PhysicsSystem.h" +#include <crepe/Component.h> +#include <crepe/ComponentManager.h> +#include <crepe/GameObject.h> + +using namespace crepe; +using namespace std; + + +int main(int argc, char* argv[]) { +	PhysicsSystem physicsSystem; +	GameObject * game_object[1]; +	game_object[0] = new GameObject(5, "Name", "Tag", 0); +	game_object[0]->add_component<Rigidbody>(10, 11 , BodyType::Dynamic); +	physicsSystem.update();  +    return 0; +} |