#ifndef RIGID_BODIES_H_
#define RIGID_BODIES_H_
+#include "math/mat3x3.h"
+
typedef struct RigidBodies RigidBodies;
-typedef struct Camera Camera;
+typedef struct Platforms Platforms;
typedef size_t RigidBodyId;
RigidBodies *create_rigid_bodies(size_t capacity);
void destroy_rigid_bodies(RigidBodies *rigid_bodies);
+int rigid_bodies_collide(RigidBodies *rigid_bodies,
+ const Platforms *platforms);
+
int rigid_bodies_update(RigidBodies *rigid_bodies,
+ RigidBodyId id,
float delta_time);
int rigid_bodies_render(RigidBodies *rigid_bodies,
- Camera *camera);
+ RigidBodyId id,
+ Color color,
+ const Camera *camera);
RigidBodyId rigid_bodies_add(RigidBodies *rigid_bodies,
- Rect rect,
- Color color);
+ Rect rect);
+void rigid_bodies_remove(RigidBodies *rigid_bodies,
+ RigidBodyId id);
Rect rigid_bodies_hitbox(const RigidBodies *rigid_bodies,
RigidBodyId id);
void rigid_bodies_move(RigidBodies *rigid_bodies,
RigidBodyId id,
- Vec movement);
+ Vec2f movement);
int rigid_bodies_touches_ground(const RigidBodies *rigid_bodies,
RigidBodyId id);
void rigid_bodies_apply_force(RigidBodies * rigid_bodies,
RigidBodyId id,
- Vec force);
+ Vec2f force);
+
+void rigid_bodies_apply_omniforce(RigidBodies *rigid_bodies,
+ Vec2f force);
void rigid_bodies_transform_velocity(RigidBodies *rigid_bodies,
RigidBodyId id,
void rigid_bodies_teleport_to(RigidBodies *rigid_bodies,
RigidBodyId id,
- Vec position);
+ Vec2f position);
void rigid_bodies_damper(RigidBodies *rigid_bodies,
RigidBodyId id,
- Vec v);
+ Vec2f v);
+void rigid_bodies_disable(RigidBodies *rigid_bodies,
+ RigidBodyId id,
+ bool disabled);
#endif // RIGID_BODIES_H_