#include "rigidbody.h" #include "program.h" struct RigidBody { Transformable transformable; float mass; Vector linear_velocity; Vector linear_force; int is_static; }; RigidBody* rigidbody_make(Transformable transform) { RigidBody* self = malloc(sizeof(RigidBody)); *self = (RigidBody){ .transformable = transform, .mass = 0.0f, .linear_velocity = ZeroVector, .linear_force = ZeroVector, .is_static = 0 }; return self; } void rigidbody_destroy(RigidBody* self) { free(self); } void rigidbody_apply_physics(RigidBody* self) { Vector velocity = vmulff(self->linear_velocity, delta_time()); Vector* position = (self->transformable.tc->get_position(self->transformable.data)); *position = vaddf(*position, velocity); } float rigidbody_get_mass(const RigidBody* self) { return self->mass; } void rigidbody_set_mass(RigidBody* self, float mass) { self->mass = mass; } void rigidbody_add_impulse(RigidBody* self, Vector force) { self->linear_force = vaddf(self->linear_force, force); } void rigidbody_accelerate(RigidBody* self, Vector force) { force = vmulff(force, delta_time()); self->linear_force = vaddf(self->linear_force, force); } int rigidbody_is_static(const RigidBody* self) { return self->is_static; } void rigidbody_set_static(RigidBody* self, int is_static) { self->is_static = is_static; } Vector rigidbody_get_velocity(const RigidBody* self) { return self->linear_velocity; } void rigidbody_set_velocity(RigidBody* self, Vector velocity) { self->linear_velocity = velocity; }