aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjaroWMR <jarorutjes07@gmail.com>2024-10-20 14:33:19 +0200
committerjaroWMR <jarorutjes07@gmail.com>2024-10-20 14:33:19 +0200
commitd8483cfab70b5aca3baae6e0588924da8b54e090 (patch)
tree5326d27e365ddea1923ee64586e0c5fc3befe6a9
parent4ff1159fe5f6ee6dd8becc662bc95a93acda545a (diff)
updated components to have an ID
-rw-r--r--src/crepe/CMakeLists.txt2
-rw-r--r--src/crepe/Collider.cpp2
-rw-r--r--src/crepe/Collider.h2
-rw-r--r--src/crepe/Component.cpp2
-rw-r--r--src/crepe/Component.h6
-rw-r--r--src/crepe/ComponentManager.hpp2
-rw-r--r--src/crepe/ParticleEmitter.cpp4
-rw-r--r--src/crepe/ParticleEmitter.h2
-rw-r--r--src/crepe/PhysicsSystem.cpp20
-rw-r--r--src/crepe/PhysicsSystem.h17
-rw-r--r--src/crepe/Rigidbody.cpp5
-rw-r--r--src/crepe/Rigidbody.h11
-rw-r--r--src/crepe/Sprite.cpp2
-rw-r--r--src/crepe/Sprite.h2
-rw-r--r--src/crepe/Transform.cpp4
-rw-r--r--src/crepe/Transform.h2
-rw-r--r--src/crepe/api/BehaviorScript.cpp2
-rw-r--r--src/example/CMakeLists.txt2
-rw-r--r--src/example/Physics.cpp21
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;
+}