#ifndef _fencer_rigidbody_h #define _fencer_rigidbody_h #include "shape.h" #include "transformable.h" #include "list.h" struct Collision; typedef struct RigidBody RigidBody; // Referenced transform is stored but not owned by the rigidbody. extern RigidBody* rigidbody_make(Transformable transform); extern void rigidbody_destroy(RigidBody* self); extern void rigidbody_add_contact(RigidBody* self, struct Collision hit); extern void rigidbody_solve_contacts(RigidBody* self); extern void rigidbody_apply_physics(RigidBody* self); extern float rigidbody_get_mass(const RigidBody* self); extern void rigidbody_set_mass(RigidBody* self, float mass); extern void rigidbody_add_impulse(RigidBody* self, Vector force, int use_mass); extern void rigidbody_accelerate(RigidBody* self, Vector force, int use_mass); extern int rigidbody_is_static(const RigidBody* self); extern void rigidbody_set_static(RigidBody* self, int is_static); extern Vector rigidbody_get_velocity(const RigidBody* self); extern void rigidbody_set_velocity(RigidBody* self, Vector velocity); extern Vector rigidbody_get_force(RigidBody* self); extern void rigidbody_debug_draw_contacts(RigidBody* self); extern Transform* rigidbody_get_transform(RigidBody* self); impl_Transformable_for(RigidBody, rigidbody_get_transform ) #endif // !_fencer_rigidbody_h