System info & network
This commit is contained in:
40
code/physics/simulation.cpp
Normal file
40
code/physics/simulation.cpp
Normal file
@@ -0,0 +1,40 @@
|
||||
#include "base.h"
|
||||
#include "simulation.h"
|
||||
#include "../lib/geometry.h"
|
||||
#include "collision.h"
|
||||
|
||||
void phy_integrate(phy_world *world, f64 delta_t)
|
||||
{
|
||||
for(u32 i = 0; i < world->bodies_count; i++)
|
||||
{
|
||||
phy_body *body = world->bodies + i;
|
||||
|
||||
body->velocity += world->gravity * body->gravity_multiplier * delta_t;
|
||||
|
||||
body->position += body->velocity * delta_t;
|
||||
body->rotation += body->angular_velocity * delta_t;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void phy_simulate(phy_world *world, f64 delta_t)
|
||||
{
|
||||
// @Performance: Grouping for optimizations (active/inactive, constraints)
|
||||
|
||||
phy_integrate(world, delta_t);
|
||||
|
||||
u32 max_pairs = 1000; // @Correctness: this should be dynamic and should reuse memory when possible
|
||||
u32 num_pairs = 0;
|
||||
phy_body_pair *pair_list = PHY_ALLOC(phy_body_pair, max_pairs);
|
||||
phy_collisions_broadphase(world, pair_list, max_pairs, &num_pairs);
|
||||
|
||||
u32 max_collisions = 1000;
|
||||
u32 num_collisions = 0;
|
||||
phy_collision *collision_list = PHY_ALLOC(phy_collision, max_collisions);
|
||||
phy_collisions_detection(world, pair_list, minimum(max_pairs, num_pairs), collision_list, max_collisions, &num_collisions);
|
||||
|
||||
phy_collisions_resolution(world, collision_list, minimum(max_collisions, num_collisions));
|
||||
|
||||
PHY_FREE(pair_list);
|
||||
PHY_FREE(collision_list);
|
||||
}
|
||||
Reference in New Issue
Block a user