aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/crepe/system/AISystem.cpp1
-rw-r--r--src/crepe/system/PhysicsSystem.cpp33
-rw-r--r--src/example/game.cpp46
-rw-r--r--src/test/PhysicsTest.cpp39
4 files changed, 62 insertions, 57 deletions
diff --git a/src/crepe/system/AISystem.cpp b/src/crepe/system/AISystem.cpp
index a20e28c..6578ecb 100644
--- a/src/crepe/system/AISystem.cpp
+++ b/src/crepe/system/AISystem.cpp
@@ -44,7 +44,6 @@ void AISystem::update() {
vec2 acceleration = force / rigidbody.data.mass;
// Finally, update Rigidbody's velocity
rigidbody.data.linear_velocity += acceleration * duration<float>(dt).count();
-
}
}
diff --git a/src/crepe/system/PhysicsSystem.cpp b/src/crepe/system/PhysicsSystem.cpp
index 78370d1..a1d35bb 100644
--- a/src/crepe/system/PhysicsSystem.cpp
+++ b/src/crepe/system/PhysicsSystem.cpp
@@ -22,11 +22,12 @@ void PhysicsSystem::update() {
duration_t delta_time = loop_timer.get_scaled_fixed_delta_time();
float dt = duration<float>(delta_time).count();
-
+
float gravity = Config::get_instance().physics.gravity;
for (Rigidbody & rigidbody : rigidbodies) {
if (!rigidbody.active) continue;
- Transform & transform = mgr.get_components_by_id<Transform>(rigidbody.game_object_id).front().get();
+ Transform & transform
+ = mgr.get_components_by_id<Transform>(rigidbody.game_object_id).front().get();
switch (rigidbody.data.body_type) {
case Rigidbody::BodyType::DYNAMIC:
@@ -43,43 +44,39 @@ void PhysicsSystem::update() {
if (rigidbody.data.gravity_scale > 0) {
rigidbody.data.linear_velocity.y
- += (rigidbody.data.mass * rigidbody.data.gravity_scale
- * gravity * dt);
+ += (rigidbody.data.mass * rigidbody.data.gravity_scale * gravity
+ * dt);
}
// Add coefficient rotation
if (rigidbody.data.angular_velocity_coefficient > 0) {
rigidbody.data.angular_velocity
*= std::pow(rigidbody.data.angular_velocity_coefficient, dt);
-
}
// Add coefficient movement horizontal
- if (rigidbody.data.linear_velocity_coefficient.x > 0)
- {
+ if (rigidbody.data.linear_velocity_coefficient.x > 0) {
rigidbody.data.linear_velocity.x
- *= std::pow(rigidbody.data.linear_velocity_coefficient.x, dt);
+ *= std::pow(rigidbody.data.linear_velocity_coefficient.x, dt);
}
// Add coefficient movement horizontal
- if (rigidbody.data.linear_velocity_coefficient.y > 0)
- {
+ if (rigidbody.data.linear_velocity_coefficient.y > 0) {
rigidbody.data.linear_velocity.y
- *= std::pow(rigidbody.data.linear_velocity_coefficient.y, dt);
+ *= std::pow(rigidbody.data.linear_velocity_coefficient.y, dt);
}
// Max velocity check
if (rigidbody.data.angular_velocity
> rigidbody.data.max_angular_velocity) {
- 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;
+ < -rigidbody.data.max_angular_velocity) {
+ rigidbody.data.angular_velocity = -rigidbody.data.max_angular_velocity;
}
-
+
// Set max velocity to maximum length
- if(rigidbody.data.linear_velocity.length() > rigidbody.data.max_linear_velocity) {
+ if (rigidbody.data.linear_velocity.length()
+ > rigidbody.data.max_linear_velocity) {
rigidbody.data.linear_velocity.normalize();
rigidbody.data.linear_velocity *= rigidbody.data.max_linear_velocity;
}
diff --git a/src/example/game.cpp b/src/example/game.cpp
index aab8d66..5361f3a 100644
--- a/src/example/game.cpp
+++ b/src/example/game.cpp
@@ -188,10 +188,13 @@ public:
vec2{world_collider, world_collider}); // Left
world.add_component<BoxCollider>(vec2{screen_size_width / 2 + world_collider / 2, 0},
vec2{world_collider, world_collider}); // right
- world.add_component<Camera>(ivec2{static_cast<int>(screen_size_width),static_cast<int>(screen_size_height)},vec2{screen_size_width,screen_size_height},Camera::Data{
- .bg_color = Color::WHITE,
- .zoom = 1,
- });
+ world.add_component<Camera>(
+ ivec2{static_cast<int>(screen_size_width), static_cast<int>(screen_size_height)},
+ vec2{screen_size_width, screen_size_height},
+ Camera::Data{
+ .bg_color = Color::WHITE,
+ .zoom = 1,
+ });
GameObject game_object1 = mgr.new_object(
"Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 0, 1);
@@ -210,17 +213,20 @@ public:
game_object1.add_component<BehaviorScript>().set_script<MyScript1>();
Asset img1{"asset/texture/square.png"};
- game_object1.add_component<Sprite>(img1,Sprite::Data{
- .size = {20,20},
- });
+ game_object1.add_component<Sprite>(img1, Sprite::Data{
+ .size = {20, 20},
+ });
//add circle with cirlcecollider deactiveated
game_object1.add_component<CircleCollider>(vec2{0, 0}, 10).active = false;
Asset img2{"asset/texture/circle.png"};
game_object1
- .add_component<Sprite>(img2,Sprite::Data{
- .size = {20,20},
- }).active = false;
+ .add_component<Sprite>(img2,
+ Sprite::Data{
+ .size = {20, 20},
+ })
+ .active
+ = false;
GameObject game_object2 = mgr.new_object(
"Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 0, 1);
@@ -237,17 +243,21 @@ public:
// add box with boxcollider
game_object2.add_component<BoxCollider>(vec2{0, 0}, vec2{20, 20});
game_object2.add_component<BehaviorScript>().set_script<MyScript2>();
-
- game_object2.add_component<Sprite>(img1,Sprite::Data{
- .size = {20,20},
- });
+
+ game_object2.add_component<Sprite>(img1, Sprite::Data{
+ .size = {20, 20},
+ });
//add circle with cirlcecollider deactiveated
game_object2.add_component<CircleCollider>(vec2{0, 0}, 10).active = false;
-
- game_object2.add_component<Sprite>(img2,Sprite::Data{
- .size = {20,20},
- }).active = false;
+
+ game_object2
+ .add_component<Sprite>(img2,
+ Sprite::Data{
+ .size = {20, 20},
+ })
+ .active
+ = false;
}
string get_name() const { return "scene1"; }
diff --git a/src/test/PhysicsTest.cpp b/src/test/PhysicsTest.cpp
index 198a371..c04e3ff 100644
--- a/src/test/PhysicsTest.cpp
+++ b/src/test/PhysicsTest.cpp
@@ -3,10 +3,10 @@
#include <crepe/api/Rigidbody.h>
#include <crepe/api/Transform.h>
#include <crepe/manager/ComponentManager.h>
-#include <crepe/system/PhysicsSystem.h>
-#include <gtest/gtest.h>
#include <crepe/manager/LoopTimerManager.h>
#include <crepe/manager/Mediator.h>
+#include <crepe/system/PhysicsSystem.h>
+#include <gtest/gtest.h>
using namespace std;
using namespace std::chrono_literals;
@@ -20,7 +20,6 @@ public:
PhysicsSystem system{m};
LoopTimerManager loop_timer{m};
-
void SetUp() override {
ComponentManager & mgr = this->component_manager;
vector<reference_wrapper<Transform>> transforms
@@ -59,10 +58,10 @@ TEST_F(PhysicsTest, gravity) {
EXPECT_EQ(transform.position.y, 0);
system.update();
- EXPECT_NEAR(transform.position.y, 0.0004,0.0001);
+ EXPECT_NEAR(transform.position.y, 0.0004, 0.0001);
system.update();
- EXPECT_NEAR(transform.position.y, 0.002,0.001);
+ EXPECT_NEAR(transform.position.y, 0.002, 0.001);
}
TEST_F(PhysicsTest, max_velocity) {
@@ -76,15 +75,15 @@ TEST_F(PhysicsTest, max_velocity) {
rigidbody.add_force_linear({100, 100});
rigidbody.add_force_angular(100);
system.update();
- EXPECT_NEAR(rigidbody.data.linear_velocity.y, 7.07,0.01);
- EXPECT_NEAR(rigidbody.data.linear_velocity.x, 7.07,0.01);
+ EXPECT_NEAR(rigidbody.data.linear_velocity.y, 7.07, 0.01);
+ EXPECT_NEAR(rigidbody.data.linear_velocity.x, 7.07, 0.01);
EXPECT_EQ(rigidbody.data.angular_velocity, 10);
rigidbody.add_force_linear({-100, -100});
rigidbody.add_force_angular(-100);
system.update();
- EXPECT_NEAR(rigidbody.data.linear_velocity.y, -7.07,0.01);
- EXPECT_NEAR(rigidbody.data.linear_velocity.x, -7.07,0.01);
+ EXPECT_NEAR(rigidbody.data.linear_velocity.y, -7.07, 0.01);
+ EXPECT_NEAR(rigidbody.data.linear_velocity.x, -7.07, 0.01);
EXPECT_EQ(rigidbody.data.angular_velocity, -10);
}
@@ -101,31 +100,31 @@ TEST_F(PhysicsTest, movement) {
rigidbody.add_force_linear({1, 1});
rigidbody.add_force_angular(1);
system.update();
- EXPECT_NEAR(transform.position.x, 0.02,0.001);
- EXPECT_NEAR(transform.position.y, 0.02,0.001);
- EXPECT_NEAR(transform.rotation, 0.02,0.001);
+ EXPECT_NEAR(transform.position.x, 0.02, 0.001);
+ EXPECT_NEAR(transform.position.y, 0.02, 0.001);
+ EXPECT_NEAR(transform.rotation, 0.02, 0.001);
rigidbody.data.constraints = {1, 1, 1};
- EXPECT_NEAR(transform.position.x, 0.02,0.001);
- EXPECT_NEAR(transform.position.y, 0.02,0.001);
- EXPECT_NEAR(transform.rotation, 0.02,0.001);
+ EXPECT_NEAR(transform.position.x, 0.02, 0.001);
+ EXPECT_NEAR(transform.position.y, 0.02, 0.001);
+ EXPECT_NEAR(transform.rotation, 0.02, 0.001);
rigidbody.data.linear_velocity_coefficient.x = 0.5;
rigidbody.data.linear_velocity_coefficient.y = 0.5;
rigidbody.data.angular_velocity_coefficient = 0.5;
system.update();
- EXPECT_NEAR(rigidbody.data.linear_velocity.x, 0.98,0.01);
- EXPECT_NEAR(rigidbody.data.linear_velocity.y, 0.98,0.01);
- EXPECT_NEAR(rigidbody.data.angular_velocity, 0.98,0.01);
+ EXPECT_NEAR(rigidbody.data.linear_velocity.x, 0.98, 0.01);
+ EXPECT_NEAR(rigidbody.data.linear_velocity.y, 0.98, 0.01);
+ EXPECT_NEAR(rigidbody.data.angular_velocity, 0.98, 0.01);
rigidbody.data.constraints = {1, 1, 0};
rigidbody.data.angular_velocity_coefficient = 0;
rigidbody.data.max_angular_velocity = 1000;
rigidbody.data.angular_velocity = 360;
system.update();
- EXPECT_NEAR(transform.rotation, 7.22,0.0001);
+ EXPECT_NEAR(transform.rotation, 7.22, 0.0001);
rigidbody.data.angular_velocity = -360;
system.update();
- EXPECT_NEAR(transform.rotation, 0.02,0.001);
+ EXPECT_NEAR(transform.rotation, 0.02, 0.001);
}