65 lines
2.1 KiB
C
65 lines
2.1 KiB
C
#ifndef _fencer_rigidbody_h
|
|
#define _fencer_rigidbody_h
|
|
|
|
#include "shape.h"
|
|
#include "transformable.h"
|
|
#include "list.h"
|
|
#include "collision.h"
|
|
#include "stdint.h"
|
|
|
|
struct Collision;
|
|
typedef struct {
|
|
struct Collision hit;
|
|
float duration;
|
|
} Contact;
|
|
|
|
typedef struct RigidBody RigidBody;
|
|
typedef struct PhysicsEntity PhysicsEntity;
|
|
|
|
typedef void (*CollisionHandlerFn)(void* obj, List* collisions);
|
|
|
|
// 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_collect_contacts(RigidBody* self);
|
|
extern List* rigidbody_get_contacts(RigidBody* self);
|
|
|
|
extern void rigidbody_integrate_forces(RigidBody* self);
|
|
|
|
extern float rigidbody_get_mass(const RigidBody* self);
|
|
extern void rigidbody_set_mass(RigidBody* self, float mass);
|
|
|
|
extern float rigidbody_get_bounce(const RigidBody* self);
|
|
extern void rigidbody_set_bounce(RigidBody* self, float bounce);
|
|
|
|
extern void rigidbody_add_impulse(RigidBody* self, Vector force, int use_mass);
|
|
extern void rigidbody_accelerate(RigidBody* self, Vector force, int use_mass);
|
|
|
|
extern PhysicsMask rigidbody_get_layers(RigidBody* self);
|
|
extern void rigidbody_set_layers(RigidBody* self, PhysicsMask layers);
|
|
|
|
extern PhysicsMask rigidbody_get_collision_mask(RigidBody* self);
|
|
extern void rigidbody_set_collision_mask(RigidBody* self, PhysicsMask mask);
|
|
|
|
extern int rigidbody_get_overlap(RigidBody* self);
|
|
extern void rigidbody_set_overlap(RigidBody* self, int value);
|
|
|
|
extern int rigidbody_is_static(RigidBody* self);
|
|
extern void rigidbody_set_static(RigidBody* self, int value);
|
|
|
|
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
|