fencer/src/rigidbody.c
2023-10-07 18:42:28 +02:00

69 lines
1.6 KiB
C

#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;
}