feat(collision): Added collider type to combine a shape with a rigidbody and additional physics settings

This commit is contained in:
Sara 2023-11-25 21:51:08 +01:00
parent 29b2852cea
commit 6a2a612594
2 changed files with 72 additions and 0 deletions

53
core/src/collider.c Normal file
View file

@ -0,0 +1,53 @@
#include "collider.h"
#include "collision.h"
#include "debug.h"
struct Collider {
Shape* shape;
RigidBody* body;
PhysicsMask layers;
int overlap;
};
Collider* collider_new(RigidBody* body, Shape* shape, int overlap, PhysicsMask layers) {
Collider* self = malloc(sizeof(Collider));
ASSERT_RETURN(self != NULL, NULL, "Failed to allocate space for Collider");
*self = (Collider) {
.shape = shape,
.body = body,
.layers = layers,
.overlap = overlap,
};
rigidbody_add_collider(self->body, self);
return self;
}
void collider_destroy(Collider* self) {
shape_destroy(self->shape);
rigidbody_remove_collider(self->body, self);
free(self);
}
PhysicsQuery collider_to_query(Collider* self) {
return (PhysicsQuery) {
.shape = self->shape,
.transform = rigidbody_get_transform(self->body),
.mask = self->layers
};
}
Shape* collider_get_shape(Collider* self) {
return self->shape;
}
RigidBody* collider_get_rigidbody(Collider* self) {
return self->body;
}
int collider_is_overlap(Collider* self) {
return self->overlap;
}
void collider_set_overlap(Collider* self, int value) {
self->overlap = value;
}

19
core/src/collider.h Normal file
View file

@ -0,0 +1,19 @@
#ifndef _fencer_collider_h
#define _fencer_collider_h
#include "shape.h"
#include "rigidbody.h"
typedef struct Collider Collider;
extern Collider* collider_new(RigidBody* owner, Shape* shape, int overlap, PhysicsMask layers);
extern void collider_destroy(Collider* self);
extern PhysicsQuery collider_to_query(Collider* self);
extern Shape* collider_get_shape(Collider* self);
extern RigidBody* collider_get_rigidbody(Collider* self);
extern int collider_is_overlap(Collider* self);
extern void collider_set_overlap(Collider* self, int value);
#endif // !_fencer_collider_h