aboutsummaryrefslogtreecommitdiff
path: root/src/crepe
diff options
context:
space:
mode:
authorJAROWMR <jarorutjes07@gmail.com>2024-11-22 15:36:14 +0100
committerJAROWMR <jarorutjes07@gmail.com>2024-11-22 15:36:14 +0100
commit3f63143b4005936da446fb2cdbbd1072b47fc8c1 (patch)
tree480484822cf915e035120fdd4db88e6f1c389b38 /src/crepe
parent503c1d15d35fc06ac36febc72a8aa8abe38707ce (diff)
merge with master
Diffstat (limited to 'src/crepe')
-rw-r--r--src/crepe/Collider.cpp2
-rw-r--r--src/crepe/Collider.h5
-rw-r--r--src/crepe/api/BoxCollider.cpp2
-rw-r--r--src/crepe/api/BoxCollider.h2
-rw-r--r--src/crepe/api/CircleCollider.cpp2
-rw-r--r--src/crepe/api/CircleCollider.h2
-rw-r--r--src/crepe/api/LoopManager.cpp1
-rw-r--r--src/crepe/api/Rigidbody.h2
-rw-r--r--src/crepe/system/CollisionSystem.cpp79
-rw-r--r--src/crepe/system/CollisionSystem.h8
10 files changed, 54 insertions, 51 deletions
diff --git a/src/crepe/Collider.cpp b/src/crepe/Collider.cpp
index 0706371..80a944d 100644
--- a/src/crepe/Collider.cpp
+++ b/src/crepe/Collider.cpp
@@ -2,4 +2,4 @@
using namespace crepe;
-Collider::Collider(game_object_id_t id, Vector2 offset) : Component(id), offset(offset) {}
+Collider::Collider(game_object_id_t id, vec2 offset) : Component(id), offset(offset) {}
diff --git a/src/crepe/Collider.h b/src/crepe/Collider.h
index 0157324..5b26af5 100644
--- a/src/crepe/Collider.h
+++ b/src/crepe/Collider.h
@@ -3,16 +3,17 @@
#include "api/Vector2.h"
#include "Component.h"
+#include "types.h"
namespace crepe {
class Collider : public Component {
public:
- Collider(game_object_id_t id, Vector2 offset);
+ Collider(game_object_id_t id, vec2 offset);
public:
//! Offset of the collider relative to rigidbody position
- Vector2 offset;
+ vec2 offset;
};
} // namespace crepe
diff --git a/src/crepe/api/BoxCollider.cpp b/src/crepe/api/BoxCollider.cpp
index eafbdb2..83fb632 100644
--- a/src/crepe/api/BoxCollider.cpp
+++ b/src/crepe/api/BoxCollider.cpp
@@ -4,4 +4,4 @@
using namespace crepe;
-BoxCollider::BoxCollider(game_object_id_t game_object_id,Vector2 offset, double width, double height) : Collider(game_object_id,offset), width(width), height(height) {}
+BoxCollider::BoxCollider(game_object_id_t game_object_id,vec2 offset, double width, double height) : Collider(game_object_id,offset), width(width), height(height) {}
diff --git a/src/crepe/api/BoxCollider.h b/src/crepe/api/BoxCollider.h
index 7f51cba..6135954 100644
--- a/src/crepe/api/BoxCollider.h
+++ b/src/crepe/api/BoxCollider.h
@@ -12,7 +12,7 @@ namespace crepe {
*/
class BoxCollider : public Collider {
public:
- BoxCollider(game_object_id_t game_object_id,Vector2 offset, double width, double height);
+ BoxCollider(game_object_id_t game_object_id,vec2 offset, double width, double height);
//! Width of box collider
double width;
diff --git a/src/crepe/api/CircleCollider.cpp b/src/crepe/api/CircleCollider.cpp
index 04a4995..43de991 100644
--- a/src/crepe/api/CircleCollider.cpp
+++ b/src/crepe/api/CircleCollider.cpp
@@ -3,4 +3,4 @@
using namespace crepe;
-CircleCollider::CircleCollider(game_object_id_t game_object_id,Vector2 offset, int radius) : Collider(game_object_id,offset), radius(radius) {}
+CircleCollider::CircleCollider(game_object_id_t game_object_id,vec2 offset, int radius) : Collider(game_object_id,offset), radius(radius) {}
diff --git a/src/crepe/api/CircleCollider.h b/src/crepe/api/CircleCollider.h
index 4e04fa4..843547f 100644
--- a/src/crepe/api/CircleCollider.h
+++ b/src/crepe/api/CircleCollider.h
@@ -14,7 +14,7 @@ namespace crepe {
class CircleCollider : public Collider {
public:
- CircleCollider(game_object_id_t game_object_id,Vector2 offset, int radius);
+ CircleCollider(game_object_id_t game_object_id,vec2 offset, int radius);
//! Radius of the circle collider.
double radius;
diff --git a/src/crepe/api/LoopManager.cpp b/src/crepe/api/LoopManager.cpp
index 586919d..10b59c8 100644
--- a/src/crepe/api/LoopManager.cpp
+++ b/src/crepe/api/LoopManager.cpp
@@ -63,6 +63,7 @@ void LoopManager::setup() {
this->game_running = true;
LoopTimer::get_instance().start();
LoopTimer::get_instance().set_fps(60);
+ this->scene_manager.load_next_scene();
}
void LoopManager::render() {
diff --git a/src/crepe/api/Rigidbody.h b/src/crepe/api/Rigidbody.h
index b96b463..7939563 100644
--- a/src/crepe/api/Rigidbody.h
+++ b/src/crepe/api/Rigidbody.h
@@ -78,7 +78,7 @@ public:
//! bounce factor of material
double elastisity = 0.0;
//! offset of all colliders relative to transform position
- Vector2 offset;
+ vec2 offset;
};
public:
diff --git a/src/crepe/system/CollisionSystem.cpp b/src/crepe/system/CollisionSystem.cpp
index 9ca8b3a..8d9b356 100644
--- a/src/crepe/system/CollisionSystem.cpp
+++ b/src/crepe/system/CollisionSystem.cpp
@@ -15,6 +15,7 @@
#include "ComponentManager.h"
#include "CollisionSystem.h"
#include "Collider.h"
+#include "types.h"
using namespace crepe;
@@ -39,7 +40,7 @@ void CollisionSystem::collision_handler(CollidedInfoStor& data1,CollidedInfoStor
// Data needed for collision handler info
const Collider* collider1 = nullptr;
const Collider* collider2 = nullptr;
- Vector2 move_back;
+ vec2 move_back;
// Check collision type and get values for handler
if (std::holds_alternative<std::reference_wrapper<BoxCollider>>(data1.collider)) {
@@ -53,8 +54,8 @@ void CollisionSystem::collision_handler(CollidedInfoStor& data1,CollidedInfoStor
// TODO: send with the collider info to this function because this is calculated previously
// Get the current position of the collider
- Vector2 final_position1 = current_position(box_collider1,data1.transform,data1.rigidbody);
- Vector2 final_position2 = current_position(box_collider2,data2.transform,data2.rigidbody);
+ vec2 final_position1 = current_position(box_collider1,data1.transform,data1.rigidbody);
+ vec2 final_position2 = current_position(box_collider2,data2.transform,data2.rigidbody);
// Determine move_back value for smallest overlap (x or y)
move_back = box_box_collision_move_back(box_collider1,box_collider2,final_position1,final_position2);
@@ -112,20 +113,20 @@ void CollisionSystem::collision_handler(CollidedInfoStor& data1,CollidedInfoStor
}
-Vector2 CollisionSystem::box_box_collision_move_back(const BoxCollider& box_collider1,const BoxCollider& box_collider2,Vector2 final_position1,Vector2 final_position2)
+vec2 CollisionSystem::box_box_collision_move_back(const BoxCollider& box_collider1,const BoxCollider& box_collider2,vec2 final_position1,vec2 final_position2)
{
- Vector2 resolution; // Default resolution vector
- Vector2 delta = final_position2 - final_position1;
+ vec2 resolution; // Default resolution vector
+ vec2 delta = final_position2 - final_position1;
// Compute half-dimensions of the boxes
- double half_width1 = box_collider1.width / 2.0;
- double half_height1 = box_collider1.height / 2.0;
- double half_width2 = box_collider2.width / 2.0;
- double half_height2 = box_collider2.height / 2.0;
+ float half_width1 = box_collider1.width / 2.0;
+ float half_height1 = box_collider1.height / 2.0;
+ float half_width2 = box_collider2.width / 2.0;
+ float half_height2 = box_collider2.height / 2.0;
// Calculate overlaps along X and Y axes
- double overlap_x = (half_width1 + half_width2) - std::abs(delta.x);
- double overlap_y = (half_height1 + half_height2) - std::abs(delta.y);
+ float overlap_x = (half_width1 + half_width2) - std::abs(delta.x);
+ float overlap_y = (half_height1 + half_height2) - std::abs(delta.y);
// Check if there is a collision
if (overlap_x > 0 && overlap_y > 0) {//should always be true check if this can be removed
@@ -288,14 +289,14 @@ std::vector<std::pair<CollisionSystem::CollidedInfoStor,CollisionSystem::Collide
bool CollisionSystem::check_box_box_collision(const BoxCollider& box1, const BoxCollider& box2, const Transform& transform1, const Transform& transform2, const Rigidbody& rigidbody1, const Rigidbody& rigidbody2)
{
// Get current positions of colliders
- Vector2 final_position1 = current_position(box1,transform1,rigidbody1);
- Vector2 final_position2 = current_position(box2,transform2,rigidbody2);
+ vec2 final_position1 = current_position(box1,transform1,rigidbody1);
+ vec2 final_position2 = current_position(box2,transform2,rigidbody2);
// Calculate half-extents (half width and half height)
- double half_width1 = box1.width / 2.0;
- double half_height1 = box1.height / 2.0;
- double half_width2 = box2.width / 2.0;
- double half_height2 = box2.height / 2.0;
+ float half_width1 = box1.width / 2.0;
+ float half_height1 = box1.height / 2.0;
+ float half_width2 = box2.width / 2.0;
+ float half_height2 = box2.height / 2.0;
// Check if the boxes overlap along the X and Y axes
return !(final_position1.x + half_width1 <= final_position2.x - half_width2 || // box1 is left of box2
@@ -306,21 +307,21 @@ bool CollisionSystem::check_box_box_collision(const BoxCollider& box1, const Box
bool CollisionSystem::check_box_circle_collision(const BoxCollider& box1, const CircleCollider& circle2, const Transform& transform1, const Transform& transform2, const Rigidbody& rigidbody1, const Rigidbody& rigidbody2) {
// Get current positions of colliders
- Vector2 final_position1 = current_position(box1, transform1, rigidbody1);
- Vector2 final_position2 = current_position(circle2, transform2, rigidbody2);
+ vec2 final_position1 = current_position(box1, transform1, rigidbody1);
+ vec2 final_position2 = current_position(circle2, transform2, rigidbody2);
// Calculate box half-extents
- double half_width = box1.width / 2.0;
- double half_height = box1.height / 2.0;
+ float half_width = box1.width / 2.0;
+ float half_height = box1.height / 2.0;
// Find the closest point on the box to the circle's center
- double closest_x = std::max(final_position1.x - half_width, std::min(final_position2.x, final_position1.x + half_width));
- double closest_y = std::max(final_position1.y - half_height, std::min(final_position2.y, final_position1.y + half_height));
+ float closest_x = std::max(final_position1.x - half_width, std::min(final_position2.x, final_position1.x + half_width));
+ float closest_y = std::max(final_position1.y - half_height, std::min(final_position2.y, final_position1.y + half_height));
// Calculate the distance squared between the circle's center and the closest point on the box
- double distance_x = final_position2.x - closest_x;
- double distance_y = final_position2.y - closest_y;
- double distance_squared = distance_x * distance_x + distance_y * distance_y;
+ float distance_x = final_position2.x - closest_x;
+ float distance_y = final_position2.y - closest_y;
+ float distance_squared = distance_x * distance_x + distance_y * distance_y;
// Compare distance squared with the square of the circle's radius
return distance_squared <= circle2.radius * circle2.radius;
@@ -328,32 +329,32 @@ bool CollisionSystem::check_box_circle_collision(const BoxCollider& box1, const
bool CollisionSystem::check_circle_circle_collision(const CircleCollider& circle1, const CircleCollider& circle2, const Transform& transform1, const Transform& transform2, const Rigidbody& rigidbody1, const Rigidbody& rigidbody2) {
// Get current positions of colliders
- Vector2 final_position1 = current_position(circle1,transform1,rigidbody1);
- Vector2 final_position2 = current_position(circle2,transform2,rigidbody2);
+ vec2 final_position1 = current_position(circle1,transform1,rigidbody1);
+ vec2 final_position2 = current_position(circle2,transform2,rigidbody2);
- double distance_x = final_position1.x - final_position2.x;
- double distance_y = final_position1.y - final_position2.y;
- double distance_squared = distance_x * distance_x + distance_y * distance_y;
+ float distance_x = final_position1.x - final_position2.x;
+ float distance_y = final_position1.y - final_position2.y;
+ float distance_squared = distance_x * distance_x + distance_y * distance_y;
// Calculate the sum of the radii
- double radius_sum = circle1.radius + circle2.radius;
+ float radius_sum = circle1.radius + circle2.radius;
// Check if the distance between the centers is less than or equal to the sum of the radii
return distance_squared <= radius_sum * radius_sum;
}
-Vector2 CollisionSystem::current_position(const Collider& collider, const Transform& transform, const Rigidbody& rigidbody) {
+vec2 CollisionSystem::current_position(const Collider& collider, const Transform& transform, const Rigidbody& rigidbody) {
// Get the rotation in radians
- double radians1 = transform.rotation * (M_PI / 180.0);
+ float radians1 = transform.rotation * (M_PI / 180.0);
// Calculate total offset with scale
- Vector2 total_offset = (rigidbody.data.offset + collider.offset) * transform.scale;
+ vec2 total_offset = (rigidbody.data.offset + collider.offset) * transform.scale;
// Rotate
- double rotated_total_offset_x1 = total_offset.x * cos(radians1) - total_offset.y * sin(radians1);
- double rotated_total_offset_y1 = total_offset.x * sin(radians1) + total_offset.y * cos(radians1);
+ float rotated_total_offset_x1 = total_offset.x * cos(radians1) - total_offset.y * sin(radians1);
+ float rotated_total_offset_y1 = total_offset.x * sin(radians1) + total_offset.y * cos(radians1);
// Final positions considering scaling and rotation
- return(transform.position + Vector2(rotated_total_offset_x1, rotated_total_offset_y1));
+ return(transform.position + vec2(rotated_total_offset_x1, rotated_total_offset_y1));
}
diff --git a/src/crepe/system/CollisionSystem.h b/src/crepe/system/CollisionSystem.h
index 69d1d23..44fff4e 100644
--- a/src/crepe/system/CollisionSystem.h
+++ b/src/crepe/system/CollisionSystem.h
@@ -65,7 +65,7 @@ public:
struct CollisionInfo{
ColliderInfo first;
ColliderInfo second;
- Vector2 move_back_value;
+ vec2 move_back_value;
Direction move_back_direction = Direction::NONE;
};
@@ -98,7 +98,7 @@ private:
* \param final_position2 The final position of the second box collider.
* \return The move-back vector to resolve the collision.
*/
- Vector2 box_box_collision_move_back(const BoxCollider& box_collider1,const BoxCollider& box_collider2,Vector2 position1,Vector2 position2);
+ vec2 box_box_collision_move_back(const BoxCollider& box_collider1,const BoxCollider& box_collider2,vec2 position1,vec2 position2);
/**
* \brief Determines the appropriate collision handler based on the rigidbody types of the colliding objects.
@@ -185,9 +185,9 @@ private: //detection
* \param collider The collider whose position is being determined.
* \param transform The transform component associated with the collider.
* \param rigidbody The rigidbody component associated with the collider.
- * \return The current position of the collider as a Vector2.
+ * \return The current position of the collider as a vec2.
*/
- Vector2 current_position(const Collider& collider, const Transform& transform, const Rigidbody& rigidbody);
+ vec2 current_position(const Collider& collider, const Transform& transform, const Rigidbody& rigidbody);
};
} // namespace crepe